Vim目视选择周围变量

Vim目视选择周围变量,vim,Vim,我想知道是否有一种方法可以智能地选择变量,就像使用va}等命令选择块一样。例如,有一些特定于语言的解析正在进行,以区分php和ruby。作为将来的参考,最好利用它——最好是围绕各种语法元素进行选择 比如说。我想在下面的php行中选择大约$array['testing']: $array['testing'] = 'whatever' 或者,假设我想在这里选择块参数列表|项,索引|: hash.each_with_index { |item, index| print item } 编辑:

我想知道是否有一种方法可以智能地选择变量,就像使用
va}
等命令选择块一样。例如,有一些特定于语言的解析正在进行,以区分php和ruby。作为将来的参考,最好利用它——最好是围绕各种语法元素进行选择

比如说。我想在下面的php行中选择大约
$array['testing']

$array['testing'] = 'whatever'
或者,假设我想在这里选择块参数列表
|项,索引|

hash.each_with_index { |item, index| print item }

编辑:


特定的regexp可能会单独解决各种问题,但我有一种感觉,应该有一种方法来利用语法分析来获得更健壮的东西。

尽管您给出的示例可以通过内置的Vim文本对象快速选择(第一个是
viW
,第二个我将使用
F | v,
),我承认Vim的语法高亮显示可能是运动和文本对象的良好来源


我在中看到了这个想法的第一个实现,最近我实现了一个类似的插件:。第一个插件定义了普通模式和视觉模式的运动,但没有运算符挂起和文本对象。它不跳过包含的子语法项,并使用与区分属性相同的颜色,而我的插件使用语法(可能更精确,但也更难掌握),并且还有文本对象(
ay
iy
)。

您可以在Vim中定义自己的任意文本对象

自定义文本对象的最简单方法是为可视模式部分定义
:vmap
(或
:xmap
),为操作员挂起模式部分定义
:omap

xnoremap aC F:o,
onoremap aC :normal! F:v,<CR>
有关
:omap
的另一个简短示例,请参见


如果你不介意依赖一个插件,但是,有。这是一个由Kana Natsuno编写的用于自定义文本对象的通用框架。已经有一些为该框架编写的优秀文本对象,我认为这是必不可少的

使用它,您可以轻松地为变量实现文件类型相关的文本对象,并使其适用于所有人

Some text :in-colon-text: more of the same.