エスケープ以外の挿入モードを終了する他の方法


74

私がemacsよりもvimを好む主な理由は、ホームロウからの私の手の動きの距離が非常に低いことです(プログラマーとしても)。ただし、これを行う主な時間の1つは、Escapeキーを押して挿入モードを終了することです。

最近、Ctrl + Cを使用して挿入モードを終了できることも学びました。ただし、これは実際には改善されていません。

ホーム行から手を離さずに、また入力する機能に大きな影響を与えずに、挿入モードを終了するにはどうすればよいですか?注:私は、ドヴォルザークキーボードレイアウトでほとんどバニラのvimを使用していますが、qwertyレイアウトのソリューションも聞きたいです。


1
任意のキーの組み合わせをどこにでもマップできますが、他には何もできません。それはあなたの言うことですか?
よ」

3
Ctrl + cショートカットTHXを学習しました!
フィリップガショー

Caps LockをEscとしてマッピングするのはどうですか?
コロブキャニオン

@PhillippeGachaud:Escの代わりにCtrl-Cを使用しないでください。Ctrl-CはEscapeと同じではなく、強制Escapeであり、状況によっては動作が異なる場合があります
ライライアン

回答:


60

一般的なバインディングはjjです。これは、ホーム行の配置を使用する場合、QWERTYレイアウトでうまく機能するためです。

inoremap jj <ESC>

その場合、リテラルjjを入力するには、2番目の文字を入力する間(デフォルトで)1秒待機する必要があります。(詳細:help 'timeout'は参照)

またc-o、挿入から抜け出し、1つの通常のコマンドを実行してから、挿入に戻ります。

http://vim.wikia.com/wiki/Avoid_the_escape_key


1
ドヴォルザークでjは、cキーです。したがって、これは(を入力するためにcc)それほど悪くないでしょう。また、バインドhhjqwerty key = dvorak h)することもできますshhhhhhh。これは、入力中などの場合にのみ起動します。
durron597

7
ccは、少なくとも英語では、はるかに一般的な2文字のキーの組み合わせです。だからそれは最善の選択ではないかもしれない
ニックJアダムス

4
模倣するのはjkどうですか?Dvorakで隣接しているが、好みの言語では一般的な組み合わせではない2つのキーを見つけます。tnたとえば、は、と同等の位置ですjk
デビッドロード

1
ドヴォルザークでもノーマルモードを持っているjk/ kj終了するのが好きです。これらはQWERTYキーボードの「c」キーと「v」キーなので、左ポインターと中指で簡単に使用できます。
-alxndr

2
私たちはもっと良くできると思います- ii代わりに使ってください。はい、ホームの列から指を離す必要がありますが、それでも快適です。さらに重要なことは、指を動かさずにモードを切り替えることができることです。
スリダールサルノバト

38

内蔵の選択肢の横<C-[><C-c><Esc>他の人が引用したキー、他の一般的なソリューションは、再マッピングすることで<CapsLock>、追加のエスケープとして。これは、QwertyとDvorakの両方のキーボードにあります。

この方法では、HomeRowから手を離さずに左小指で非常に簡単にEscを押すことができます(偶然、CapsLockは、viが発明されたときにEscapeがキーボードにあった場所です)。

再マッピングを行うことができます:

  • AutoHotKeyユーティリティを使用したWindowsの場合。
  • MacでKeyRemap4MacBookユーティリティなどを使用。
  • Linuxでは、デスクトップ環境によって異なります。たとえば、Linux Mint / Cinnamonでは、メニュー->キーボード->キーボードレイアウト-> Caps Lock動作で適切なオプションを選択するだけです。あるいは、それほど簡単ではありませんが、xmodmapプログラムを使用してXorgレベルで再マップし、次の.Xmodmapファイルを実行させることができます。

    clear Lock
    keycode 0x42 = Escape
    

    システムは、ログインの自動ソースファイルのチェーンに次のシェルスクリプト行(.Xmodmapホームディレクトリにあると想定)を戦略的に配置することにより、ログインごとに自動的に実行するようにセットアップでき~ます。

    if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
    fi
    

    ただし、実際にはソースファイルは使用する(デスクトップ)環境によって異なるため、注意が必要です。例として、Cinnamonの「Startup Applications」のエントリとして呼び出されるxmodmapがあります(これにより、標準のGUIキーの再マッピングのカスタマイズ以上のことができます)。

さらに進んで、CapsLockキーをプログラムして動作させる人もいます。

  • Ctrlキーとして長押しして、
  • Escキーを押してすぐに離すことでキーとして。

これは、対応するリマップユーティリティを適切に設定/プログラミングすることにより、WindowsおよびMacで実行できます(特にAutoHotkeyのヒントについてはこちら、KeyRemap4MacBookについてはこちらをご覧ください)。Linuxでは、プログラムxcapeを使用します。


2
完全に同意します。ホーム行にctrlキーを置くと、使いやすさが大幅に向上します(ctrl + nで補完をスクロールする、ctrl + f / ctrl + bでファイルをスクロールする、ctrl +でエスケープするなど)。これらのキーの組み合わせはすべて簡単に実行できますこの方法。
。ジョンO'M

1
Ctrl(通常の位置で)小指ひねらずにキーを押すことについて:ここで詳しく説明されているように、手のひらで押すことができます ( 'Net、it time to give戻る:)とそれを発明した人への称賛)
ジョヴァンニ・

FWIW KeyRemap4MacBookはKarabinerに改名されました:pqrs.org/osx/karabiner/index.html.en
alxndr

この解決策を試しましたが、Shiftキーを何回か押したときに誤ってCaps Lockを押すと、面倒でした。そのため、左の小指の敏pink性によって走行距離が異なる場合があります。:)
ゴッドスミス

2
()にマップCtrlし直した場合AltCmdまたはその逆) <C-[>本当に輝いています。ピンキーは弱く、親指は強い。QWERTYでは、そのためにホームロウを離れる必要さえありません。ドヴォルザークではあまり良くありませんが、許容範囲です。
ナッシュブリッジズ

28

私が使用するマッピングは次のとおりです。

inoremap jk <esc>
inoremap kj <esc>

このように、あなたは簡単にヒットすることができますjし、kあなたが初回どちらを心配することなく、同時に。


70
しかし、私はレイキャビクでエドガー・ダイクストラがブラックジャックをプレイすることに関する本を書いています!;)
durron597

