gnome-terminalのxtermでvimのモバイルファンクションキーを変更するには?

gnome-terminalのxtermでvimのモバイルファンクションキーを変更するには?

<s-f2>マッピングを実行するためにキーを押すと、nnoremap <s-f2> :set number!Vimは上記の「挿入」モード()を開き、文字列をO入力します。1;2Q完全なターミナルキーコードを表示するには(「通常」モードで途中で食べないで)、<c-v><s-f2>「挿入」モードを押してからインポートします^[O1;2Q。文字^[はどこにありますか<esc>

読んだ後でも「ターミナルVimからのショートカットキーコードマッピング」^[O1;2Qターミナルキーコードが<s-f1>Vimコードにマッピングされていない理由はわかりません。だから私のファイル~/.vimrcに次の関数を定義しました。

function! s:Mod_fix_shift_fkey()
  let a=0    
  let b='PQRS'    
  while a < 4    
    exec 'set <s-f' . (a + 1) . ">=\eO1;2" . b[a]    
    let a+=1    
  endwhile    
endfunction

<s-f1>これを呼び出してからへの移動機能キーを変更し、バインドされた<s-f4>マッピングが<s-f2>突然機能しました。

誰かがこれを説明できますか?

<s-f5>また、次から移動したファンクションキーを変更する必要がありました<s-f12>

  "...
  let a=5 
  let b='1517181920212324' 
  let c=0 
  while a < 16 
    exec 'set <s-f' . a . ">=\e[" . b[c : c + 1] . ';2~' 
    let a+=1 
    let c+=2
  endwhile
  "...

そして、From <c-s-f1>to<c-s-f4><c-s-f5>To<c-s-f12>制御転送機能キーです。たとえば、次のようになります。

" ...
exec 'map <esc>O1;6' . b[a] ' <c-s-f' . (a + 1) . '>'
" ...
exec 'map <esc>[' . b[c : c + 1] . ';6~ <c-s-f' . a . '>'
" ...

ベストアンサー1

:set <Key>特別なワイルドカード構文を使用して、Vimに自動的に認識させることができます。xterm-スタイル修飾キー:

if &term =~ '^gnome'
execute "set <xUp>=\e[1;*A"
execute "set <xDown>=\e[1;*B"
execute "set <xRight>=\e[1;*C"
execute "set <xLeft>=\e[1;*D"
execute "set <xHome>=\e[1;*H"
execute "set <xEnd>=\e[1;*F"
execute "set <PageUp>=\e[5;*~"
execute "set <PageDown>=\e[6;*~"
execute "set <F1>=\eOP"
execute "set <F2>=\eOQ"
execute "set <F3>=\eOR"
execute "set <F4>=\eOS"
execute "set <xF1>=\eO1;*P"
execute "set <xF2>=\eO1;*Q"
execute "set <xF3>=\eO1;*R"
execute "set <xF4>=\eO1;*S"
execute "set <F5>=\e[15;*~"
execute "set <F6>=\e[17;*~"
execute "set <F7>=\e[18;*~"
execute "set <F8>=\e[19;*~"
execute "set <F9>=\e[20;*~"
execute "set <F10>=\e[21;*~"
execute "set <F11>=\e[23;*~"
execute "set <F12>=\e[24;*~"
endif

:help xterm-function-keysとを参照してください:help xterm-modifier-keys

おすすめ記事