VimでCtrl +矢印を修正する方法は?

VimでCtrl +矢印を修正する方法は?

Ctrl私はPutty、Suse box、Vim 7.2を組み合わせて編集していますが、+キーストロークを特定のタスクにArrow再マップしたいと思います。ただし、何らかの理由でVimはショートカットを無視して挿入モードに入り、文字DCtrl+ )または文字CCtrl+ )を挿入します。

私のキーボード/ターミナル構成のどの部分が問題であり、どのように解決できますか?

答え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;5AOPの問題を解決しません。

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年にこの詳細を修正することが「長い間待ってきました」。

追加資料:

関連情報