删除/拉取当前行直到包含搜索模式的行

删除/拉取当前行直到包含搜索模式的行

假设我有以下文本(光标位于第一个单词“begin”的中间。

blah blah blah blah stuff stuff stuff
\\\begin{tabular}
{
|p{0.25\textwidth}
|p{0.2\textwidth}
|p{0.5\textwidth}
|}
\hline
Item & Type & Notes\\\hline
Text text text text text text text text &
Text text text text text &
Text text text text text text text text text text text text text text text text text
  text text text text text text\\\hline

Installation instructions &
.txt / .html / TBD &
Installation help should be conspicuous but not the central item\\\hline
\end{tabular}
blah blah blah more stuff more stuff

我想把表格剪下来并移到其他地方。线条实际上要长得多,所以它们会绕几圈,我无法轻易确定要剪掉多少条线条。

我输入 d 2 / a r } / e 删除直到“ar}”的第二个匹配项在模式的末尾停止。

但是这会从单词“begin”的中间抓取到我想要剪切的末尾。我想抓取完整的行,我觉得应该有一个快捷方式,只需 6 次按键即可完成。我没有使用 Latex-VIM,因为它与我的标准 Windows GVIM 安装不同,所以不,据我所知,我不能轻松地从 抓取到\begin\end我很想证明我错了。


是的,这个问题可能涉及 StackExchange 站点,包括 Tex、StackOverflow 和 Unix。欢迎推荐一个更好的站点来提问。

答案1

使用 Ex 命令:

:,/\\e/d

分解:

  • Ex 命令的结构::{range}command{address}
  • 可以使用行号、标记或搜索模式来划定范围,这里我们从当前行开始,通常是 a.但可以像这里一样跳过,最后以模式匹配结束\end
  • 我们d选出该范围内的线条。

结合搜索和上下文标记:

/\\e<CR>
d''

分解:

  • 搜索\e
  • d从这里删除到上一个光标位置的行。

使用视觉模式:

v/\\e<CR>
V
d

分解:

  • 从这里目视选择到\e
  • 切换到视线阻断。
  • d选择选择中的线条。

使用 Ex 命令代替正常模式命令来改变上述方法:

v/\\e<CR>
:'<,'>d

分解:

  • 从这里目视选择到\e
  • 使用 进入命令行模式:'<,'>范围会自动插入。
  • d选择选择中的线条。

答案2

这是 matchit 插件的功能之一,是标准 vim 发行版的一部分。出于测试目的,请以交互方式执行此操作;如果您喜欢,则可以从 vimrc 文件中执行此操作:

:runtime macros/matchit.vim
:filetype plugin on

在这两个命令之后(以交互方式或在启动期间作为 vimrc 文件的一部分)

:e foo.tex

然后,将光标放在 上的任意位置\begin{tabular},使用V%选择整个环境。我不确定您是否会认为这是一个错误或功能,但这将包括整行,这意味着您将在开头获得“\\”。

这也应该正确处理嵌套环境和注释掉的行。

巧合的是,matchit.vim 的维护者与 tex 标准 ftplugin 的维护者是同一个。

:help matchit-install
:help :filetype-plugin-on

相关内容