Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Linux에서 Vim을 기본 편집기로 구성하는 방법

필자는 약 25년간 리눅스를 사용해 왔고, 그 이전에는 몇 년간 유닉스를 사용했습니다. 그동안 일상적으로 사용하는 도구들에 대한 나름의 선호가 생겼는데, 그중 가장 중요한 도구가 바로 Vim 편집기입니다.

1990년대 초 솔라리스(Solaris)를 배우면서 Vi를 처음 접했습니다. 당시 "Vi는 어떤 시스템에서도 항상 사용할 수 있다"는 말을 듣고 시작했는데, 실제 경험상 그 말이 사실이었습니다. 다른 편집기들도 사용해 보았지만 역시 Vim이 가장 잘 맞았습니다. 그만큼 Vim을 많이 사용하다 보니 다른 편집기를 쓸 때도 무의식적으로 Vim 명령 키를 누르게 될 정도입니다.

게다가 필자는 그저 Vim을 정말 좋아합니다.

많은 설정 파일은 Vim이 아닌 Vi를 사용하며, vi 명령으로 실행할 수 있습니다. 하지만 사실 vi 명령은 vim에 연결된 링크일 뿐입니다.

많은 리눅스 도구들이 Nano, Emacs, Vim을 직접 호출하거나 이를 흉내 내는 편집기를 사용합니다. 또한 사용자의 선호를 반영해 자신이 좋아하는 편집기로 연결할 수 있게 해주는 도구도 있습니다. 필자에게 가장 큰 영향을 준 두 가지 예가 바로 기본값이 Emacs인 Bash 명령줄 편집과, 기본 편집기가 Pico인 텍스트 기반 이메일 클라이언트 Alpine입니다. 참고로 Pico 편집기는 Alpine의 전신인 Pine 이메일 클라이언트에서 사용하기 위해 만들어진 것입니다.

외부 편집기를 사용하는 모든 프로그램이 설정 가능한 것은 아닙니다. 어떤 프로그램은 개발자가 지정한 편집기만 사용합니다. 설정이 가능한 애플리케이션이라면 선호하는 편집기를 지정하는 방법이 여러 가지 있습니다.

리눅스 명령줄 편집

텍스트 파일 편집 외에 편집 작업이 가장 많이 필요한 도구는 Bash 셸입니다. Bash의 기본 편집기는 Emacs입니다. 필자도 Emacs를 사용해 본 적이 있지만 확실히 Vim을 더 선호합니다. 그래서 오래전에 Bash 명령줄 편집의 기본 스타일을 Emacs에서 Vim으로 변경했고, 훨씬 편안하게 사용하고 있습니다.

Bash를 설정하는 방법은 몇 가지가 있습니다. 먼저 /home/사용자홈디렉터리/.bashrc 같은 로컬 설정 파일을 사용할 수 있는데, 이 경우 동일 시스템의 다른 사용자가 아닌 해당 사용자 계정에만 기본값이 적용됩니다. 필자는 이런 변경을 전역(global)으로 적용하는 것을 선호하는데, 이는 개인 계정과 root 계정 모두에 적용한다는 의미입니다. 후자의 경우 자신만의 설정 파일을 만들어 /etc/profile.d 디렉터리에 넣으면 됩니다.

필자는 /etc/profile.d 디렉터리에 myBashConfig.sh라는 파일을 추가했습니다. 이 디렉터리에는 설치된 모든 셸에 대한 파일들이 들어 있습니다. 터미널 세션이 시작될 때 각 셸은 파일 확장자를 기준으로 자신에게 해당하는 파일만 읽습니다. 예를 들어 Bash 셸은 .sh 확장자를 가진 파일만 읽습니다.

<SNIP>
alias vim='vim -c "colorscheme desert" '
# bash 편집 모드를 vi로 설정
set -o vi
# 이 값을 확인하는 모든 앱의 기본 편집기를 vi로 설정
EDITOR=vi
<SNIP>

위 전역 Bash 설정 파일 조각에서 set -o vi 라인이 Vi를 기본 편집기로 지정합니다. set 명령의 -o 옵션이 vi를 편집기로 정의합니다. 이 설정을 적용하려면 실행 중인 Bash 세션을 모두 종료하고 새 세션을 열어야 합니다.

