vimrc

Kiwoong Nam·2025년 4월 13일

Linux

목록 보기
2/9

vimrc란?

~/.vimrc

셸이 실행될 때 자동으로 실행되는 .bashrc, .zshrc처럼 vim이 실행될 때 자동으로 실행할 명령어를 저장하는 파일이다.

전체 계정에 대해서 적용하고 싶다면

/etc/vimrc

를 수정하면 된다. 이쪽은 숨김 파일이 아니다.

내가 쓰는 vimrc

if has("syntax")
    syntax on
endif
set hls
set nu
set autoindent
set cindent
set ts=2
set sts=2
set sw=2
set et
set laststatus=2
set smartcase
set smarttab
set smartindent
set ruler
set fileencodings=utf8,euc-kr
set clipboard=unnamedplus
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>

모든 옵션은 :와 함께 사용하여 vim 실행 중에 설정할 수 있으며, 해제하려면 :set nu!와 같이 느낌표를 붙여서 입력한다.

1) syntax on

if has("syntax")
    syntax on
endif

해당 파일의 형식을 보고(확장자라든지, 셸 스크립트 첫 줄이라든지...) 해당하는 syntax 정보가 있다면 syntax highlighting을 활성화한다.

2) hlsearch(hls)
vim에서는 / 명령으로 문자열을 검색하는데, 이 때 일치하는 문자열에 highlight를 적용한다.

3) number(nu)
Line number를 표시한다. IDE에서의 코드 편집처럼 줄 번호를 알 수 있어 편리하지만, 드래그하여 코드를 복사할 때 방해가 되는 경우가 있다. 이 때는 :set nu!로 옵션을 잠시 꺼 주면 된다.

4) autoindent, cindent
autoindent는 새로운 행 입력 시 이전 행과 동일한 들여쓰기를 적용해 준다.
cindent는 ; 없이 행이 끝나거나, { 다음의 행인 경우 들여쓰기를 한 칸 추가하고, }를 입력할 경우 들여쓰기를 한 칸 제거한다.

5) tabstop(ts), softtabstop(sts), shiftwidth(sw), expandtab(et)
tabstop은 하나의 탭 문자(\t)를 스페이스 몇 개 길이로 보여줄 지를 설정한다.
softtabstop은 탭 키를 한 번 입력할 때 스페이스를 몇 개 입력할지 설정한다.
shiftwidth는 <<, >> 명령이나 자동 들여쓰기에서 입력/삭제될 스페이스의 개수를 설정한다.
expandtab은 탭 키를 눌러도 스페이스로 변환되도록 설정한다. 반드시 탭을 입력해야 하는 경우 <C-v> + <Tab>으로 입력할 수 있다.

6) laststatus
명령어 행 바로 위에 현재 상태를 나타내는 줄을 표시하는 옵션이다.

laststatus 값설정
0출력하지 않음
1창이 두 개 이상일 경우 출력
2항상 출력

7) smartcase, smarttab, smartindent
smartcase는 검색 시 대소문자 구분을 무시하되, 검색어에 대문자가 있을 경우 대문자만 검색하는 옵션이다. ignorecase의 경우 항상 대소문자 구분을 무시하며, 이 두 옵션이 꺼져있어도 검색어 앞에 \c를 붙여서 (예시: \cmain) 검색하면 무시된다.
smarttab은 스페이스로 이루어진 공백을 지울 때 설정된 sts값에 따라 자동으로 여러 개를 지우는 옵션이다.
smartindent는 매크로 등 일부 C 문법에 대해 추가적으로 들여쓰기를 보완해 준다.

8) ruler
현재 커서가 몇 번째 행의 몇 번째 글자에 위치하고 있는지 보여준다.
laststatus가 출력되고 있지 않으면 명령어 행의 우측에, 출력되고 있다면 status 행의 우측에 표시된다.

9) fileencodings
파일을 열 때 사용할 인코딩 방식을 지정한다. 최근에는 윈도우 메모장도 UTF-8을 지원하는 등 환경이 좋아졌지만, 여전히 EUC-KR을 사용할 일이 종종 있기 때문에 깨지는 것을 방지하기 위해 사용한다.

10) clipboard
vim에서 잘라내기, 복사를 사용할 경우 기본적으로 다른 프로그램에 붙여넣을 수 없다. 이는 vim이 별도의 클립보드를 사용하기 때문이다.
vim의 여러 레지스터 중 *, + 두 개가 시스템 클립보드에 대응하는데, Linux에서 unnamed 옵션을 사용할 경우 *만, unnamedplus 옵션을 사용할 경우 *, + 모두 연결되된다. *은 범용 클립보드, "selection clipboard에 연결된다.
selection clipboard는 찾아봐도 말이 좀 왔다갔다해서, 조금 더 정리해봐야 할 것 같다.
macOS, Windows에서는 unnamedunnamedplus가 동일한 역할을 한다.

참고로, vim --version 커맨드를 사용했을 때, +clipboard라고 뜨면 해당 옵션이 유효하지만 -clipboard라고 뜨면 설정해도 아무 변화가 없다. apt로 설치한 vim은 기본적으로 -clipboard이므로, vim-gtk, vim-gnome 또는 gvim 중 하나를 설치해야 한다.

11) map
새로운 키 매핑을 설정한다.
normal mode, visual mode의 경우 map, insert mode의 경우 imap을 사용하고, 이미 매핑된 것을 취소하려면 unmap을 사용한다. 이외에도 n, v, x, s, i, c, l, o를 붙여서 다양한 모드 선택이 가능하다.
nore가 붙은 커맨드의 차이는 recursive이다. 매핑 시 기존 매핑을 또 확인하는 재귀적 과정을 안 거치고 싶으면 noremap을 사용하는 식이다.

너무 복잡한 커맨드라 이 블로그를 참고하면 좋을 것 같다.
나는 삽입 모드에서 esc - 이동 - 다시 삽입 모드로 이동하는 과정이 너무 귀찮아서, Ctrl+hjkl로 이동하는 커맨드를 설정해서 사용하는 중이다.

In VSCodeVim

세계 최고의 VSC extension인 VSCodeVim에도 .vimrc 사용이 가능은 하다. 사실 이 쪽은 settings.json 파일이 별도로 있긴 한데, 이것까지 공부하기는 힘들어서 그냥 inoremap 네 줄만 .vimrc로 만들어 쓰는 중이다. 어차피 인덴트는 VSC가 다 해주니까...

0개의 댓글