Vim 모드 · 3 min read · Jan 21, 2026
Vim의 호환 모드와 비호환 모드
지금까지 Vim을 중심으로 한 튜토리얼에서 우리는 편집기의 Modeline 기능과 Vim의 기능 세트를 플러그인을 사용하여 확장하는 방법에 대해 논의했습니다. 그러나 모두 알다시피 Vim은 수많은 내장 기능을 제공합니다. 따라서 이 논의를 더 진행하기 위해, 이번 튜토리얼에서는 편집기를 시작할 수 있는 사용 가능한 모드에 대해 논의하겠습니다.
하지만 그 전에, 이 튜토리얼에서 언급된 모든 예제, 명령 및 지침은 Ubuntu 14.04에서 테스트되었으며, 우리가 사용한 Vim 버전은 7.4입니다.앞서 언급한 Vim 모드를 제대로 이해하려면, 먼저 편집기의 초기화 과정에서 중요한 측면을 이해해야 합니다.
시스템 및 로컬 vimrc
문제의 측면은: Vim이 시작될 때, 편집기는 시스템 전체의 기본 초기화를 수행하기 위해 시스템 수준의 ‘vimrc’ 파일을 검색합니다.
이 파일은 일반적으로 시스템의 $VIM/vimrc 경로에 위치하지만, 그렇지 않은 경우 Vim 내에서 :version 명령을 실행하여 정확한 위치를 찾을 수 있습니다. 예를 들어, 제 경우에는 다음과 같은 명령 출력의 관련 발췌가 있습니다:
...
...
...
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
...
...
...따라서 시스템 ‘vimrc’ 파일은 실제로 $VIM/vimrc에 위치하지만, 제 컴퓨터에서는 $VIM 환경 변수가 설정되어 있지 않음을 확인했습니다. 따라서 위의 출력에서 볼 수 있듯이, $VIM에 대한 대체 값이 있으며, 제 경우에는 /usr/share/vim입니다. 이 경로에서 ‘vimrc’를 검색해 보니 파일이 존재하는 것을 확인했습니다. 그래서 이것이 제가 언급한 대로 Vim이 시작될 때 읽는 시스템 vimrc입니다.
이 시스템 vimrc가 파싱된 후, 편집기는 사용자 특정(또는 로컬) ‘vimrc’ 파일을 찾습니다. 로컬 vimrc에 대한 검색 순서는: 환경 변수 VIMINIT, $HOME/.vimrc, 환경 변수 EXINIT, 그리고 ‘exrc’라는 파일입니다. 일반적으로 존재하고 로컬 vimrc로 처리되는 것은 $HOME/.vimrc 또는 ~/.vimrc입니다.
어떤 호환성에 대해 이야기하고 있나요?
Vim의 호환 모드와 비호환 모드에 대해 논의하고 있으므로, 이러한 모드가 어떤 종류의 호환성을 활성화하고 비활성화하는지 아는 것이 중요합니다. 이를 위해서는 먼저 Vim이 V i IM proved의 약자라는 것을 인식해야 하며, 전체 이름이 암시하듯이 이 편집기는 Vi 편집기의 개선된 버전입니다.
개선된다는 것은 Vim이 제공하는 기능 세트가 Vi보다 더 크다는 것을 의미합니다. 두 편집기 간의 차이를 더 잘 이해하려면 여기를 방문하세요.
따라서 Vim의 호환 모드와 비호환 모드에 대해 논의할 때, 우리가 이야기하는 호환성은 Vim과 Vi 간의 호환성입니다. 호환 모드에서 실행될 때, Vim의 대부분의 향상 및 개선 사항이 비활성화됩니다. 그러나 이 모드에서 Vim이 단순히 Vi를 에뮬레이트하지 않는다는 점을 명심해야 합니다. 이 모드는 기본적으로 Vi 편집기가 작동하는 방식에 대한 몇 가지 기본 옵션을 설정합니다.
비호환 모드는 - 말할 필요도 없이 - Vim이 Vi와 호환되지 않게 작동하게 하여 모든 향상/개선/기능을 사용자에게 제공합니다.
이러한 모드를 활성화/비활성화하는 방법은?
Vim에서 :help compatible 명령을 실행해 보세요. 그러면 다음과 같은 구문을 볼 수 있습니다:
'compatible' 'cp' boolean (기본값 켜짐, |vimrc| 또는 |gvimrc|
파일이 발견되면 꺼짐)설명에 따르면 호환 모드는 기본적으로 켜져 있지만 vimrc 파일이 발견되면 꺼집니다. 그런데 어떤 vimrc에 대해 이야기하고 있나요? 답은 로컬 vimrc입니다. :help compatible 명령이 제공하는 세부 정보를 살펴보면 다음과 같은 문구를 찾을 수 있습니다. 이는 상황을 더 명확하게 해줄 것입니다:
실제로, 이는 |vimrc| 또는 |gvimrc| 파일이 존재할 때 Vim이 Vim 기본값을 사용하고, 그렇지 않으면 Vi 기본값을 사용한다는 것을 의미합니다. (*참고: 이는 시스템 전체 vimrc 또는 gvimrc 파일, 또는 |-u| 인수로 제공된 파일에는 해당되지 않습니다.*)따라서 실제로 발생하는 일은, Vim이 시작될 때 시스템 vimrc 파일을 먼저 파싱하는데, 이때 호환 모드는 기본적으로 켜져 있습니다. 이제 사용자가 (또는 로컬) vimrc가 발견되면 비호환 모드가 켜집니다. :help compatible-default 명령은 이를 명확히 해줍니다:
Vim이 시작될 때 'compatible' 옵션이 켜져 있습니다. 이는 Vim이 초기화를 시작할 때 사용됩니다. 그러나 사용자 vimrc 파일이 발견되거나 현재 디렉토리에 vimrc 파일이 발견되거나 "VIMINIT" 환경 변수가 설정되면 'nocompatible'로 설정됩니다.기본 동작을 무시하고 시스템 vimrc 파일을 파싱할 때 비호환 모드를 켜고 싶다면, 다음 명령을 해당 파일의 시작 부분에 추가하면 됩니다:
:set nocompatible기타 유용한 세부정보
다음은 이러한 모드에 대한 몇 가지 추가 유용한 세부정보입니다:
하지만 .vimrc 파일이 발견되는 순간 'compatible'을 설정하거나 재설정하는 부작용이 있습니다: 매핑은 발견되는 순간 해석됩니다. 이는 ""와 같은 것을 사용할 때 차이를 만듭니다. 매핑이 'compatible'의 특정 값에 의존하는 경우, 매핑을 주기 전에 설정하거나 재설정하십시오.
위의 동작은 다음과 같은 방법으로 무시할 수 있습니다:
- "-N" 명령줄 인수가 주어지면, vimrc 파일이 존재하지 않더라도 'nocompatible'이 사용됩니다.
- "-C" 명령줄 인수가 주어지면, vimrc 파일이 존재하더라도 'compatible'이 사용됩니다.
- "-u {vimrc}" 인수가 사용되면, 'compatible'이 사용됩니다.
- 실행 파일의 이름이 "ex"로 끝나면, 이는 '-C' 인수가 주어진 것처럼 작동합니다: vimrc 파일이 존재하더라도 'compatible'이 사용됩니다. 이는 Vim이 "ex"로 시작될 때 "ex"처럼 작동하도록 하기 위해 수행되었습니다. 동의합니다. Vim의 Vi 호환 모드를 켜야 하는 상황에 처할 가능성은 낮지만, 그렇다고 해서 편집기의 초기화 과정에 대해 무지해야 한다는 의미는 아닙니다. 결국, 이 지식이 도움이 될 수 있는 순간이 언제 올지 알 수 없으니까요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.