Vim 설정 · 3 min read · Nov 14, 2025

Vim에서 Modeline을 사용하여 파일별 설정 변경하는 방법

플러그인이 Vim의 가장 큰 강점 중 하나인 것은 의심의 여지가 없지만, 여러 다른 기능들이 오늘날 리눅스 사용자들에게 가장 강력하고 기능이 풍부한 텍스트 편집기/IDE 중 하나로 만들어 줍니다. 이러한 기능 중 하나는 파일별 설정 변경을 할 수 있는 능력입니다. 이 기능은 편집기의 Modeline 기능을 사용하여 접근할 수 있습니다.

이 기사에서는 이해하기 쉬운 예제를 사용하여 Vim의 Modeline 기능을 사용하는 방법에 대해 논의할 것입니다.

하지만 시작하기 전에, 이 튜토리얼에서 언급된 모든 예제, 명령 및 지침은 Ubuntu 16.04 - Ubuntu 22.04에서 테스트되었다는 점을 언급할 가치가 있습니다.

VIM Modeline

사용법

이미 언급했듯이, Vim의 Modeline 기능은 파일별 변경을 할 수 있게 해줍니다. 예를 들어, 프로젝트의 특정 파일에서 사용된 모든 탭을 공백으로 바꾸고, 다른 모든 파일에는 이 변경이 영향을 미치지 않도록 하고 싶다고 가정해 보겠습니다. 이것은 Modeline이 당신이 하고자 하는 일을 도와주는 이상적인 사용 사례입니다.

따라서, 당신이 할 수 있는 것은, 해당 파일의 시작 또는 끝에 다음과 같은 줄을 넣는 것입니다:

# vim: set expandtab:

당신이 리눅스 머신에서 위의 연습을 시도해 보면, 예상대로 작동하지 않을 가능성이 높습니다. 만약 그렇다면, 걱정하지 마세요. Modeline 기능은 경우에 따라 먼저 활성화해야 합니다(보안상의 이유로 Debian, Ubuntu, Gentoo 및 OSX와 같은 시스템에서는 기본적으로 비활성화되어 있습니다).

기능을 활성화하려면, .vimrc 파일(홈 디렉토리에 위치) 을 열고, 다음 줄을 추가하세요:

set modeline

이제, 탭을 입력하고 파일을 저장할 때(expandtab modeline 명령이 입력된 곳) 탭이 자동으로 공백으로 변환됩니다.

또 다른 사용 사례를 고려해 보겠습니다. Vim의 기본 탭 공간이 4로 설정되어 있지만, 특정 파일에서는 8로 늘리고 싶다고 가정해 보겠습니다. 이를 위해서는 파일의 시작 또는 끝에 다음 줄을 추가해야 합니다:

// vim: noai:ts=8:

이제 탭을 입력해 보세요. 그러면 그 탭이 차지하는 공백의 수가 8이 될 것입니다.

이 모델라인 명령이 파일의 상단이나 하단 근처에 입력되어야 한다고 제가 말한 것을 주목하셨을 것입니다. 왜 이렇게 되어야 하는지 궁금하시다면, 그 이유는 이 기능이 이렇게 설계되었기 때문입니다. 다음 줄(공식 Vim 문서에서 발췌한 내용)은 이를 더 명확하게 해줄 것입니다:

모델라인은 파일의 어디에나 있을 수 없습니다: 첫 번째 또는 마지막 몇 줄에 있어야 합니다. vim이 모델라인을 확인하는 정확한 위치는 modelines 변수에 의해 제어됩니다; :help modelines를 참조하세요 . 기본적으로 5줄로 설정되어 있습니다.

그리고 위의 줄에서 언급된 :help modelines 명령이 말하는 내용은 다음과 같습니다:

If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

모델라인 명령을 기본 5줄(상단 또는 하단) 범위를 넘어 넣어 보세요. 그러면 탭 공간이 Vim 기본값으로 되돌아가는 것을 알 수 있습니다 - 제 경우에는 4개의 공백입니다.

하지만 원하신다면, .vimrc 파일에서 다음 명령을 사용하여 이 동작을 변경할 수 있습니다.

set modelines=[new-value]

예를 들어, 저는 값을 5에서 10으로 늘렸습니다.

set modelines=10

이것은 이제 파일의 첫 번째 또는 마지막 10줄 사이에 모델라인 명령을 넣을 수 있음을 의미합니다.

계속해서, 파일을 편집하는 동안 언제든지 다음을 입력하여(Vim 편집기가 명령 모드에 있을 때) 현재 모델라인 관련 설정과 마지막으로 설정된 위치를 확인할 수 있습니다.

:verbose set modeline? modelines?

예를 들어, 제 경우 위의 명령은 다음과 같은 출력을 생성했습니다:

 modeline  
      Last set from ~/.vimrc  
 modelines=10  
      Last set from ~/.vimrc

다음은 Vim의 Modeline 기능에 대해 알아야 할 몇 가지 중요한 사항입니다:

  • 이 기능은 nocompatible(비 Vi 호환) 모드에서 실행되는 Vim의 경우 기본적으로 활성화되어 있지만, 일부 주목할 만한 Vim 배포판에서는 보안을 위해 시스템 vimrc에서 이 옵션을 비활성화합니다.
  • 루트로 편집할 때 기본적으로 비활성화됩니다(파일을 ‘sudo’를 사용하여 열었다면 문제 없습니다 - 기능이 작동합니다).
  • set‘와 함께 사용할 경우, 모델라인은 백슬래시 뒤에 따라오지 않는 첫 번째 콜론에서 끝납니다. 그리고 ‘ set‘ 없이 사용할 경우, 옵션 뒤에 어떤 텍스트도 올 수 없습니다. 예를 들어, / vim: noai:ts=4:sw=4 /는 유효하지 않은 모델라인입니다.

보안 문제

안타깝게도, Vim의 Modeline 기능은 보안을 위협하는 데 사용될 수 있습니다. 사실, 과거에 여러 보안 관련 모델라인 문제가 보고되었으며, 여기에는 셸 명령 주입, 임의 명령 실행, 무단 접근 등이 포함됩니다. 동의합니다, 대부분은 오래된 문제이며 지금은 수정되었겠지만, 이는 모델라인 기능이 해커에 의해 악용될 수 있다는 아이디어를 제공합니다.

결론

모델라인은 Vim 편집기의 고급 기능일 수 있지만, 이해하기 어렵지는 않습니다. 이 기능이 얼마나 유용한지 고려할 때, 약간의 학습 곡선이 있다는 것은 그리 큰 요구가 아닙니다. 물론 보안 문제가 있으므로, 기능을 활성화하고 사용하기 전에 옵션을 신중하게 고려해야 합니다.

모델라인 기능을 사용해 본 적이 있나요? 당신의 경험은 어땠나요? 아래 댓글로 저희와 (그리고 전체 HowtoForge 커뮤니티와) 공유해 주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.