vim
일반적으로 데스크톱 세션에서 실행 하려는 경우 화살표 키가 삽입 모드에서 작동하지 않기 때문에 konsole
TERM 변수가 로 설정되어 있는지 확인합니다 . 커서를 이동하는 대신 대문자 A..D를 표시합니다.linux
TERM=xterm
이제 나는 이것이 일을 하는 잘못된 방법, konsole
즉 xterm
실제로는 xterm
.
vi
/ 아래에서 화살표 키를 작동시키는 더 좋은 방법이 있습니까 vim
?
운영 체제: Kubuntu 13.04(새로 설치)
답변1
무슨 일이 일어나고 있는지 알 것 같아요.
호환 모드를 vim
비활성화하도록 구성하지 않았습니다 .vi
에서는 vi
화살표 키만 누를 수 있습니다.주문하다모델. 삽입 모드에서는 화살표 키를 누를 때 전송되는 일련의 문자가 개별적으로 입력된 문자로 처리됩니다.
이제 시작할 때 vi
터미널을 다음으로 설정하십시오.키보드 전송 모드(kx). 이 모드에서 터미널은 일반적으로 화살표 키를 누르는 경우와 화살표 키를 누르지 않는 경우에 다른 문자 시퀀스를 보냅니다.
예를 들어 키는 kx 모드 Up와 비kx 모드로 전송됩니다.\eOA
\e[A
smkx
터미널을 kx 모드로 설정하려면 terminfo 데이터베이스에서 (설정 모드 키보드 전송) 기능을 찾아 현재 값을 얻습니다 $TERM
.
smkx
, 및 의 기능을 살펴보면 다음과 같은 내용을 볼 수 있습니다.xterm
konsole
linux
$ infocmp -1 linux | grep smkx
$ infocmp -1 xterm | grep smkx
smkx=\E[?1h\E=,
$ infocmp -1 konsole | grep smkx
smkx=\E[?1h\E=,
smkx
항목에 정의가 없습니다 linux
.
이는 vim을 vim
시작할 때 터미널을 kx 모드로 설정하지 않음을 의미합니다. 즉, 키 를 누를 때가 아닌 TERM=linux
전송을 의미합니다 .\e[A
\eOA
Up
이제 \eOA
삽입 모드에 있을 때 vim은 무엇을 합니까? \e
(ESC)를 눌러 삽입 모드를 종료하고 명령 모드로 돌아갑니다. O
새 줄을 열고 다시 삽입 모드로 들어가 문자를 A
삽입 합니다 A
.
반면 \e[A
, \e
(ESC)는 삽입 모드를 종료하며 [A
알 수 없는 조합(in vim
은 [
접두사이고 뒤에 항상 다른 문자가 옵니다)이므로 아무 작업도 수행하지 않습니다.
따라서 해야 할 일은 $TERM
그대로 두고 vi가 호환되는 경우 삽입 모드에서 화살표 키를 사용하지 않거나 삽입 모드에서 화살표 키를 사용할 수 set nocp
있도록 를 추가하는 것입니다.~/.vimrc
답변2
이 문제를 해결하는 빠른 방법은 다음과 같습니다.
echo "set nocp" > ~/.vimrc
이 문제가 해결되어야 합니다 :)