vim
cw
(単語の変更)と(単語の削除)を使用するdw
と、スペースが異なるように扱われるようです。
たとえば、下のサンプルテキストでカーソルを文字の上に置き、を入力すると、a
残りdw
の単語が削除されます。そしてあとにスペースを置くのに対し、私がcw
使うといいえスペースを削除し、期待どおりに挿入モードに切り替えます。
例:
example text
w
この動作は、動詞の(削除)または(変更)にかかわらず(単語)の動作が同じだと思ったので混乱します。d
c
答え1
ところで、それが記録だ。もしあなたがcw
そのように行動したいなら、dw
いつもこう言うことができます。
:map cw dwi
:map cW dWi
:help cw
詳細より。また見てw
ください:help cpoptions
。
ヘルプセクションでcw
:
特別な場合:「cw」と「cW」は、カーソルが単語内にあるときに単語の後のスペースを含めずに単語の末尾にのみ変更されます。これは、Vimが「cw」を変更語として解釈し、その単語に次の空白が含まれていないためです。
「cw」の単語の後にスペースを含めるには、次のマッピングを使用します。
:map cw dwi
または、「caw」を使用してください(「aw」を参照)。
答え2
部分的な感謝この回答、私はオペレータサスペンドマッピングを使用してこれらの矛盾を解決する方法を見つけました。カウントを維持する。このようなコマンドは、明示的なマッピングなしでc3w
期待どおりに実行されますcw
。演算子サスペンドマッピングの追加の説明は、リンクされた回答にありますが、デフォルトでは&タスクにリンクされ、/前に来た場合にのみキャンセルおよび実行されます。私はドキュメントで提案したよりも結果がより直感的だと思います。c2w
c3w
w
W
c
c
d[count]wi
d[count]Wi
map
onoremap <expr> w <SID>ExpectedChangeWord('w', v:operator, v:count)
onoremap <expr> W <SID>ExpectedChangeWord('W', v:operator, v:count)
function! s:ExpectedChangeWord(w, op, c)
return a:op != 'c' ? a:w : "\<Esc>d" .. (a:c > 1 ? a:c : '') .. a:w .. 'i'
endfunction
私が気づいたことの1つは、単一引用符(リンクされた回答のように)を使用すると、以前のバージョンのVimでは部分的に機能しましたが、最新バージョンではまったく機能しませんでした。予想される"\<Esc>"
形式を使用するとfeedkeys()
問題が解決しました。