페이지 공유

Y분에 X를 배우다

여기서 X=Vim

Vim (Vi IMproved)은 유닉스에서 인기 있는 vi 에디터의 클론입니다. Vim은 속도와 생산성을 위해 설계된 텍스트 에디터로, 대부분의 유닉스 기반 시스템에 내장되어 있습니다. 다양한 단축 키를 통해 파일 안에서 빠르게 이동하고 편집할 수 있습니다.

Vim 조작의 기본

    vim <filename>   # vim으로 <filename> 열기
    :help <topic>    # (존재하는 경우에) <topic>에 대한, 내장된 도움말 문서 열기
    :q               # vim 종료
    :w               # 현재 파일 저장
    :wq              # 파일 저장 후 종료
    ZZ               # 파일 저장 후 종료
    :q!              # 저장하지 않고 종료
                     # ! *강제로* :q를 실행하여, 저장 없이 종료
    :x               # 파일 저장 후 종료 (:wq의 축약)

    u                # 동작 취소
    CTRL+R           # 되돌리기

    h                # 한 글자 왼쪽으로 이동
    j                # 한 줄 아래로 이동
    k                # 한 줄 위로 이동
    l                # 한 글자 오른쪽으로 이동

    # 줄 안에서의 이동

    0                # 줄 시작으로 이동
    $                # 줄 끝으로 이동
    ^                # 줄의 공백이 아닌 첫 문자로 이동

    Ctrl+B           # 한 화면 뒤로 이동
    Ctrl+F           # 한 화면 앞으로 이동
    Ctrl+D           # 반 화면 앞으로 이동
    Ctrl+U           # 반 화면 뒤로 이동

    # 텍스트 검색

    /word            # 커서 뒤에 나타나는 해당 단어를 모두 하이라이트
    ?word            # 커서 앞에 나타나는 해당 단어를 모두 하이라이트
    n                # 해당 단어를 검색 후 다음으로 나타나는 위치로 이동
    N                # 이전에 나타나는 위치로 이동

    :%s/foo/bar/g    # 파일 모든 줄에 있는 'foo'를 'bar'로 치환
    :s/foo/bar/g     # 현재 줄에 있는 'foo'를 'bar'로 치환
    :%s/foo/bar/gc   # 사용자에게 확인을 요구하는, 모든 줄에 있는 'foo'를 'bar'로 치환
    :%s/\n/\r/g      # 한 종류의 개행 문자에서 다른 종류의 것으로 치환 (\n에서 \r로)

    # 문자로 이동

    f<character>     # <character>로 건너뛰기
    t<character>     # <character>의 바로 뒤로 건너뛰기

    # 예를 들어,
    f<               # <로 건너뛰기
    t<               # <의 바로 뒤로 건너뛰기

    # 단어 단위로 이동

    w                # 한 단어 오른쪽으로 이동
    b                # 한 단어 왼쪽으로 이동
    e                # 현재 단어의 끝으로 이동

    # 기타 이동 명령어

    gg               # 파일 맨 위로 이동
    G                # 파일 맨 아래로 이동
    :NUM             # 줄 수 NUM(숫자)로 가기
    H                # 화면 꼭대기로 이동
    M                # 화면 중간으로 이동
    L                # 화면 바닥으로 이동

도움말 문서

Vim은 :help <topic> 명령을 통해 접근할 수 있는 도움말 문서를 내장하고 있습니다. 예를 들어, :help navigation 은 당신의 작업 공간을 탐색하는 방법에 대한 문서를 표시합니다!

:help는 옵션 없이도 사용할 수 있습니다. 이는 기본 도움말 대화 상자를 표시합니다. 이 대화 상자는 Vim을 시작하는 것이 보다 용이하도록 도와줍니다.

모드

Vim은 모드의 개념에 기초를 두고 있습니다.

    i                # 커서 위치 앞에서 삽입 모드로 변경
    a                # 커서 위치 뒤에서 삽입 모드로 변경
    v                # 비주얼 모드로 변경
    :                # 실행 모드로 변경
    <esc>            # 현재 모드를 벗어나 명령어 모드로 변경

    # 복사와 붙여넣기

    y                # 선택한 객체 복사(Yank)
    yy               # 현재 줄 복사
    d                # 선택한 객체 삭제
    dd               # 현재 줄 삭제
    p                # 커서 위치 뒤에 복사한 텍스트 붙여넣기
    P                # 커서 위치 앞에 복사한 텍스트 붙여넣기
    x                # 현재 커서 위치의 문자 삭제

vim의 ‘문법’

Vim의 명령어는 ‘서술어-수식어-목적어'로 생각할 수 있습니다.

