web-dev-qa-db-ja.com

Shift + Enterはターミナルで何をしますか?Vimで無効にできますか?

Vimの挿入モードでは、たまにみんなが楽しく入力していました。突然、挿入モードから外され、特定のキーの組み合わせを押した後、最後の編集が取り消されました。

今日、私は不思議な組み合わせが Shift+Enter。案の定、打つ Shift+Enter 挿入モードに関係なく、元に戻すを実行します。

それからやってみました Ctrl+VShift+Enter のリテラル値を確認するには Shift+Enter でした、そしてそれは印刷されました:

^[[13;2u

そして今、それは理にかなっています-^[はエスケープであり、最後のuは元に戻されます。この順序で入力すると、他の文字は何もしません。

ある種の制御コードのようですが、これが何を意味するのかを知るために検索する正しいものを見つけることができないようです。

この制御コードの意味と、Vimで無効にできるかどうかを知っている人はいますか?私の端末はそれと関係があるのではないかと思います。Cygwinのストック端末を使用してLinuxボックスにSSHで接続し、その上でsshを実行しています。

3
davidscolgan

端末の機能やエスケープコードの複雑さに立ち入ることなく、あなたがすでに発見したことを確認します。端末は、変更されたエンターキーと変更されていないエンターキーを区別する方法を提供しようとしています。

編集:訂正、VimがMintty端末を「生」モードにすると表示されるようです Shift+Enter nullバイトとして表示され、前に^@と表示されます。 Control+v、しかしそれ以外の場合はとにかく改行として扱います。

この問題を解決する方法は複数あります。 1つは、代わりにCygwinのMinttyを使用することです。これは、 Shift+Enter。ストックターミナルに比べて他にも利点があります。

ただし、「迅速で汚い」解決策は、リモートマシンの~/.vimrcに次のようなものを追加することです。

:imap <esc>[13;2u <CR>

これの欠点は、それ以降、エスケープを押すたびに、移動コマンドの使用を開始するか、マップのタイムアウト間隔が経過するまで、挿入モードを終了しないことです。 「:help 'timeout'」および以下の関連エントリを参照してください。

他の解決策は実行可能ではないかもしれません(そして実際には問題を解決しないかもしれません)が、sshを実行する前にCygwinシェルで、sshを実行した後にリモートシェルでTERM変数が適切に設定され、それらが一致することを確認することです、またはそれらは十分に類似しています。 (シェル構成ファイルに無条件のTERM=<anything>設定を含めることは絶対にしないでください。)

4
Heptite