web-dev-qa-db-ja.com

OSXでscreenを実行しているとき、command + rはすべての画面でvimの矢印キーを台無しにします

これをどのようにほどきますか?なぜなら、ブラウザをリロードするために常にコマンドrを押すことになり、多くの場合、ターミナルにいるからです。

矢印キーを再度有効にする方法がわからないため、現在、すべての画面を強制終了して画面を再起動しています。これは面倒です。

15
duggi

Vimの良い支持者として、カーソルキーとしてhjklを使用する方法を学ぶように言わなければならないと思います。問題の調査の途中で、実際の矢印キーの代わりにhjklを使用してテストしていることに気付くまで、問題は不思議なことに修正されたと思いました。

とにかく、今、本当の答えがあります。

すべての画面をシャットダウンして再起動する代わりに、端末間を移動する画面の機能を利用できます。 CTRL+ACTRL+Dを押して画面を端末から切り離し、screen -D -Rを実行して再接続します。これにより、矢印キーが再び機能するようになります。

画面に表示されていないがVimだけに表示されている場合は、CTRL+Zと入力してfgと入力すると同じ効果が得られます。

Vimでカーソルキーの問題を回避することもできますが、リセットによって他のターミナルオプションが変更された可能性があるため、上記のように実行する方が安全です他のランダムな表示/キーボードの問題を参照してください。とにかく再マッピングが必要な場合は、次のとおりです。

map <Esc>[A <Up>
map <Esc>[B <Down>
map <Esc>[C <Right>
map <Esc>[D <Left>

汚れた詳細:

Vimとscreenはどちらもncursesライブラリを使用してターミナルを管理します。 ncursesがVT100互換端末を制御するときに行うことの1つは、矢印キーを「アプリケーションモード」に切り替えることです。これにより、出力されるコードが変更されます。たとえば、上矢印キーはEsc[AからEscOAに変わります。これを行うために発行するVT100制御コードはEsc[?1hです。 Command + Rによって送信されたターミナルリセットコマンドは、カーソルキーをデフォルトにリセットします。

画面を取り外して再接続すると、ncursesが端末の制御を取り戻し、好きな設定がすべて再適用されるため、これがおそらく最もポータブルで信頼性の高い方法で、通常の状態に戻すことができます。

VT100制御コード: http://www.handshake.de/infobase/dfue/prgrmmer/t322.htm

28
Jander

:!resetを使用すると、これをすばやく簡単に修正できます。

6
GlyphGryph

ITermを使用している場合は、command+dcommand+wを押すとvimセッションを取り戻すことができます。

なぜ?

command+dはターミナルペインを分割し、元のペインを魔法のように復元します。

command+wは、開いたばかりの分割ペインを閉じます。

1
Adam Grant

Command-rをiTermキーマッピングの「無視」にマップします。

Screenshot of iTerm2 preferences dialog

1
Christian Long