vi에서 방향키가 A B C D로 입력되고 백스페이스가 안 될 때 해결 방법

리눅스에서 vi로 파일을 수정하다 보면 방향키를 눌렀는데 커서가 이동하지 않고 A, B, C, D 같은 문자가 입력되는 경우가 있습니다. 백스페이스를 눌러도 기존 글자가 지워지지 않기도 합니다.

이번 글에서는 Vim 또는 vi 명령으로 실행되는 Vim 환경에서 설정을 변경하는 방법을 정리합니다. 실제 vi 프로그램의 종류에 따라 지원하는 설정은 다를 수 있습니다.

1. 방향키가 문자로 입력될 때

먼저 Esc를 눌러 입력 모드에서 나온 뒤, 아래 명령을 입력하고 Enter를 누릅니다.

:set nocompatible

다시 i를 눌러 입력 모드로 들어간 후 방향키가 정상적으로 작동하는지 확인합니다.

이 설정은 Vim의 vi 호환 모드를 해제합니다. 호환 모드 때문에 발생한 문제라면 해결될 수 있습니다. 계속 같은 현상이 발생한다면 터미널의 키 인식이나 다른 설정도 확인해야 합니다.

일반 모드에서는 아래 키로도 커서를 이동할 수 있습니다.

키 이동 방향
h 왼쪽
j 아래
k 위
l 오른쪽

2. 백스페이스로 기존 글자가 지워지지 않을 때

방향키는 작동하지만 백스페이스로 기존 글자가 지워지지 않는다면, Esc를 누른 뒤 아래 명령을 입력합니다.

:set backspace=indent,eol,start

Enter를 누르고, 다시 i를 눌러 입력 모드로 들어간 다음 백스페이스가 작동하는지 확인합니다.

각 옵션의 의미는 다음과 같습니다.

  • indent: 자동 들여쓰기 영역을 지울 수 있도록 허용합니다.
  • eol: 줄바꿈을 지워 이전 줄과 합칠 수 있도록 허용합니다.
  • start: 이번 입력 모드를 시작한 위치보다 앞쪽의 문자도 지울 수 있도록 허용합니다.

급하게 한 글자만 지우려면 Esc를 누르고, 삭제할 문자 위로 이동한 다음 x를 누르면 됩니다.

3. 파일을 열 때마다 자동으로 적용하기

앞에서 :set으로 변경한 설정은 현재 실행 중인 Vim에만 적용됩니다. 다음 실행부터 자동으로 적용하려면 사용자 설정 파일인 ~/.vimrc에 저장합니다.

현재 편집을 마치고 셸로 돌아온 뒤, 아래 명령을 한 번 실행합니다. 이 명령은 Vim 안에 입력하는 명령이 아닙니다.

printf '\nset nocompatible\nset backspace=indent,eol,start\n' >> ~/.vimrc

기존 .vimrc 파일 끝에 설정이 추가되며, 파일이 없다면 새로 만들어집니다. 여러 번 실행하면 같은 설정이 중복으로 추가되므로 한 번만 실행하면 됩니다.

추가된 내용은 아래 명령으로 확인할 수 있습니다.

cat ~/.vimrc

설정 파일에 추가되는 내용은 다음 두 줄입니다.

set nocompatible
set backspace=indent,eol,start

Vim 안에서 명령을 입력할 때와 달리, 설정 파일에서는 앞에 :를 붙이지 않아도 됩니다.

설정은 명령을 실행한 계정 기준으로 적용됩니다. root 계정에서 실행했다면 root 계정의 설정 파일에 저장되므로, 다른 계정으로 접속했을 때는 해당 계정에서도 별도로 설정해야 합니다.

4. 설정이 적용되지 않는다면

vi가 어떤 프로그램을 실행하는지는 서버 환경에 따라 다릅니다. Vim이 설치되어 있다면 다음처럼 직접 실행해 보세요. 아래의 파일명은 편집할 실제 파일 이름으로 바꿉니다.

vim 파일명

설정 명령을 입력했을 때 지원하지 않는 옵션이라는 오류가 나온다면, 사용 중인 편집기가 Vim인지 먼저 확인해야 합니다.

5. 실수로 입력된 문자를 저장하지 않고 종료하기

방향키를 누르면서 들어간 문자를 저장하지 않고 파일을 다시 열고 싶다면, Esc를 누른 뒤 아래 명령을 입력하고 Enter를 누릅니다.

:q!

주의: 이 명령은 현재 파일에서 저장하지 않은 수정 내용을 모두 버립니다. 필요한 수정 내용이 있다면 종료하지 말고, 잘못 입력된 문자만 삭제해 주세요.

Post a Comment

다음 이전