스크린 세션 내에서 vim에서 왼쪽 제어 및 오른쪽 제어가 작동하지 않습니다.

스크린 세션 내에서 vim에서 왼쪽 제어 및 오른쪽 제어가 작동하지 않습니다.

vim에서 control-left 및 control-right는 앞뒤 공백으로 구분된 단어(예: B 및 W의 동의어)이며 웹 텍스트 영역 및 bash.

그러나 실행하면 screen이러한 키가 작동을 멈춥니다. 이 버튼을 누르면 vim은 대신 명령줄로 전환하여 5Cor 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>

관련 정보