내 매핑 포함이 Alt
in을 사용할 때 작동하지 않습니다. 그들은 아주 잘 작동합니다. 그러한 매핑의 예vim
urxvt
gvim
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
사용하여 실행해 볼 수 있습니다 .--meta8
vim
set termencoding=latin1
시도해 볼 수 있는 다른 해결 방법은 다음과 같습니다.
답변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