TERM=(linux|xterm) vi 또는 xterm의 AAABBBBBBCCDDD 문제

TERM=(linux|xterm) vi 또는 xterm의 AAABBBBBBCCDDD 문제

vim일반적으로 데스크톱 세션에서 실행 하려는 경우 화살표 키가 삽입 모드에서 작동하지 않기 때문에 konsoleTERM 변수가 로 설정되어 있는지 확인합니다 . 커서를 이동하는 대신 대문자 A..D를 표시합니다.linuxTERM=xterm

이제 나는 이것이 일을 하는 잘못된 방법, konsolexterm실제로는 xterm.

vi/ 아래에서 화살표 키를 작동시키는 더 좋은 방법이 있습니까 vim?

운영 체제: Kubuntu 13.04(새로 설치)

답변1

무슨 일이 일어나고 있는지 알 것 같아요.

호환 모드를 vim비활성화하도록 구성하지 않았습니다 .vi

에서는 vi화살표 키만 누를 수 있습니다.주문하다모델. 삽입 모드에서는 화살표 키를 누를 때 전송되는 일련의 문자가 개별적으로 입력된 문자로 처리됩니다.

이제 시작할 때 vi터미널을 다음으로 설정하십시오.키보드 전송 모드(kx). 이 모드에서 터미널은 일반적으로 화살표 키를 누르는 경우와 화살표 키를 누르지 않는 경우에 다른 문자 시퀀스를 보냅니다.

예를 들어 키는 kx 모드 Up와 비kx 모드로 전송됩니다.\eOA\e[A

smkx터미널을 kx 모드로 설정하려면 terminfo 데이터베이스에서 (설정 모드 키보드 전송) 기능을 찾아 현재 값을 얻습니다 $TERM.

smkx, 및 의 기능을 살펴보면 다음과 같은 내용을 볼 수 있습니다.xtermkonsolelinux

$ 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\eOAUp

이제 \eOA삽입 모드에 있을 때 vim은 무엇을 합니까? \e(ESC)를 눌러 삽입 모드를 종료하고 명령 모드로 돌아갑니다. O새 줄을 열고 다시 삽입 모드로 들어가 문자를 A삽입 합니다 A.

반면 \e[A, \e(ESC)는 삽입 모드를 종료하며 [A알 수 없는 조합(in vim[접두사이고 뒤에 항상 다른 문자가 옵니다)이므로 아무 작업도 수행하지 않습니다.

따라서 해야 할 일은 $TERM그대로 두고 vi가 호환되는 경우 삽입 모드에서 화살표 키를 사용하지 않거나 삽입 모드에서 화살표 키를 사용할 수 set nocp있도록 를 추가하는 것입니다.~/.vimrc

답변2

이 문제를 해결하는 빠른 방법은 다음과 같습니다.

echo "set nocp" > ~/.vimrc

이 문제가 해결되어야 합니다 :)

관련 정보