【发布时间】:2009-05-27 19:46:18
【问题描述】:
我会试着举例说明..
如果我们在vim中有这样一段代码:
if ($feck == true && $drink == false)
{
echo 'They lie in wait like wolves..';
}
例如,我进入可视模式并选择“$drink”,有没有办法:
- 检测当前选择是否是vim的一个 文本对象(单词、WORD、内部 { 等)
- 在所选内容的两侧进行查找以检查下一个可用的 vim 文本对象(再次,单词、WORD、块、内部“等。)
请注意,我正在考虑 vim 脚本,而不仅仅是简单的编辑,所以这两个“动作”都将在一个函数中,来源于我的 .vimrc
此外,我需要在不破坏视觉选择或移动光标的情况下执行此操作(或者,如果确实无法避免,请恢复选择和光标位置)。
【问题讨论】:
-
您确定视觉选择是正确的起点吗?
-
这实际上与我关于 SO 的第一个问题有关,所以几乎是的 :) 我到处寻找(即谷歌搜索),但没有发现与这种类型的脚本类似的东西。 :-/
-
你好,我的同胞。我试图弄清楚你想要完成什么。你确定你在这里采取了正确的方法。尽管您尝试的在理论上是可能的,但 vim 有其他(我可能会添加非常好)选择选择的方法。即便如此,我也看不出这样做有什么用处。
-
Vim 的 WORD 是可变的。您可以更改单词的组成(参见 :h iskeyword)。就脚本而言,vimscript 的制作方式可以使您所做的任何事情都可以编写脚本(因为它是同一件事)。 Vimscript 更像是一个 vim 宏。现在,最后一部分 - 就保持光标到位而言,你不能真的不打破位置。但是,您可以标记它,然后使用单引号(不同于引号)、ma,然后使用 'a 或 `a 来返回它。
-
嘿伊迪加斯 (cro?:))。我的想法是检查当前视觉选择的范围,然后检查周围区域以获取下一个可用的选择“范围”。在上面的示例中,如果我选择了 $drink,我的下一个可能的候选者将是“i)”或“a)”,然后是整个 if 块。这个想法当然与我之前的问题相同:使用单个快捷方式来扩展当前选择,无论该选择可能是 ATM。