우분투 터미널 vim 설정: vim-tiny에서 .vimrc 적용까지 직접 확인한 순서

이 글의 핵심

우분투 최소 설치에서 vi를 열었더니 구문 강조가 안 되는 이유는 vim-tiny가 syntax 기능 없이 빌드되어 있기 때문입니다. 컨테이너에서 패키지별 기능을 확인하고, .vimrc의 설정값이 실제로 읽히는지 헤드리스로 검증했습니다.

우분투 서버나 컨테이너에서 vi를 열면 구문 강조가 없는 경험을 한 번쯤 한다. 원인은 vi가 가리키는 프로그램이 일반 vim이 아니라 축소판이기 때문이다. 이 글은 Ubuntu 24.04 컨테이너(aarch64)에서 직접 실행해 확인한 내용만 적는다. Vim 버전은 모두 9.1이었다.

vi가 가리키는 프로그램

vim-tiny만 설치한 상태에서 확인했다.

  • /usr/bin/vi는 /etc/alternatives/vi로 이어지고, 최종 대상은 /usr/bin/vim.tiny였다.
  • vi --version에서 -syntax, -clipboard, -python3이 보였다.

이어서 apt install vim을 한 뒤에는 같은 vi가 /usr/bin/vim.basic을 가리켰고 +syntax, +python3이 되었다. -clipboard는 그대로였다. 기본 이미지에는 vi 자체가 없었고, 어떤 패키지를 넣느냐에 따라 달라진다.

상태vi의 실체syntaxclipboardpython3
vim-tiny만vim.tiny---
vim 설치 후vim.basic+-+

시스템 클립보드를 vim에서 바로 쓰려면 클립보드를 지원하는 빌드를 설치해야 한다. 이 글에서는 그 빌드가 +clipboard인지까지 확인하지 못했으므로, 설치 후 vim --version | grep clipboard로 직접 확인하길 권한다.

최소 .vimrc

터미널에서 일하는 데 필요한 최소 설정이다.

set number
set expandtab tabstop=4 shiftwidth=4
set ignorecase smartcase
set hlsearch incsearch
set mouse=a
syntax on
  • expandtab과 tabstop=4, shiftwidth=4: 탭 키가 공백 4칸으로 들어간다.
  • ignorecase와 smartcase: 소문자로만 검색하면 대소문자를 무시하고, 대문자가 섞이면 구분한다.
  • hlsearch, incsearch: 검색어를 입력하는 도중에 결과를 강조한다.
  • mouse=a: 터미널에서 마우스 선택과 스크롤을 vim이 처리한다.

설정이 실제로 읽히는지 확인하기

.vimrc를 쓰고도 적용이 안 되는 경우가 있어서, 화면을 띄우지 않고 값을 읽어 보는 방법을 썼다.

vim -es -u ~/.vimrc +"redir! > /tmp/o.txt | silent set number? expandtab? tabstop? ignorecase? smartcase? mouse? | redir END" +q
cat /tmp/o.txt

위 .vimrc로 실행한 결과는 number expandtab tabstop=4 ignorecase smartcase mouse=a였다. 설정값이 그대로 읽힌다는 뜻이다. 반대로 -u NONE(설정 파일 없음)으로 같은 질의를 하면 nonumber nohlsearch mouse= compatible이 나왔다. 이때 compatible이 켜져 있는 것은 -u NONE이 vi 호환 모드로 시작하기 때문이라, 설정이 없는 상태의 기본값을 보려면 이 옵션을 쓰지 말고 실제 환경에서 확인해야 한다.

탭이 정말 공백으로 바뀌는지도 확인했다. 탭 한 글자와 x가 든 파일에 :retab을 적용하자 파일이 6바이트(공백 4개, x, 줄바꿈)가 되었다.

플러그인 없이 쓸 수 있는 설정 두 가지

같은 컨테이너(Ubuntu 24.04, Vim 9.1)에서 .vimrc에 아래를 넣고 헤드리스(vim -es)로 동작을 확인했다.

set undofile undodir=/tmp/vimundo   " 파일을 닫아도 되돌리기 기록을 남긴다
set path+=**                        " :find가 하위 디렉터리까지 찾는다
set wildmenu                        " 명령 줄 탭 완성 목록을 보여 준다
set autoindent
  • undofile: 파일에 one을 쓰고 두 번 수정·저장한 뒤 undodir을 보니 %tmp%t.txt라는 파일이 생겼다. 원래 파일의 전체 경로에서 /가 %로 바뀐 이름이다. undodir로 지정한 디렉터리가 없으면 만들어 두어야 한다. 이 확인에서는 디렉터리를 먼저 만들었다. 저장 뒤에 다시 열어 u로 되돌리는 동작까지는 이 확인에서 해 보지 않았다.
  • path+=** 와 :find: /w/src/a/main.cpp, /w/src/b/util.cpp가 있는 디렉터리에서 /w를 작업 디렉터리로 두고 :find util.cpp를 실행하니 src/b/util.cpp가 열렸다. 파일 탐색기 플러그인 없이 이름만 알면 열 수 있다.

색상 테마는 /usr/share/vim/vim91/colors에 27개가 들어 있었고 blue, darkblue, default, delek, desert 등이 보였다. :colorscheme desert처럼 바꾼다. 배경이 밝은 터미널과 어두운 터미널에서 읽기 편한 테마가 다르므로 직접 몇 개 바꿔 보고 정하면 된다.

자주 쓰는 확인 명령

  • :set number?처럼 옵션 뒤에 ?를 붙이면 현재 값이 나온다.
  • :verbose set tabstop?은 그 값을 어느 파일이 마지막으로 정했는지 알려 준다.
  • vim --version | grep -E "syntax|clipboard"로 빌드 기능을 확인한다.

이 글에서 확인하지 못한 것

  • 클립보드를 지원하는 빌드의 동작
  • 플러그인 관리자와 LSP 연동
  • 데스크톱 우분투의 기본 /etc/vim/vimrc 내용

더 넓은 사용법(모드, 이동, 치환, 분할 화면)은 Vi/Vim 가이드에 있다.


같이 보면 좋은 글