オランダ語を書きたいなら、両方とも恐ろしいです。
Hielke Walinga

12

<C-[><C-c>は、の2つのネイティブな代替<Esc>です。

参照してください:help i_<esc>:help i_ctrl-cの違いを説明している<C-c>とし<Esc>


繰り返しますが、CtrlはEscapeと同じくらいホーム行から離れているため、これらは改善されていません。
durron597

4
@ durron597 QWERTYキーボードでは、Ctrlはホーム行と同じくらい遠くにありますが、重要な違いがあります:ホーム行の下にあります。指を動かすだけで指を押すことができますが、Escでは手全体を少し回転させる必要があります。また、に<C-[>は対称性があります(両方の小指が反対方向に移動します)。
wchargin

6
はと<C-c> まったく同じ<Esc>はないことに注意してください。
wchargin

2
同意した。を習慣的に使用すると、<C-c>プラグインとautocmdが微妙に破損する可能性があります。
デビッドロード

私のマシンでは<C-[>は動作しますが、登録するのに<Cc>よりも0.5秒長くかかります
アレクサンダーミルズ

4

あなたは、マップすることができますCaps LockControl 任意の外部プログラムを使用せずに

  • Mac OS Xの訪問のシステム環境設定>キーボード- >修飾キー
  • Linuxの実行します。setxkbmap -option caps:ctrl_modifier
  • Windowsのレジストリを編集します。

これによりControl、ホーム行に移動し、Vimで挿入モードを終了するものを含む、Controlで変更されたすべてのストロークを簡単に押すことができます。Ctrl-[Ctrl-C

また、の下部にある彼の答えジョバンニは、マップするために提案しCaps Lock、両方を実行するControl Escape、プレスの長さに依存しますが、これは余分なソフトウェアをインストールする必要があります。

Ctrl-[それはいつものように働くので、好ましい代替手段Escapeです。

一つの顕著な違いとは、Ctrl-C編集を離れるときということである矩形ビジュアルモードではCtrl-Cあなたは現在の行に加えられた変更を保持しますが、変更繰り返すことはしませんそのモードの時点でブロック内の他のラインオーバー。

また、略語のチェックやInsertLeaveイベントのトリガーも行いません。見る:help i_CTRL-C


4

プラグインvim-easyescapeを使用することをお勧めします。

Plug "zhou13/vim-easyescape"
let g:easyescape_chars = { "j": 1, "k": 1 }
let g:easyescape_timeout = 100
cnoremap jk <ESC>
cnoremap kj <ESC>

単純なマップシーケンスの問題は、inoremap jj <ESC>入力時jまたはk挿入モードでVimが一時停止することです(マッピングを適用するかどうかを決定する次のキーを待機しています)。一時停止すると、気が散ることがありますが、気づかないかもしれません。 vim-easyescapeにはこのような問題はなく、カスタムタイムアウトをサポートしています。


3

ターミナルviおよびVimでは、ほとんどのターミナルで alt+ single-normal-mode-keyがすばやく編集できます。

これは、ほとんどの端末がエスケープ文字としてalt修飾子を送信するために機能します。たとえば、あなたが入力したときにalt+k端末エミュレータを実行中のプログラムへの2つの文字を送信しますesck。ViとVimはこれをあなたが期待するように解釈します。(エスケープのため)挿入モードを終了し、通常モードコマンドを実行します(この例では、カーソルを1行上に移動します)。

ターミナルエミュレータを使用している限り、キーボードのスペースキーの隣にAltキーがある場合(親指で押すことができ、ホーム行に指を置いたままにできる場合)、これは挿入モードを終了する便利な方法です。この動作で、通常モードのコマンドを実行してもかまいません。


2
あなたは何について詳しく説明できますsingle-normal-mode-keyか?エスケープですか?
ケノーブ

通常モードで使用する単一のキーを押すと、altキーを使用して挿入モードで使用できます。たとえば、文字を削除するにはAlt + x。
ewatt

2
私もこの答えをよく理解していません。実際には、Alt + xは通常モードのAltとは異なることをしているように見えますか?そして、他のいくつかのキーが動作しないようですか?しかし、多分私はそれを間違って使用しています..?たぶん、あなたの答えを少し広げて、それがどのように機能するかを説明し、いくつかのVimドキュメントへのリンクも良いでしょう:-)ありがとう!:
マーティントゥルノイ

これは実際には端末の構成に依存し、一般的にはあなたが提案するようには設定されていません。
クリスチャンブラバンド16

1
私はこれを支持し、履歴を確認し、何らかの理由でモデレーターが編集して、他の人が期待しているようにコメントを残すのではなく、テキストの99%を薄い空気から追加したことに気付きました。そのため、投票を取り消す必要がありました。確かにここで何が起こったのは、賢明な編集の範囲を超えていますか?編集が拒否されることはほとんどありませんでした。新しいコンテンツは確かに素晴らしいですが、この答えに属していません。それはそれ自身でなければなりませんでした。
underscore_d

3

私が使用するFWIW:

:map! ;l ^[
:vmap ;l ^[

Returnを押すのに似ています。;他の挿入モードマッピングのリーダーとしても使用しています。

「;」と入力する必要があるのは唯一の時間です +文字はゴルフをコードするときです。それ以外の場合、競合はありません。


^ [にマッピングするよりもエスケープするようにマッピングする方が良いでしょうか?:)
アレクサンダーミルズ

2

私はかなり前からCtrl+ を使用してきましたが3、ほとんどの選択肢よりも入力が簡単で、うまく動作するようです(少なくともLinuxでは)。私Caps LockはにマッピングされているためCtrl、入力するのは非常に快適です。

私はしばらくの間Ctrl+ cを使用しようとしましたが、今は正確に思い出せないいくつかの問題がありましたが、+でEsc取得するように、まったく同じ動作をしていませんでした。Ctrl3


2
Ctrl-3は何をしているのでしょうか?
クリスチャンブラバンド16

どのように機能するかはわかりませんが、EscVimのように機能します。組み合わせをテストすることで経験的に見つけましたが、内部構造がどのように機能するかについての詳細は知りません。
エリアス

1
これはviのものではなく、シェルでも動作します。場合に非常に有用で、あなたはバインドキーを使用して、シェル上のviモードを有効にしている-v
golfadas

1

米国英語のキーボードを使用している場合、Ctrl- [を押すことはを押すことと同等ですEsc。これにより、挿入モードを簡単に終了できます。または、Ctrl-を使用しますc

簡単モード(-y)でvimを使用している場合、Ctrl- l(Control-L)を押して挿入モードを終了する必要があります。

ありますCtrl+ oだけの一時的退出挿入モードは、単に一つのコマンドを実行すると、挿入モードに戻ります(参照::help i_CTRL-O

またはCtrl+ r、それだけでレジスタまたは式のコンテンツを挿入するためだ、例えばCtrl+ r=5*5(参照::help i_CTRL-R:help c_CTRL-RおよびStackOverflowのポスト)。

続きを読む:vim wikiaでエスケープキーを使用ない


3
参考:Ctrl+rレジストリ(式=reg を含む)を挿入するためのものです。一時的なコマンドを一時的に実行する場合は、を使用しますCtrl+o
スキマ

1

私は<A-e>脱出に落ち着きました:

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>

編集:<C-\><C\n>他のモードから通常モードに移動するものを見つけました。また、全体的な動作も改善されています。マッピングは次のようになります。

noremap <A-e> <C-\><C-n>
noremap! <A-e> <C-\><C-n>

0
nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^

タブを再マップして終了します。私は歴史的にescキーがあった場所だと思うので、私はそれを使って振り返ることはありませんでした。ドキュメントにタブを挿入する必要はほとんどなく、実行するときはShift + Tabを押すだけです。元のタブバインドを見逃したことはありません。


vimとemacsに関する段落は完全に不要です...
D.ベンノーブル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.