引用符でサラウンドを最適化する

Dec 22 2020

単語を引用符で囲みたい

これが私のコマンドセットです:

  • ciw
  • 次に、挿入モードのときに入力します'
    Visual Codeでvim拡張機能を使用しているため、2つ取得します。'「通常の」vimの場合かどうかはわかりません)
  • その後、Ctrl+ C+t
  • その後 p

それは機能しますが、これを達成するために短いバージョンがあるかもしれません。手伝ってくれる ?

回答

2 Macunaíma Dec 22 2020 at 20:54

vim-surroundプラグインを試してみることができます。単語を引用符で囲むには、次のようにしますysiw'。プラグインはあなたに以下の力を与えます:

  • 追加(ysiw"

    word -> "word"
    
  • 変更(csiw"'

    'word'
    
  • 削除(ds'

    word
    

単一の単語だけでなく、あらゆる種類のテキストオブジェクトの周囲:

  • 括弧内の単語を囲む(ysi)"

    def func(some sequence of words) -> def func("some sequence of words")
    
  • 括弧を角括弧に変更します(cs)]

    list = (var1, var2, var3) -> list = [var1, var2, var3] 
    
2 BLayer Dec 22 2020 at 20:43

私が思うにVSCode拡張機能を使用している場合、それは少なくともいくつかのプラグインをサポートし、そのうちの1つはvim-surroundであると理解しています。その場合、プラグインを使用することにオープンである場合は、最後の段落にジャンプしてください。それ以外の場合は、読み進めてください。

単語の最初の文字にカーソルを置いた通常モードから...

i"<C-O>f<Space>"<Esc>

Ctrl-O、挿入から、挿入に戻る前に1つの通常モードコマンドを入力しましょう。

f<Space> 行の次のスペース文字(単語の後)に移動します。

これに関する問題は、単語の後にスペースがない場合です(たとえば、行の終わりにいる場合や、句読点が続く場合)。通常モードコマンドを調整する必要があります(例:f.または$<Left>)。

これはこれを実現する方法の例にすぎませんが、手動コマンドを最適化するのではなく、より堅牢な(ただし複雑な)ものを使用してマッピングに配置する必要があると思います。たとえば、次の置換コマンド:

:%s/\<\w*\%#\w*\>/"&"

つまり、カーソル位置(\%#)とそれを囲む単語文字(両方\w*)を取得し、引用符で囲まれたそれ自体に置き換えます。

このためのノーマルモードマッピング:

:nnoremap <leader>q :%s/\<\w*\%#\w*\>/"&"<CR>

これで、キーを1、2回押すだけで最適化されました...選択したマッピングの長さに関係なく。

しかし、私が本当に提案したいのは、vim-surroundプラグインを入手するだけだということです。そうすれば、通常単語をラップするもの(例:parens)で単語(およびそれ以上)を簡単にラップできます。