我想知道是否有一种方法可以明智地选择变量,就像使用va}
这样的命令来选择块一样。例如,有一些特定于语言的解析来区分php和ruby。为了将来的参考,最好能利用这一点--理想的选择是围绕各种语法元素。
例如。我想在下面的php行中围绕$array['testing']
进行选择:
$array['testing'] = 'whatever'
或者,假设我想在这里选择块参数列表|item, index|
:
hash.each_with_index { |item, index| print item }
编辑:
特定的regexp可能单独处理各种问题,但我觉得应该有一种方法来利用语法分析来获得更健壮的东西。
发布于 2012-12-03 01:45:44
虽然给出的示例可以快速选择内置的Vim文本对象(第一个是viW
,第二个是F|v,
),但我承认Vim的语法突出显示可能是运动和文本对象的一个很好的来源。
我在SyntaxMotion插件中看到了这个想法的第一个实现,最近我实现了一个类似的插件:SameSyntaxMotion。第一个定义了正常和可视模式的运动,但没有操作符挂起和文本对象.它不跳过包含的子语法项,使用与区别属性相同的颜色,而我的使用语法(可以更精确,但也更难理解),也有文本对象(ay
和iy
)。
发布于 2012-12-03 02:53:38
您可以在中定义自己的任意文本对象。
实现自定义文本对象的最简单方法是为视觉模式部分定义一个:vmap
(或:xmap
),为操作符挂起模式部分定义一个:omap
。例如,以下映射
xnoremap aC F:o,
onoremap aC :normal! F:v,<CR>
让您选择一个以冒号括起来的文本.尝试在下面的单词“冒号”上执行vaP
或daP
操作:
Some text :in-colon-text: more of the same.
有关另一个简短的:omap
示例,请参见:omap
。
但是,如果您不介意依赖于插件,那么就会有http://www.vim.org/scripts/script.php?script_id=2100。这是Kana Natsuno编写的定制文本对象的通用框架。已经有一些优秀的文本对象为http://www.vim.org/scripts/script.php?script_id=2484这样的框架编写,我认为这是必不可少的。
使用它,您可以轻松地为变量实现与文件类型相关的文本对象。把它提供给每个人!
https://stackoverflow.com/questions/13674534
复制相似问题