urxvtからvimへの代替マッピング

urxvtからvimへの代替マッピング

私のマッピングを含めるこのAltinを使用すると動作しません。彼らは非常にうまく動作します。そのようなマッピングの例vimurxvtgvim

map <silent> <A-h> <C-w><

挿入モードでを入力すると、印刷のみが行わAlt-hれますh。埋め込みマッピングをvimで機能させるにurxvtは、どのように設定する必要がありますか?Alt私はUbuntuを使用しています。

このように、urxvtで修飾子をsuperに設定しました。そのため、解決策のどれも私には効果がありませんでした。提案されたソリューションが機能するには、修飾子をAltに設定する必要があります。

答え1

Vimでマッピングするときに<A-x>xが印刷可能文字(カーソルや矢印キーなど)の場合、Vimはその文字に8番目/上位ビットセット(ASCII値に128を追加する)があると予想するように指示します。

あなたの例では、<A-h>è を入力すると Vim がマッピングをトリガすることを意味します。 hのASCII値は104(バイナリ01101000)で、対応する数値のビット8を設定すると、èのASCII値は232(バイナリ11101000)です。

urxvtや他の多くの端末で発生する現象は、Altキーが「128追加」ではなく、Escape文字が前に付けられた入力文字を送信するように設定されていることです。この場合、<Esc>hè の代わりに Vim がシードされるため、マッピングは実行されません。

これにより、2つのオプションが残ります。 Alt修飾子を使用して他の操作を実行するように端末を再構成します。または<Esc>xVimにさらにマッピングを追加することもできます<A-x>

答え2

ASCII以外のテキストを入力する必要がある場合は、vimマッピングをからに変更してみ<A-x>てください<Esc>x

ASCIIテキストのみを入力する場合は、オプションとをurxvt使用して実行できます。--meta8vim set termencoding=latin1

試してみる他の回避策は次のとおりです。

http://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal

答え3

恥ずかしい投稿ですねredditからu/jbaumy93が提供した回答

私が今使っているのがまさにこれです。

~/.Xresources私はいいえエンコーディングに設定するURxvt.meta8: trueと、設定が壊れます。を使用すると、set termencoding=latin電力線の文字が混乱します。私はEsc@graywhが投稿したマッピングを使用し、上記の回答を使用することにしました。

また、修飾子がAltのように設定されていることを確認してくださいurxvt。私はsuper修飾子として使用してきましたが、公開されたソリューションのどれも機能しません。

これは私の断片です。vimrc

nnoremap <silent> <A-h> <C-w><
nnoremap <silent> <A-k> <C-w>-
nnoremap <silent> <A-j> <C-w>+
nnoremap <silent> <A-l> <C-w>>
function! Altmap(char)
  if has('gui_running') | return ' <A-'.a:char.'> ' | else | return ' <Esc>'.a:char.' '|endif
endfunction
if $TERM == 'rxvt-unicode-256color'&&!has('gui_running')
  set ttimeoutlen=10
  augroup FastEscape
    autocmd!
    autocmd InsertEnter * set timeoutlen=400
    autocmd InsertLeave * set timeoutlen=2000
  augroup END
  execute 'nnoremap <silent>'.Altmap('h').'<C-w><'
  execute 'nnoremap <silent>'.Altmap('k').'<C-w>-'
  execute 'nnoremap <silent>'.Altmap('j').'<C-w>+'
  execute 'nnoremap <silent>'.Altmap('l').'<C-w>>'
endif

関連情報