Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中创建具有起始和结束模式的文本对象/运动_Vim - Fatal编程技术网

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

如何在Vim中创建具有起始和结束模式的文本对象/运动,vim,Vim,我想定义一个文本对象,如iw,aB,以及:help text objects中列出的其他对象,它们定义了一个以某种模式开始,以另一种模式结束的区域。更准确地说,我想定义一个文本对象,它以一些{pattern1}开始,以一些{pattern2}结束。这些模式包括。重要的是,它可以延伸到多行(如aB,但不同于a“) 我想到的例子是选择LaTeX中的内联方程,即一个$和下一个$(包括$)之间的一切,以及选择LaTeX环境,如\begin{*}和以下\end{*},这里的*只是任何字符串(但与Vim r

我想定义一个文本对象,如
iw
aB
,以及
:help text objects
中列出的其他对象,它们定义了一个以某种模式开始,以另一种模式结束的区域。更准确地说,我想定义一个文本对象,它以一些
{pattern1}
开始,以一些
{pattern2}
结束。这些模式包括。重要的是,它可以延伸到多行(如
aB
,但不同于
a“

我想到的例子是选择LaTeX中的内联方程,即一个
$
和下一个
$
(包括
$
)之间的一切,以及选择LaTeX环境,如
\begin{*}
和以下
\end{*}
,这里的
*
只是任何字符串(但与Vim regex中的
\{-}
类似,是非贪婪的)

我曾尝试查看Vim Tips Wiki,但我不知道如何将
[z
]z
替换为分别向后搜索某些模式和向前搜索某些模式的内容,以使其按我希望的方式工作

因此,为了给出内联公式的示例(假设文本obejct被称为
ad
),那么,如果光标位于下一行的
$
之间的某个位置:

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

在正常模式下,按下
vad
,然后
$\sum{n=0}^\infty 2^{-n}$
应该是可视的,或者如果按下
dad
,它应该被删除。

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

  • 是非常灵活和通用的
  • (由我编写)是专门为由开始和结束模式定义的文本对象编写的
以下调用为
$…$
中的文本定义了一个
ad
文本对象:

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

你的意思是什么?用@PeterRincker的列表创建你自己的文本对象。是的,它做了一些我想要的事情,尽管它并不像我希望的那样与
\begin{*}…\end{*}
匹配。在你提到的插件中,它们不必匹配,所以它会匹配所有
\begin{equation}A=\begin matrix}1&2\\3&4\end{矩阵}
如果您使用环境文本对象并将光标放在
A
上,那就不好了。我有一种感觉,这项工作需要大量的工作,并且超出了SO帖子的范围。这可能值得在上创建一个新问题。感谢您的回答。是的,我可以看到CountJump插件如何在o为
$…$
添加文本对象,但它也可以执行类似
\begin{-}…\end{-}
的操作。问题是它不应该与
\begin{center}\end{equation}匹配
,比如说。我试过查看textobj用户,但我发现很难理解它是如何工作的。CountJump还不支持反向引用,但我认为这是一个增强请求。