我是Vim脚本的新手。我需要编写一个脚本,用一些文本包围其他文本。例如:
\surroundingtext{surrounded text}
(是的,它适用于LaTeX)。我想突出显示“包围文本”并发出命令,或者将“包围文本”作为正则表达式命令的结果。
我想问题是,如何把它放在一个函数中?
谢谢, 杰里米
答案 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.vim
为filetype
时才会映射这些文件。如果父目录尚不存在,则创建它们。
这假定文件类型已正确设置为tex
并且您启用了文件类型插件:
tex
答案 1 :(得分:1)
我建议使用视觉选择,因为你需要包围任意文本块而不是单个单词。按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脚本函数来以更强大的方式处理它。