1

以下に説明するlatexパッケージのimaps.vimプラグインに含まれている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()

Snipこれは、任意の範囲で呼び出すことができるコマンドを定義します。'<,'>ビジュアルモードでは、コマンドを入力するとvimが範囲を自動的に挿入するため、を入力してから、を入力する:と、現在の選択範囲で関数が呼び出されます。Snip:'<,'>Snip

範囲を手動で指定することもできることに注意してください。たとえば、:1,5 Snip1行目から5行目:'m,'n Snipを切り取り、マークからマークmnと切り取り:Snip、現在の行にのみ適用されます。

:Snip毎回入力する必要がないように、このコマンドを選択したキーにマップできます。たとえば、次のようにz、ビジュアルモードでマップしSnipて、現在の選択範囲を呼び出すことができます。

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