서술어 - 취할 동작 수식어 - 동작을 취할 방식 목적어 - 동작을 취할 객체

'서술어’, ‘수식어’, ‘목적어'의 예시는 다음과 같습니다.

    # '서술어'

    d                # 지운다
    c                # 바꾼다
    y                # 복사한다
    v                # 선택한다

    # '수식어'

    i                # 안에
    a                # 근처에
    NUM              # (숫자)
    f                # 찾아서 그곳에
    t                # 찾아서 그 앞에
    /                # 문자열을 커서 뒤로 찾아서
    ?                # 문자열을 커서 앞으로 찾아서

    # '목적어'

    w                # 단어를
    s                # 문장을
    p                # 문단을
    b                # 블록을

    # 예시 '문장' (명령어)

    d2w              # 단어 2개를 지운다
    cis              # 문장 안을 바꾼다
    yip              # 문단 안을 복사한다
    ct<              # 여는 괄호까지 바꾼다
                     # 현재 위치에서 다음 여는 괄호까지의 텍스트를 바꾼다
    d$               # 줄 끝까지 지운다

몇 가지 트릭

    <!--TODO: Add more!-->
    >                # 선택한 영역 한 칸 들여쓰기
    <                # 선택한 영역 한 칸 내어쓰기
    :earlier 15m     # 15분 전의 상태로 되돌리기
    :later 15m       # 위의 명령어를 취소
    ddp              # 이어지는 줄과 위치 맞바꾸기 (dd 후 p)
    .                # 이전 동작 반복
    :w !sudo tee %   # 현재 파일을 루트 권한으로 저장
    :set syntax=c    # 문법 강조를 'C'의 것으로 설정
    :sort            # 모든 줄을 정렬
    :sort!           # 모든 줄을 역순으로 정렬
    :sort u          # 모든 줄을 정렬하고, 중복되는 것을 삭제
    ~                # 선택된 텍스트의 대/소문자 토글
    u                # 선택된 텍스트를 소문자로 바꾸기
    U                # 선택된 텍스트를 대문자로 바꾸기

    # 텍스트 폴딩
    zf               # 선택된 텍스트 위치에서 폴딩 만들기
    zo               # 현재 폴딩 펴기
    zc               # 현재 폴딩 접기
    zR               # 모든 폴딩 펴기
    zM               # 모든 폴딩 접기
    zi               # 폴딩 접기/펴기 토글
    zd               # 접은 폴딩 삭제

매크로

매크로는 기본적으로 녹화할 수 있는 동작을 말합니다. 매크로를 녹화하기 시작하면, 끝날 때까지 모든 동작과 명령어가 녹화됩니다. 매크로를 호출하면 선택한 텍스트에 대해 정확히 같은 순서의 동작과 명령어가 실행됩니다.

    qa               # 'a'라는 이름의 매크로 녹화 시작
    q                # 녹화 중지
    @a               # 매크로 실행

~/.vimrc 설정

.vimrc 파일은 Vim이 시작할 때의 설정을 결정합니다.

다음은 ~/.vimrc 파일의 예시입니다.

" ~/.vimrc 예시
" 2015.10

" vim이 iMprove 되려면 필요
set nocompatible

" 자동 들여쓰기 등을 위해 파일 명으로부터 타입 결정
filetype indent plugin on

" 신택스 하이라이팅 켜기
syntax on

" 커맨드 라인 완성 향상
set wildmenu

" 대문자를 썼을 때가 아니면 대소문자 구분하지 않고 검색
set ignorecase
set smartcase

" 줄넘김을 했을 때 파일에 따른 들여쓰기가 켜져 있지 않다면
" 현재 줄과 같은 들여쓰기를 유지
set autoindent

" 좌측에 줄 번호 표시
set number

" 들여쓰기 설정 (개인 기호에 따라 변경)

" 탭 하나와 시각적으로 같을 스페이스 개수
set tabstop=4

" 편집할 때 탭 하나에 들어갈 스페이스 수
set softtabstop=4

" 들여쓰기 혹은 내어쓰기 작업(>>, <<)을 했을 때 움직일 스페이스 개수
set shiftwidth=4

" 탭을 스페이스로 변환
set expandtab

" 들여쓰기와 정렬에 자동 탭 및 스페이스 사용
set smarttab

참고 자료

(영어) Vim 홈페이지

$ vimtutor

(영어) vim 입문과 기초

(영어) 엄마가 말해주지 않은 Vim의 어두운 구석들 (Stack Overflow 게시물)

(영어) 아치 리눅스 위키


제안이 있으세요? 아니면 실수를 찾으셨어요? GitHub에서 issue 또는 pull request를 만드세요

원작자는 RadhikaG, 그리고 4 기여자들 수정했다