이제 커서 이동을 포함해 익숙한 모든 Vim 편집 명령을 사용할 수 있습니다. Escape 키를 누르면 Vim 편집 모드로 진입합니다. 특히 b 키를 여러 번 눌러 커서를 여러 단어 뒤로 이동할 수 있는 기능이 유용합니다.

다른 프로그램의 기본 편집기를 Vim으로 설정

일부 리눅스 명령줄 도구와 프로그램은 $EDITOR 환경 변수를 확인해 사용할 편집기를 결정합니다. 다음 명령으로 현재 변수 값을 직접 확인할 수 있습니다. 필자는 새로 설치한 가상 머신 하나에서 기본값이 무엇인지 확인해 보았습니다.

# echo $EDITOR
/usr/bin/nano
#

Fedora에서 $EDITOR 환경 변수를 확인하는 프로그램들은 기본적으로 Nano 편집기를 사용합니다. 위 코드 조각처럼 myBashConfig.shEDITOR=vi 라인을 추가하면 기본 편집기가 Vi(Vim)로 변경됩니다. 단, 외부 편집기를 사용하는 모든 명령줄 프로그램이 이 환경 변수를 확인하는 것은 아닙니다.

Alpine에서 이메일 편집하기

몇 주 전, 필자는 Pico가 이메일 편집기로서 더 이상 잘 맞지 않는다고 판단했습니다. Thunderbird에서 Alpine으로 전환한 후 한동안은 그럭저럭 사용했지만, Vim 키 시퀀스를 사용하려 할 때마다 Pico가 방해가 되어 생산성이 떨어졌습니다.

Alpine 도움말에서 기본 편집기를 변경할 수 있다는 내용을 읽고 Vim으로 바꾸기로 했습니다. 생각보다 매우 간단한 작업이었습니다.

Alpine 메인 메뉴에서 S 키를 눌러 설정(setup)에 진입한 다음 C 키를 눌러 구성(configuration) 화면으로 이동합니다. Composer Preferences 섹션에서 Enable Alternate Editor CommandEnable Alternate Editor Implicitly 항목을 X로 선택합니다. 몇 페이지 아래 Advanced User Preferences 섹션에서 Editor 라인을 찾습니다. 아직 변경하지 않았다면 다음과 같이 표시됩니다.

Editor    = <No Value Set>

커서 바로 Editor 라인을 선택하고 Enter 키를 눌러 편집합니다. <No Value Set>vim으로 변경한 후 Enter 키를 누르고, E 키로 빠져나온 뒤 Y 키를 눌러 변경 사항을 저장합니다.

이후 Vim으로 이메일을 편집하려면 메일 본문에 진입하기만 하면 됩니다. Pico와 마찬가지로 Vim이 자동으로 실행됩니다. 실제로 Vim을 사용하기 때문에 즐겨 쓰던 모든 편집 기능을 그대로 활용할 수 있으며, Vim을 종료하는 Esc :wq 시퀀스도 동일하게 작동합니다.

마치며

필자는 다른 어떤 편집기보다 Vim을 선호하며, 이번 시스템 변경을 통해 기본 편집기가 다른 프로그램에서도 Vim을 사용할 수 있게 되었습니다. $EDITOR 환경 변수를 사용하는 프로그램은 한 번만 변경하면 되지만, Alpine 같은 프로그램은 각 프로그램별로 개별적으로 사용자 설정을 지정해야 합니다.

선호하는 외부 편집기를 선택할 수 있는 이러한 기능은 "각 프로그램은 한 가지 일을 하되 그것을 잘해야 한다"는 유닉스 철학의 원칙과 잘 맞닿아 있습니다. 이미 훌륭한 편집기가 여럿 존재하는데 굳이 새 편집기를 만들 필요가 있을까요? 또한 "좋아하는 편집기를 사용하라"는 리눅스 철학의 원칙에도 부합합니다.

물론 기본 텍스트 모드 편집기를 Nano, Pico, EMACS 등 자신이 선호하는 다른 편집기로 변경할 수도 있습니다.