我想定义一个文本对象,例如iw
,aB
以及: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
,则应将其删除。
答案 0 :(得分:1)
上面提到的Vim Tips Wiki页面列出了两个插件(在“相关脚本”下),它们可以非常容易地定义新的文本对象:
以下调用为ad
中的文本定义$...$
文本对象:
call CountJump#TextObject#MakeWithCountSearch('', 'd', 'a', 'v', '\$', '\$')