web-dev-qa-db-ja.com

端末は<Shift-Enter>または<Control-Enter>を検出できますか?

端末が検出することは可能ですか? ⇧ Shift+Enter↵ または Ctrl+Enter↵ キーを押す?

これらのシーケンスを使用するキーマッピングを実行するようにvimを構成しようとしていますが、gvimでは正常に機能しますが、ターミナルコンソールでは機能しないようです。

不思議なことは Ctrl+Enter↵ vim、マッピングで検出されない Enter↵ に Esc 正しくマップしますが、 Ctrl+Enter↵ 次のように動作します Enter↵

37
Nicolas Wu

一部の端末は、<NL>が押されると<C-Enter>を送信します。これは、<C-J>を送信するのと同じです。

ターミナルが<Shift-Enter><Ctrl-Enter><Enter>で何をするかを知るには、ターミナルに行き、<Ctrl-V>(sykoraのvimの提案と同様)と入力し、興味のあるシーケンス。

Gnome-terminalを使用すると、次のようになります。

  <Enter> : ^M
<S-Enter> : ^M
<C-Enter> : <NL>

man asciiを見ると、^M<CR>シーケンスを提供していることがわかります。

答えは、端末によって異なり、簡単に確認できる方法があるということです。

39
Nicolas Wu

Gvimはキーストローク処理のために独自のマネージャーを実行しているため、さまざまなキーの組み合わせをすべて取得できます。 Vimは、特定のキー押下を渡すために特定の端末に依存しているため、キー処理は端末と同じくらい優れているか、さまざまです。

やりたいことができるかどうかを知る1つの方法は、キーを使用して挿入されているものを見つけることです。例:タイプ:

:<C-V><C-Enter>

つまり、Control-Vの組み合わせを入力した後、実際に押したい組み合わせを入力します。その後、enterについても同じことを行います。

:<C-V><Enter>

それらが同じコードを生成する場合、端末は両方のキーの組み合わせを同じキーコードとして解釈し、端末をいじらずにそれらをバインドすることはできません。

私のターミナル(urxvt)では、Control-Enter、Shift-Enter、Enter(それ自体)はすべて^ M文字を生成します。つまり、一方をマッピングせずに他方をマッピングすることはできません。 Control-TabとControl-I、およびControl-SpaceとControl- @についても同じことが言えます。

編集:Windows用のC-Vの代わりにC-Qを使用してください。

18
sykora