Ctrl-Cでブロック挿入モードを終了する


8

vimでは、ブロック挿入モード(Ctrl-V, Shift-I)でCtrl-C(の代わりにEsc)を使用して終了すると、ブロック編集がキャンセルされます(最初の行のみが編集されます)。

どうしてこれなの?他のほとんどすべてのコンテキストでCtrl-CEsc同義語です。(そして、理想的にはこれを修正する方法があります-私は今や慣れているCtrl-Cので、再学習しなければならなかったのは残念でしょう...)

回答:


9

Ctrl-cおよびEsc同義であることが保証されておらず、多くの場合異なります。たとえば、挿入モードでEscは、は略語をトリガーして通常モードに移動しますが、Ctrl-c略語もInsertLeaveオートコマンドもトリガーせず、通常モードに直接移動します。別の例は、古いviコマンドラインモードで、Esc実際にを押した場合と同じようにコマンドを実行しますEnter。その行動が直感的かつ驚くべきものとみなされたため、Vimは故意にこれを変更しましたが、あなたはまだ追加して、それを有効にすることができますx'cpoptions'

ブロックごとの視覚演算子については、blockwise-operatorsヘルプタグに次のドキュメントがあります。

Visual-block Insert                     *v_b_I*
With a blockwise selection, I{string}<ESC> will insert {string} at the start
of block on every line of the block, provided that the line extends into the
block.  Thus lines that are short will remain unmodified.  TABs are split to
retain visual columns.

Escは言及されており、は言及されていないことに注意してくださいCtrl-c

したがって、いいえ、Ctrl-cおよびEsc同等ではありません。自分が誤解を乱用することは決して恥ではありません。それがわかったら、次に何をするかを決めることができます。すぐにわかるオプションは、違いを学習して正しいキーを使用するか、キーの1つの機能を必要としないと判断して、もう1つに一致するように再マッピングすることです。


4
ゴッチャ。今の私はよvnoremap <C-c> <Esc>私はあなたが心の中で言っておこう。
ソフィーアルパート2012

@BenAlpert:Escとしてctrl-cに完全に切り替えるには、実際には同じ値のnnoremapとinoremapが必要です。私は何年もの間このようにそれを使ってきました、そしてそれは私にとって完全にうまくいきます。vileやnviなどの他のviバリアントがこの回避策を許可しないのは残念なことです。そのため、abbr機能がそこにありません。
アレックス

0

:map ^C esc「^ C」が CTRL+ vCTRL押してから+を入力する場所を試してくださいc


これが必要な理由を説明できますか?他にどのような副作用がありますか?
ソフィーアルパート

機能が少し異なります。CTRL + Cは通常、「このアクションをキャンセルする」ことを意味します(UNIXのようなコンテキストで)。vimコンテキストでアクションをキャンセルすることは、「何が起こっているのかを止めて、通常モードに戻る」ことを意味します。vimでのエスケープは、「通常モードに戻りました」という意味です。
donothings

副作用については気づかなかった。CTRL-Cを押した後で:!catも、マップの後に望ましい効果があるようです。問題が発生した場合は、たとえばstty intr \^k、シェルプロンプトで端末の割り込み文字をCTRL-kに変更してみてください。
donothingsは
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.