如何在Vim中创建具有开始和结束模式的文本对象/动作

时间:2014-10-21 21:02:30

标签: vim

我想定义一个文本对象,例如iwaB以及:help text-objects中列出的其他文本对象,用于定义以某种模式开头并以另一种模式结尾的区域。更确切地说,我想定义一个文本对象,该文本对象以某些{pattern1}开头,以某些{pattern2}结尾。包括模式。重要的是它可以延伸多行(例如aB但不像a")。

我想到的例子是在LaTeX中选择内联方程式,即一个$和下一个$之间的所有内容(包括$),并且用于选择\begin{*}和以下\end{*}之间的LaTeX环境,其中*这里只是任何字符串(但在Vim正则表达式中不像\{-}那样贪婪)

我试图在Vim Tips维基上查看this guide,但我不知道如何用向后搜索某些模式的内容替换[z]z分别为一些模式转发,以便它按照我的意愿运行。

所以给出内联方程的例子(假设文本obejct被称为ad),那么,如果光标位于以下行中$之间的某处:< / p>

it follows that $ \sum_{n=0}^\infty 2^{-n} $ is two

在正常模式下,vad被按下,$ \sum_{n=0}^\infty 2^{-n} $应处于视觉状态,或者如果按下dad,则应将其删除。

1 个答案:

答案 0 :(得分:1)

上面提到的Vim Tips Wiki页面列出了两个插件(在“相关脚本”下),它们可以非常容易地定义新的文本对象:

以下调用为ad中的文本定义$...$文本对象:

call CountJump#TextObject#MakeWithCountSearch('', 'd', 'a', 'v', '\$', '\$')