Vim:cwとdwのスペースが一致しません

Vim:cwとdwのスペースが一致しません

vimcw(単語の変更)と(単語の削除)を使用するdwと、スペースが異なるように扱われるようです。

たとえば、下のサンプルテキストでカーソルを文字の上に置き、を入力すると、a残りdwの単語が削除されます。そしてあとにスペースを置くのに対し、私がcw使うといいえスペースを削除し、期待どおりに挿入モードに切り替えます。

例:

example text

wこの動作は、動詞の(削除)または(変更)にかかわらず(単語)の動作が同じだと思ったので混乱します。dc

答え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。演算子サスペンドマッピングの追加の説明は、リンクされた回答にありますが、デフォルトでは&タスクにリンクされ、/前に来た場合にのみキャンセルおよび実行されます。私はドキュメントで提案したよりも結果がより直感的だと思います。c2wc3wwWccd[count]wid[count]Wimap

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()問題が解決しました。

関連情報