需要脚本/功能/命令用其他文本环绕文本

时间:2011-06-22 02:16:29

标签: vim

我是Vim脚本的新手。我需要编写一个脚本,用一些文本包围其他文本。例如:

\surroundingtext{surrounded text}

(是的,它适用于LaTeX)。我想突出显示“包围文本”并发出命令,或者将“包围文本”作为正则表达式命令的结果。

我想问题是,如何把它放在一个函数中?

谢谢, 杰里米

2 个答案:

答案 0 :(得分:3)

这就是我的所作所为:

vnoremap <buffer> <leader>sur "zc\surroundingtext{<C-R>z}<Esc>

这会创建一个可视模式映射,您可以在其中按字母顺序选择(v)要包围的文本,键入\sur(假设默认mapleader为{{ 1}})文本将被您指定的文本包围。

  • \指定注册'z'
  • "z告诉vim更改视觉选择的文本,将原始文本放在注册'z'中
  • c是左侧
  • \surroundingtest告诉Vim粘贴注册'z'
  • <C-R>z是右侧
  • }让您回到正常模式

我还要更进一步,并创建正常模式和插入模式映射:

<Esc>

您可以将这些映射放在nnoremap <buffer> <leader>sur i\surroundingtext{}<Esc>i inoremap <buffer> <leader>sur \surroundingtext{}<Esc>i 文件中,但会为每个~/.vimrc映射这些映射。

对他们来说更好的地方就是您的filetype文件,因此只有在~/.vim/after/ftplugin/tex.vimfiletype时才会映射这些文件。如果父目录尚不存在,则创建它们。

这假定文件类型已正确设置为tex并且您启用了文件类型插件:

tex

答案 1 :(得分:1)

几周前我问了一个非常相似的问题。 How to repeatedly add text on both sides of a word in vim?答案中有很好的起点。

我建议使用视觉选择,因为你需要包围任意文本块而不是单个单词。按v进入视觉选择模式,然后选择要包围的文本。接下来使用以下击键记录具有所需修改的宏:

qa        " record a macro in buffer a
x         " cut the selected text
i         " enter insert mode
prefix    " type the desired prefix
<esc>     " exit insert mode
p         " paste the cut text
a         " enter insert mode after the pasted text
postfix   " type the desired postfix
<esc>     " exit insert mode
q         " stop recording

要重复使用宏,只需在视觉上选择要修改的下一个块,然后按@a

如果周围文本频繁变化,或者您希望在编辑会话中保持这种情况,这可能过于繁琐。在这种情况下,您可能希望编写一个vim脚本函数来以更强大的方式处理它。