【问题标题】:Vim visual mode scripting: searching the text surrounding the visual selectionVim 视觉模式脚本:搜索视觉选择周围的文本
【发布时间】: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。

标签: editor vim


【解决方案1】:

这个问题只有在 Hannibal Lecter 博士的 this other question 的上下文中才有意义。

我认为您想要实现的目标是可能的,但需要一些工作。另一个答案中提供的信息和您帖子的 cmets 已经指向正确的方向。

从“扩展选择”键映射调用的 vim 函数必须执行以下操作:

  1. 检查当前选择可能代表什么(标记 ' 如 dwc 所描述,vim 函数应该对此有所帮助)。必须回答这样的问题:' 在同一行吗? ' 之间的所有字母都是关键字字符吗?选择的第一个和最后一个字符是否是特殊分隔符,例如 '{'、'(' 等?等等 - 没有内置功能可以自动检查这一点。另请参阅 :help visualmode(

  2. 一旦确定了这一点,您就必须考虑,您希望如何进一步扩展您的选择 - 但是此逻辑在 ReSharper 中有效。

  3. 您需要注意将光标放回原来的位置,具体取决于您用于扩展选择的命令。

一般来说,:help eval.txt 中提供的命令将有助于实现这一点。

【讨论】:

  • 非常好,正是我需要开始的技巧。谢谢。
  • 嘿,刚刚偶然发现了这个问题。你有没有得到这个工作的脚本?
【解决方案2】:

进行视觉选择后,'<'> 可用于任何接受“范围”的内容。

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多