urxvt에서 vim의 대체 매핑

urxvt에서 vim의 대체 매핑

내 매핑 포함이 Altin을 사용할 때 작동하지 않습니다. 그들은 아주 잘 작동합니다. 그러한 매핑의 예vimurxvtgvim

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

삽입 모드에서 를 입력하면 인쇄 Alt-h만 됩니다 h. 포함된 매핑이 vim에서 작동 urxvt하도록 하려면 이를 어떻게 구성해야 합니까 ? Alt저는 우분투를 사용하고 있습니다.

이런, 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이 시드되므로 매핑이 실행되지 않습니다.

이렇게 하면 두 가지 옵션이 남습니다. Alt 수정자를 사용하여 다른 작업을 수행하도록 터미널을 재구성합니다.또는<Esc>x또한 Vim에 더 많은 매핑을 추가할 수 있습니다 <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

관련 정보