7

既存のvimテキストオブジェクトのいずれかを操作できるvimの新しい動詞(たとえば「o」)を定義したいと思います。私がこれを行う方法についての指針はありますか?

ありがとうAB

4

1 に答える 1

7

これらの動詞は演算子と呼ばれます ( を参照:h operator)。'operatorfunc'独自のオペレーターを作成する場合は、設定を使用してから実行する必要がありますg@。これを行う方法については、vim のドキュメントで最もよく説明されています。( ) を参照してください:h :map-operator。vim のドキュメントの例を次に示します。

nmap <silent> <F4> :set opfunc=CountSpaces<CR>g@
vmap <silent> <F4> :<C-U>call CountSpaces(visualmode(), 1)<CR>

function! CountSpaces(type, ...)
  let sel_save = &selection
  let &selection = "inclusive"
  let reg_save = @@

  if a:0  " Invoked from Visual mode, use '< and '> marks.
    silent exe "normal! `<" . a:type . "`>y"
  elseif a:type == 'line'
    silent exe "normal! '[V']y"
  elseif a:type == 'block'
    silent exe "normal! `[\<C-V>`]y"
  else
    silent exe "normal! `[v`]y"
  endif

  echomsg strlen(substitute(@@, '[^ ]', '', 'g'))

  let &selection = sel_save
  let @@ = reg_save
endfunction

別の例が必要な場合は、Tim Pope の解説プラグインをご覧ください。

さらにヘルプが必要な場合

:h operator
:h :map-operator
:h 'opfunc'
:h g@
于 2012-08-13T15:39:42.867 に答える