vim에서 control-left 및 control-right는 앞뒤 공백으로 구분된 단어(예: B 및 W의 동의어)이며 웹 텍스트 영역 및 bash
.
그러나 실행하면 screen
이러한 키가 작동을 멈춥니다. 이 버튼을 누르면 vim은 대신 명령줄로 전환하여 5C
or 5D
거기를 입력합니다.
다음은 이러한 키에 대한 인코딩입니다.
$ cat >/dev/null # pressing control-left, then control-right:
^[[1;5C^[[1;5D
그런데: 다음과 같이 에서 이러한 키를 다시 매핑해 보았습니다 .screenrc
.
bindkey ^[[1;5D stuff B
bindkey ^[[1;5C stuff W
이는 vim에서는 작동하지만 이제 해당 키는 명령줄에서 작동하지 않습니다 bash
(대신 B
또는 출력만 수행 W
).
나는 이것이 내가 결코 이해하지 못했던 신비로움이라고 생각합니다 termcap
... 깨달음에 감사드립니다!
답변1
이 문제를 해결하는 방법에는 몇 가지가 있습니다. 하나는 screen(아마도 xterm)을 시작하기 전에 $TERM 값을 기록한 다음, screen 내에서 vim을 시작한 후 'term' 옵션을 해당 값으로 설정하는 것입니다. 예를 들어,
:set term=xterm
또 다른 방법은 해당 문자 시퀀스에 대한 매핑을 정의하는 것입니다.
:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>
다음과 같이 화면을 사용하여 조건에 따라 ~/.vimrc에서 해당 솔루션 중 하나를 실행할 수 있습니다.
if &term == "screen"
map <esc>[1;5D <C-Left>
map <esc>[1;5C <C-Right>
endif
답변2
우분투 .vimrc
에서 Ctrl 화살표 키를 처리하려면
map <Esc>[1;5A <C-Up>
map <Esc>[1;5B <C-Down>
map <Esc>[1;5D <C-Left>
map <Esc>[1;5C <C-Right>
cmap <Esc>[1;5A <C-Up>
cmap <Esc>[1;5B <C-Down>
cmap <Esc>[1;5D <C-Left>
cmap <Esc>[1;5C <C-Right>
map <Esc>[1;2D <S-Left>
map <Esc>[1;2C <S-Right>
cmap <Esc>[1;2D <S-Left>
cmap <Esc>[1;2C <S-Right>