我想如何使用下面描述的latex包中的imaps.vim插件中包含的snip()函数:
Snip:在文本块{{{的上方和下方放置一个剪刀字符串 说明:
这会在视觉上方和下方放置一个字符串“--------%< ---------” 选定的一行。 “撕裂”字符串的长度取决于 所选范围内的最大字符串长度。这在美学上更多 令人愉快的替代品,而不是硬编码长度。
function! <SID>Snip() range
let i = a:firstline
let maxlen = -2
" find out the maximum virtual length of each line.
while i <= a:lastline
exe i
let length = virtcol('$')
let maxlen = (length > maxlen ? length : maxlen)
let i = i + 1
endwhile
let maxlen = (maxlen > &tw && &tw != 0 ? &tw : maxlen)
let half = maxlen/2
exe a:lastline
" put a string below
exe "norm! o\<esc>".(half - 1)."a-\<esc>A%<\<esc>".(half - 1)."a-"
" and above. its necessary to put the string below the block of lines
" first because that way the first line number doesnt change...
exe a:firstline
exe "norm! O\<esc>".(half - 1)."a-\<esc>A%<\<esc>".(half - 1)."a-"
endfuntion
答案 0 :(得分:0)
请参阅Snip()
中imaps.vim
定义后面的行:
com! -nargs=0 -range Snip :<line1>,<line2>call <SID>Snip()
这定义了命令Snip
,可以在任何范围内调用。在可视模式下,当您输入命令时,vim会自动插入范围'<,'>
,因此键入:
然后Snip
,结果为:'<,'>Snip
,将调用该函数目前的选择。
请注意,您也可以手动指定范围。例如,:1,5 Snip
将剪切第1行到第5行,:'m,'n Snip
将从标记m
剪切为标记n
,而:Snip
将仅应用于当前行
为了避免每次都输入:Snip
,您可以将此命令映射到您选择的键。例如,您可以在可视模式下映射z
以在当前选择上调用Snip
,如下所示:
vnoremap z :Snip<CR>