vim:現在のブロックの単語を角かっこで一致させます。

vim:現在のブロックの単語を角かっこで一致させます。

vimで一致すると、単語、WORD、ブロックなどがあります。コードを編集するときにブロックが役に立ち、単語もやや便利ですが、単語には一般的に左または右の角かっこ(または)が()含まれているため、ほとんど役に立ちません。{}[]

だから似合う言葉が欲しい

  • 現在ブロック内の文字のみ、そうでない場合
  • 完全な単語(必要な場合は1つ以上)と
  • 完全なブロック(したがってバランスのとれないブラケットはありません)

たとえば、次のコード行を考えてみましょう。

if (array42[idx + offset] == value) {

上にカーソルを合わせると4一致するはずですarray42[idx + offset]。 WORDはもちろんと一致します(array42[idxが、それは役に立ちません。

ベストアンサー1

viW通常モードでは、キーの組み合わせで視覚的に一致を選択する機能を作成しました。

私が逃したケースを自由に指摘してください。また、私はvimscriptについてよく知らないので、他の改善の余地があるかもしれません。

"visually select current programming WORD
function! SelectSensibleWORD()
    "go to beginning of block
    normal! ?^\|[[:space:]({[]
    let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
    if -1 != match(l:char, '[[:space:]({\[]')
        normal! l
    endif
    "enter visual mode
    normal! v
    "find brackets or end of the WORD
    normal! /$\|[[:space:]({[\]})]
    while 1
        let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
        if -1 != match(l:char, '[({[]')
            "keep brackets balanced
            normal! %
        else
            "don't select more than necessary
            normal! h
            return
        endif
        normal! n
    endwhile
endfunction

nnoremap viW :call SelectSensibleWORD()<CR>

その後、このコマンドに基づいて別のコマンドを作成できます。

nmap ciW viWc
nmap diW viWd
nmap yiW mwviWy`w

残念ながら、vimscriptは構文強調をサポートしていません。

おすすめ記事