使用语法识别文本对象进行Vim对象选择

use*_*461 5 syntax vim select text

我刚刚了解了vim 真正令人敬畏的对象选择功能.将光标放在某个"文本对象"中,一组简单的动词可以选择或操作整个对象.例如,将光标放在下面引号内的任何位置(例如,在'o'上):

print "Hello, world"
           ^
Run Code Online (Sandbox Code Playgroud)

该命令vi"将选择引号内的整个短语.相同的功能适用于vim定义的许多" 文本对象 ",包括用引号,括号和大括号括起来的单词,句子,段落和字符.

但是现在我想要一个"文本对象"的概念来了解我正在编写的语言.例如,考虑以下python:

re.sub("[^A-Z ]", " ", string)
Run Code Online (Sandbox Code Playgroud)

我希望能够将光标放在某处,并选择整个事物.函数调用是一个定义明确的语法结构,但它不是"单词","句子","段落",或用引号或括号括起来.

是否有任何插件或vimrc hacks定义了这些与语言相关的"文本对象"?

jam*_*san 3

尽管可以构造选择整个语法区域的映射,但这不适用于您给定的场景,因为没有“函数调用”语法区域。

一种选择是选择括号表达式,然后向后扩展以包含函数调用。

va)oB
Run Code Online (Sandbox Code Playgroud)
  • va)选择括号表达式
  • o切换光标位于视觉选择的哪一端以及展开的方向。
  • B将光标向后移动一个 WORD。即,到光标之前的空白之后的字符。