2020년 12월 24일 목요일

우분투 18.04의 vi에서 편집 모드일 때 화살표키를 누르면 영문 대문자가 나타나는 현상에 관하여

사무실에서 쓰는 CentOS 7의 vi(실제로는 vim의 symbolic link인 것으로 알고 있다)에서는 문제가 없는데, 집에서 사용하는 노트북에서는 편집 모드에서 화살표키를 누르면, B/A/D/C가 입력되어 상당히 불편하다. 꼭 ESC 키를 눌러서 command mode로 빠져나온 다음 화살표키를 눌러서 원하는 위치로 이동해야만 한다.

구글 어딘가에는 당연히 해결 방안이 있을 것으로 생각하였다. 어렵지 않게 답을 얻었다.

[StakExchange] Hitting arrow keys add characters in vi editor

홈 디렉토리에 .vimrc 설정 파일을 만들어서 'set nocompatible'이라고 한 줄을 써 넣으면 끝이다. vi가 아닌 vim이 설치된 상태라면 .exrc에 같은 내용을 써 넣으면 된다고 한다.

이 컴퓨터에 설치된 것은 vi인가, vim인가? vim라는 이름으로는 실행할 수 있는 파일이 없다. 그러면 정말 예전에 쓰던 vi란 말인가? 확인을 해 보니 vim-tiny(Vi IMproved - enhanced vi editor - compact version)가 설치된 것이 맞다. 그런데 이는 오로지 'vi'라고만 쳐야 실행이 된다.

vi가 다른 명령어의 심볼릭 링크는 아닌지 궁금하여 조금 더 추적을 해 보았다.

$ which vi
/usr/bin/vi
$ ls -l /usr/bin/vi
lrwxrwxrwx 1 root root 20  8월 15 11:15 /usr/bin/vi -> /etc/alternatives/vi
$ ls -lt /etc/alternatives/vi
lrwxrwxrwx 1 root root 17  8월 15 11:14 /etc/alternatives/vi -> /usr/bin/vim.tiny

명령행에서 vi를 입력하면 최종적으로는 같은 디렉토리에 있는 vim.tiny가 실행됨을 알 수 있다.

화살표키를 눌렀을 때 영문 대문자가 삽입되는 문제의 해결책을 국문 사이트에서 찾아보면 vi를 버리고 vim을 쓰면 된다고 한다. ~/.vimrc 파일에 손을 대라는 말도 없다. 우분투 18.04에 설치된 vim.tiny는 vi도 아니고 vim도 아닌 어정쩡한 상태인 것 같다.

/etc/alternatives 이하의 파일들은 update-alternatives라는 명령에 의하여 관리되는 것들이다. CentOS에서는 alternatives 명령을 사용하여 java의 여러 버전을 관리했던 기억이 난다. vi의 상태는 어떠한지 이 명령을 써서 확인해 보았다.

$ update-alternatives --query vi
Name: vi
Link: /usr/bin/vi
Slaves:
 vi.1.gz /usr/share/man/man1/vi.1.gz
 vi.fr.1.gz /usr/share/man/fr/man1/vi.1.gz
 vi.it.1.gz /usr/share/man/it/man1/vi.1.gz
 vi.ja.1.gz /usr/share/man/ja/man1/vi.1.gz
 vi.pl.1.gz /usr/share/man/pl/man1/vi.1.gz
 vi.ru.1.gz /usr/share/man/ru/man1/vi.1.gz
Status: auto
Best: /usr/bin/vim.tiny
Value: /usr/bin/vim.tiny

Alternative: /usr/bin/vim.tiny
Priority: 15
Slaves:
 vi.1.gz /usr/share/man/man1/vim.1.gz
 vi.fr.1.gz /usr/share/man/fr/man1/vim.1.gz
 vi.it.1.gz /usr/share/man/it/man1/vim.1.gz
 vi.ja.1.gz /usr/share/man/ja/man1/vim.1.gz
 vi.pl.1.gz /usr/share/man/pl/man1/vim.1.gz
 vi.ru.1.gz /usr/share/man/ru/man1/vim.1.gz

이제야 좀 이해가 간다.

댓글 없음: