1

我想如何使用下面描述的乳胶包中的 imaps.vim 插件中包含的 snip() 函数:

Snip:在文本块 {{{ 描述:

这会在视觉选择的行块的上方和下方放置一个字符串“--------%<---------”。'tearoff' 字符串的长度取决于所选范围内的最大字符串长度。这是一个更美观的替代方案,而不是硬编码长度。

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
4

1 回答 1

0

Snip()请参阅中定义之后的行imaps.vim

com! -nargs=0 -range Snip :<line1>,<line2>call <SID>Snip()

这定义了 command Snip,可以在任何范围内调用。'<,'>在可视模式下,vim 会在您输入命令时自动插入范围,因此输入:and thenSnip会导致:'<,'>Snip,将在当前选择上调用该函数。

请注意,您也可以手动指定范围。例如,:1,5 Snip将剪断第 1 到 5 行,:'m,'n Snip从标记剪断m到标记n,以及:Snip仅适用于当前行。

为了避免:Snip每次都键入,您可以将此命令映射到您选择的键。例如,您可以z在可视模式下映射以调用Snip当前选择,如下所示:

vnoremap z :Snip<CR>
于 2013-01-14T17:12:54.887 回答