Ctrl私はPutty、Suse box、Vim 7.2を組み合わせて編集していますが、+キーストロークを特定のタスクにArrow再マップしたいと思います。ただし、何らかの理由でVimはショートカットを無視して挿入モードに入り、文字D
(Ctrl+ ←)または文字C
(Ctrl+ →)を挿入します。
私のキーボード/ターミナル構成のどの部分が問題であり、どのように解決できますか?
答え1
挿入モードで+、+arrowを入力して、端末が+arrowに対して送信するエスケープシーケンスが何であるかを正確に調べますCtrl。これにより、文字通り先頭文字(vimのように)が挿入され、残りのエスケープシーケンスが続きます。次に、vimに次のエスケープシーケンスを教えてください。CtrlVCtrlESC
^[
map <ESC>[5D <C-Left>
map <ESC>[5C <C-Right>
map! <ESC>[5D <C-Left>
map! <ESC>[5C <C-Right>
Puttyにはデフォルト設定があったことを覚えていますアプリケーションカーソルキーモードこれは不便です(理由は忘れました)、まずこの設定を切り替える必要があるかもしれません。
エスケープシーケンスは端末ごとに異なりますが、競合(つまり、他の端末の他のキーに対応するエスケープシーケンス)はほとんどないため、特定の端末タイプにのみマッピングを適用する必要はありません。
答え2
最良の方法はPuTTYを見ることです。アプリケーションカーソルキーモード構成。
デフォルトのシーケンスはESCプレフィックスに送信され、[
その後にA
ペンドまたはC
ハンジ、または挿入モードに入るエントリが続きます。
Gillesの後に追加されました
^Vエスケープのより明確なバージョンはod(1)で見ることができます。私が端末に入力した内容は次のとおりです。 ^Up、^Down、^Right、^Left:
$ od -a
0000000 esc [ 1 ; 5 A esc [ 1 ; 5 B esc [ 1 ;
0000020 5 C esc [ 1 ; 5 D
^[[1;5A
+を押すとマイCtrl端末が送信されます。↑
答え3
ここでより良い解決策を見つけました。 http://vim.wikia.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell
次の文字列を.vimrc
ファイルに入れます。
:set term=cons25
修正する
このファイルをあなたのファイルにコピーして/home
名前を変更してください.vimrc
。
/usr/share/vim/vim_VERSION_/vimrc_example.vim
答え4
2010年にこの質問が提起されたとき(そして遅くとも2013年以前に他の回答が提供されたとき)、PuTTYは区別できませんでした。コントロールカーソルキーの修飾子です。 VT100スタイルの汎用およびアプリケーションカーソルキーのみを送信します。特に、「」などの単語を含む回答は<ESC>[1;5A
OPの問題を解決しません。
10年以上が経過した後、PuTTYは次のコミットに示すようにxtermから派生したソリューションを提供します。
commit 22911ccdcc37c7955bfc1c45a88d3762d1206da7
Author: Simon Tatham <[email protected]>
Date: Mon Oct 18 20:00:25 2021 +0100
New config option for shifted arrow key handling.
This commit introduces a new config option for how to handle shifted
arrow keys.
In the default mode (SHARROW_APPLICATION), we do what we've always
done: Ctrl flips the arrow keys between sending their most usual
escape sequences (ESC [ A ... ESC [ D) and sending the 'application
cursor keys' sequences (ESC O A ... ESC O D). Whichever of those modes
is currently configured, Ctrl+arrow sends the other one.
In the new mode (SHARROW_BITMAP), application cursor key mode is
unaffected by any shift keys, but the default sequences acquire two
numeric arguments. The first argument is 1 (reflecting the fact that a
shifted arrow key still notionally moves just 1 character cell); the
second is the bitmap (1 for Shift) + (2 for Alt) + (4 for Ctrl),
offset by 1. (Except that if _none_ of those modifiers is pressed,
both numeric arguments are simply omitted.)
The new bitmap mode is what current xterm generates, and also what
Windows ConPTY seems to expect. If you start an ordinary Command
Prompt and launch into WSL, those are the sequences it will generate
for shifted arrow keys; conversely, if you run a Command Prompt within
a ConPTY, then these sequences for Ctrl+arrow will have the effect you
expect in cmd.exe command-line editing (going backward or forward a
word). For that reason, I enable this mode unconditionally when
launching Windows pterm.
設定ダイアログボックスのエントリはconfig.cにあります。
ctrl_radiobuttons(s, "Shift/Ctrl/Alt with the arrow keys", 'w', 2,
HELPCTX(keyboard_sharrow),
conf_radiobutton_handler,
I(CONF_sharrow_type),
"Ctrl toggles app mode", I(SHARROW_APPLICATION),
"xterm-style bitmap", I(SHARROW_BITMAP));
「ビットマップ」はテーブルを表す。XTerm制御シーケンス:
Code Modifiers
---------+---------------------------
2 | Shift
3 | Alt
4 | Shift + Alt
5 | Control
6 | Shift + Control
7 | Alt + Control
8 | Shift + Alt + Control
9 | Meta
10 | Meta + Shift
11 | Meta + Alt
12 | Meta + Alt + Shift
13 | Meta + Ctrl
14 | Meta + Ctrl + Shift
15 | Meta + Ctrl + Alt
16 | Meta + Ctrl + Alt + Shift
---------+---------------------------
だから...開発者の説明によると、xtermで動作する設定はPuTTYでも動作するはずです。これは、2000年頃のPuTTY開発が始まって以来、xtermの機能でした。2002年、2021年にこの詳細を修正することが「長い間待ってきました」。
追加資料:
- PCスタイルファンクションキー、存在するXTerm制御シーケンス
- ShiftまたはControl修飾子を使用するには?(ncurses FAQ)