Vi
VIM 명령어 단축키 VIM 이동 단축키
vi(브이아이, /ˈviːˈaɪ/)는 Emacs와 함께 유닉스 환경에서 가장 많이 쓰이는 문서 편집기이다. 1976년 빌 조이가 초기 BSD 릴리즈에 포함될 편집기로 만들었다. vi라는 이름은 한 줄씩 편집하는 줄단위 편집기가 아니라 한 화면을 편집하는 비주얼 에디터(visual editor)라는 뜻에서 유래했다. 간결하면서도, 강력한 기능으로 열광적인 사용자가 많다.
현재는 오리지널 vi를 사용하는 경우는 거의 없고, 일반적으로 기능을 모방하여 만들어진 클론을 사용하고 있다. 이런 클론 중 많이 쓰이는 것은 기능이 다양한 것을 장점으로 내세우며, 리눅스 배포판에 포함되는 Vim, 그리고, BSD 라이선스로 제공되며 원본 vi의 동작과 호환성으로 정평이 나 있는 nvi, 독자적인 팬층을 확보한 elvis등이 있다.
How to install
Category
- Vim:Debugging: vim debugging 방법.
- Vim:AutoCmd: autocmd 사용 방법.
- Vim:Buffer: Buffer 사용 방법.
- Vim:Marks: Marks 사용 방법.
- Vim:Menu: GUI menu 사용 방법.
- Vim:Shortcut: VIM 단축키에 관련된 내용.
- Vim:Whitespace: 공백과 관련된 내용.
- Vim:Configure: VIM 설정과 관련된 내용.
- Vim:Plugin: 플러그인 정리.
- Vim:Registers: 레지스터 관련 내용 정리.
- Vim:Script: VIM Script.
- Vim:Python: VIM Python Feature.
- Vim:Colorscheme
- Vim:Netbeans
- Vim:KeyMapping
- Vim:Regex
- Vim:Quickfix
- Vim:Dictionary
- Vim:Terminal
- Vim:JobControl (Neovim RPC)
- vim.js: JavaScript port of Vim.
- Neovim
- vimdiff
- Opm:Vim:Legacy - opm에서 과거에 사용했던 설정들.
- ideaVim
- Vim Online Editor - WebAssembly를 이용해서 브라우저에서 VIM을 그대로 실행
- LunarVim
Example
간단한 사용방법에 대하여 정리한다.
- Visual Mode
-
<C-v>또는<C-q>
-
-
>,<: (Visual Mode 에서) 틀여쓰기 넣기 & 빼기 (블록을 지정하여 사용하면 된다). -
=: (Visual Mode 에서) 자동정렬. -
<C-a>,<C-x>: (Visual Mode 에서) 수치 증가/감소. -
u,U,~: (Visual Mode 에서) 소문자, 대문자, 반전.
-
u: Undo -
<C-r>: Redo
-
#,*: 현재 커서의 단어를 뒤로/앞으로 찾기.
-
:jumps: 점프 목록을 본다. -
ctrl-i: goes forward in jump list -
ctrl-o: goes back in jump list
-
:bp: 이전 버퍼로 이동. -
:bn: 다음 버퍼로 이동. -
:ls: 버퍼 목록 출력. -
:ls!: 버퍼 목록 출력. (Unlisted된 버퍼도 출력한다)
-
qa: a 레지스터에 매크로 입력 시작. -
q: (매크로 입력중일 경우) 레지스터에 매크로 입력 종료. -
3@a: a 레지스터의 매크로를 3회 사용.
-
:marks: 마킹 목록을 출력. -
mA: 마킹하기. 전역 마킹은 대문자(A ~ Z)를 사용하고 지역마킹은 소문자(a ~ z)를 사용한다. -
:delmarks A: 마킹 제거. 제거할 마킹을 나열할 수 있다. -
`A: 마킹된 위치로 이동. -
'A: 마킹된 위치로 이동. -
``: 직전(마지막) 커서로 이동. -
'': 직전(마지막) 커서로 이동. -
`.: 직전(마지막) 수정 위치로 커서로 이동.
-
"ayy,"ap: a 레지스터에 복사/붙여넣기. 레지스터는 a ~ z 까지 총 26개 존재한다. -
<C-R>": 명령행 모드에서 사용할 경우, 기본 레지스터의 내용을 붙여넣는다. ("대신 a ~ z 를 사용하면 해당 레지스터를 사용한다.)
-
z<CR>,zt: 현재 행을 화면의 맨위로 이동 -
z.,zz: 현재 행을 화면의 중앙으로 이동 -
z-,zb: 현재 행을 화면의 최하단으로 이동 -
ctrl-f: Scroll forward one screen. -
ctrl-b: Scroll back one screen. -
ctrl-u: Scroll up one half of a screen. -
ctrl-d: Scroll down one half of a screen. -
ctrl-y: Scroll forward one line. -
ctrl-e: Scroll back one line.
object-motions)-
H: 커서를 화면 맨 위로 이동 -
M: 커서를 화면 중안으로 이동 -
L: 커서를 화면 최하단으로 이동 -
]]: 다음 구절의 처음으로. -
[[: 이전 구절의 처음으로 -
][: -
[]: -
[{: 열기 브레이스(Open Brace;{)로 이동. -
]}: 닫기 브레이스(Close Brace;})로 이동. -
%: Pair가 되는 브레이스로 이동.
-
dd: 현재 커서가 있는 라인 제거. -
dw: 현재 커서 부터 시작하여 1워드 제거. (공백 포함, 커서 뒷 부분은 지워지지 않음) -
diw: 현재 커서가 위치한 1워드 제거 (공백 미포함) -
daw: 현재 커서가 위치한 1워드 제거 (다음 단어까지의 공백 포함).
-
<C-w>h: 왼쪽 창으로 커서 이동 -
<C-w>j: 아래쪽 창으로 커서 이동 -
<C-w>k: 위쪽 창으로 커서 이동 -
<C-w>l: 오른쪽 창으로 커서 이동 -
<C-w>w: 창을 순차적으로 이동 -
<C-w>W: 창을 역순으로 이동
:help window-moving)-
<C-w>r: 이것은 창을 회전시킵니다 (첫 번째 창이 두 번째 창이 되고 두 번째 창이 세 번째 창이 되는 등). -
<C-w>x: 현재 창을 다음 창으로 교체. -
<C-w>H: 이 창을 맨 왼쪽으로 이동. -
<C-w>K: 이 창을 맨 위로 이동.
-
<C-w>[N]-: N만큼 창의 행 감소 -
<C-w>[N]=: N만큼 창의 행 증가 -
<C-w>[N]<: N만큼 창의 열 감소 -
<C-w>[N]>: N만큼 창의 열 증가
-
<C-z>: Shell로 빠져나간다. 정확히 표현하면 vi를 Background로 보낸다. fg명령을 사용하면 다시 돌아올 수 있다.
-
:map: 현재, 바인딩 된 키맵(Key-map) 목록을 출력한다. -
:f,<C-g>: 현재 파일 정보를 출력한다. -
q:: 명령행 모드의 히스토리 창(Window)을 연다. -
Q: ":"명령을 연속적으로 입력할 수 있는 Ex-mode로 들어간다. 빠져나가기 위해:visual를 입력하면 된다.
-
C-]: Jump tag. (or alternative keysCR) -
C-T: Prev tag. (or alternative keysBS) -
C-O: 이전 커서 위치로. -
C-I: 다음 커서 위치로.
- 참조 (추천) vim 자동완성 기능 사용하기 - 기계인간 John Grib
-
C-p -
C-n -
C-x: insert 모드에서만 지원하는 자동완성 기능이다.
-
gd: will take you to the local declaration. -
gD: will take you to the global declaration. -
g*: search for the word under the cursor (like , but g on 'rain' will find words like 'rainbow'). -
g#: same as g* but in backward direction. -
gg: 첫 번째 라인으로. -
G: 마지막 라인으로. -
gf: will go to the file under the cursor -
g]: and other commands will jump to a tag definition (a tag can be a function or variable name, or more).
-
:echo @%: Print file path (relative) -
:echo expand('%:p'): Print file path (absolute)
-
:%!xxd: HEX모드로 본다. -
:%!xxd -r: 일반 TEXT모드로 본다.
Settings
-
:help vimrc - vimrc 파일에 대한 HELP Manual.
-
:!echo $VIMRUNTIME - Vim 설치경로 확인.
-
:colorscheme [테마이름] - 테마를 변경한다. 테마 목록은
colors디렉터리를 확인하면 된다.
-
:help feature-list - 특성 목록을 출력한다.
has()를 사용하여 사용여부를 확인할 수 있다.
-
:help expr-env:help expression-syntax - 변수 확인
-
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<:set list - 특수문자(공백 등)을 다른 문자로 대체한 후 출력한다. 1
-
:set scrolloff=n - 스크롤시 n개 라인수 만큼 여유를 둔다.
-
:set cursorline:set cursorcolumn - 현재 커서의 라인과 컬럼을 강조한다.
-
:set filetype={원하는파일타입} - 현재 버퍼의 파일 타입 설정.
- 예를 들면 빈 버퍼를 열고
:set filetype=python라고 하면 파이썬 파일로 인식한다.
-
:let mapleader="," - LEADER KEY를 설정한다.
-
:echo mapleader - LEADER KEY를 출력한다.
-
:e ++enc=인코딩 - 현재 파일 인코딩 변경. (출력을 이걸로 한다)
- 이 후,
set fileencoding=utf-8라고 입력하면 현재 파일의 character set 을 해당 fileencoding 으로 간주한다. (파일을 수정함) -> iconv로 대체 가능.
Basic search and replace
-
:%s/foo/bar/g - Find each occurrence of 'foo' (in all lines), and replace it with 'bar'.
-
:s/foo/bar/g - Find each occurrence of 'foo' (in the current line only), and replace it with 'bar'.
-
:%s/foo/bar/gc - Change each 'foo' to 'bar', but ask for confirmation first.
-
:%s/\<foo\>/bar/gc - Change only whole words exactly matching 'foo' to 'bar'; ask for confirmation.
-
:%s/foo/bar/gci - Change each 'foo' (case insensitive) to 'bar'; ask for confirmation.
- This may be wanted after using :set noignorecase to make searches case sensitive (the default).
-
:%s/foo/bar/gcI - Change each 'foo' (case sensitive) to 'bar'; ask for confirmation.
- This may be wanted after using :set ignorecase to make searches case insensitive.
-
:%s/^M//g -
^M는 CR(캐리지리턴)이다. 주의할 점은 문자 그대로 타이핑 하면 안되고 Ctrl+V와 Ctrl+M을 입력해야 한다.
-
:g/profile/d - 패턴("profile") 이 있는 줄 제거.
-
:v/profile/d - 패턴("profile") 이 없는 줄 제거.
-
:g!/^\s*"/d - 패턴이 포함되지 않는 줄 제거.
-
:g/^\s*$/dor:v/\S/d - 공백이 있는 빈 줄 제거.
-
:s/_\([a-zA-Z0-9]*\)/\u\1/g - 스네이크 케이스 (Snake case)로 된 글자를 파스칼 케이스 (Pascal case)로 변환.
-
:%s/aaa/bbb/e - 검색 패턴이 실패하면 오류 메시지를 발행하지 말고, 특히, 오류가 발생하지 않은 것처럼 계속 진행. 이는 Pipe(
|)로 연결할 때 유용하다.- ex -
:%s/aaa/bbb/e | %s/111/222/e
- ex -
-
:%s/pattern/\U&/g - 매칭된 전체 문자열(
&)을 대문자로 만든다.
Information
-
:scriptnames - 현재, LOAD된 vim 스크립트 목록을 출력한다.
-
:function - 사용 가능한 함수 목록
-
:command - 사용 가능한 명령 목록
-
:map,:vmap - 사용 가능한 Key map 목록
-
:messages - 메시지 히스토리 출력.
-
:version -
vim --version과 같이 추력된다. Features 항목에 컴파일시 함께 설치된 Runtime plugin 목록이 출력된다.
-
:checkhealth - vim의 상태를 점검한다. Python 설치여부 등 또는 설정파일의 에러를 점검할 수 있다.
-
health#provider#check항목에서 Provider (e.g. python, ruby, node) 상태를 점검할 수 있다.
-
:NeoBundleList - NeoBundle로 설치된 전체 플러그인 목록을 출력한다.
abbreviate
축약어(abbreviation)를 등록할 수 있다.
- insert, command-line 모드에서만 작동하는 일종의 자동 완성 기능.
- abbr: insert, command-line 모드 양쪽에서 작동.
- iabbr: insert 모드에서만 작동
- cabbr: command-line 모드에서만 작동
- 이러면 너무 짧아서 헷갈릴 수 있으니 나는 :abbr로 사용하고 있다.
Scripting
-
:py {python-code} - Python 코드를 실행할 수 있다.
:py import vim으로 vim 확장을 사용할 수 있다.
Ignorecase find string
간단한 Ignorecase 방법은 \c를 아래와 같이 사용하면 된다.
| pattern | ignorecase | smartcase | matches |
| foo | off | - | foo |
| foo | on | - | foo Foo FOO |
| Foo | on | off | foo Foo FOO |
| Foo | on | on | Foo |
| \cfoo | - | - | foo Foo FOO |
| foo\C | - | - | foo |
Select area command
선택영역에 한정된 명령(문자열 치환 등)을 사용하고 싶을 경우 VisualMode에서 :를 사용하여 명령어를 입력할 경우 아래와 같이 출력된다.
이 때 입력한 명령은 선택된 영역에 한정되어 작동한다.
현재 커서의 단어
expand("<cword>")
MACRO
a 부터 z까지 레지스터를 지정할 수 있다. 매크로 등록은 아래와 같다.
매크로 실행은 아래와 같다.
So, the complete process looks like:
qd start recording to register d
... your complex series of commands
q stop recording
@d execute your macro
@@ execute your macro again
JUMP
- Stackoverflow: What is the difference between CTRL-T and CTRL-O in Vim?
- wikia - Jumping to previously visited locations
-
CTRL-T: is working with tags stack. -
CTRL-O: is working with jumplist. -
Ctrl-O: to jump back to the previous (older) location. -
Ctrl-I: (same as Tab) to jump forward to the next (newer) location.
Buffers
- [Stackoverflow - Vim: How do you open another No Name buffer like the one on startup?]
-
:newwill create a split window with an unnamed buffer. -
:enewwill open one in the current window. -
:vnewwill open one in a vertically split window. -
:tabnewwill open one in a new tab.
Sorting
-
:sort - 정렬
-
:%sort! - 역방향 정렬
-
:%sort u - Remove duplicate lines
-
:sort n - Numeric sort
키맵을 스크립트로
feedkeys 함수를 사용하면 된다.
또한 특수 키를 포함하려고 싶다면 큰 따옴표와 "\..." 표기법을 사용하면 된다.
예제:
여러 명령을 한 줄로
파이프(|)로 연결하면 된다.
메뉴얼은 다음 명령으로 확인:
Simple settings
set hlsearch " 검색어 하이라이팅
set nu " 줄번호
set autoindent " 자동 들여쓰기
set scrolloff=2
set wildmode=longest,list
set ts=4 "tag select
set sts=4 "st select
set sw=1 " 스크롤바 너비
set autowrite " 다른 파일로 넘어갈 때 자동 저장
set autoread " 작업 중인 파일 외부에서 변경됬을 경우 자동으로 불러옴
set cindent " C언어 자동 들여쓰기
set bs=eol,start,indent
set history=256
set laststatus=2 " 상태바 표시 항상
"set paste " 붙여넣기 계단현상 없애기
set shiftwidth=4 " 자동 들여쓰기 너비 설정
set showmatch " 일치하는 괄호 하이라이팅
set smartcase " 검색시 대소문자 구별
set smarttab
set smartindent
set softtabstop=4
set tabstop=4
set ruler " 현재 커서 위치 표시
set incsearch
set statusline=\ %<%l:%v\ [%P]%=%a\ %h%m%r\ %F\
" 마지막으로 수정된 곳에 커서를 위치함
au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "norm g`\"" |
\ endif
" 파일 인코딩을 한국어로
if $LANG[0]=='k' && $LANG[1]=='o'
set fileencoding=korea
endif
" 구문 강조 사용
if has("syntax")
syntax on
endif
" 컬러 스킴 사용
colorscheme jellybeans
Clipboard tool
작동하는 클립 보드 도구가 있으면 +및 *레지스터가 암시 적으로 활성화됩니다. 이는 yank 를 할 때 전역 클립보드로 복사할 수 있는 기능이다. Nvim은 우선 순위에 따라 다음 클립 보드 도구를 찾습니다.
-
g:clipboard - pbcopy, pbpaste (macOS)
- wl-copy, wl-paste (if
$WAYLAND_DISPLAYis set) - xclip (if
$DISPLAYis set) - xsel (if
$DISPLAYis set) - lemonade (for SSH) https://github.com/pocke/lemonade
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
- win32yank (Windows)
- tmux (if
$TMUXis set)
Use the clipboard
-
"+Y: 클립보드에 현재 라인을 복사. -
"+gP: 클립보드로부터 텍스트를 붙여넣고, 붙여넣은 위치 뒤로 커서 이동.
아래와 같이 키맵을 사용할 수 있다.
스크롤 동기화
다국어 지원 같이, 동일한 위치(라인 넘버)의 텍스트를 수정할 때 유용한다.
세로로 분할 :vs한 후 다음 명령을 동기화 시킬 버퍼에 각각 입력하면 된다.
이 때, 자동 개행 옵션은 끄는편이 좋다.
Colors
- Stackoverflow - Vim: Difference between t_Co=256 and term=xterm-256color in conjunction with TMUX
- 256 colors in vim | Vim Tips Wiki | Fandom
- Using GUI color settings in a terminal | Vim Tips Wiki | Fandom
t_Co
t_Co옵션 (&t_Co)은 Vim이 호스트 터미널에서 표시 할 수 있는 최대 색상 수로 간주하는 값입니다.
terminfo의 $TERM 값에 따라 다음과 같이 정의된다:
| | |
| 8 | |
| 256 | |
| 8 | |
| screen-256color | 256 |
Vim이 시작되면 TERM환경 변수 의 값을 가져와 해당 값으로 terminfo데이터베이스를 쿼리 하고 환경에 대한 많은 정보를 여러 t_...변수 에 저장합니다.
참고로 이 값이 88일 경우는 xterm-88color 항목 참조.
TIP
Vim messages to buffer
vim 에서 출력되는 메시지를 버퍼에 붙여넣는 방법은 다음과 같다. Q를 누르면, ex 모드로 전환된다.
:visual 명령으로 Ex 모드에서 Visual 모드로 전환한다. 후, :e messages.txt 명령으로 해당 파일을 열면 된다.
PS. 명령이 캡쳐되는 동안 화면에 출력을 억제하고 싶다면 :messages 대신 :silent messages를 사용하면 된다.
Replace newline
Newline(Enter)를 Replace 문자열로 적용하고 싶을 경우 아래와 같이 나와야 한다.
여기에서 ^M는 Ctrl + v후, Enter를 입력하면 된다.
개행(\n)이 ^@ 문자로 치환될 때
와 같이 사용했을 때 개행(\n)이 ^@ 문자로 치환된다.
결론, \n 대신 \r 를 사용하면 된다.
ALT 키 바인딩
Ctags tselect
Ctrl+]가 정상적으로 작동하지 않을 경우 아래와 같이 다른 키 맵으로 사용할 수 있다.
참고로 <C-R>=expand("<cword>")<CR><CR>는 현재 커서에 위치한 단어로 치환하라는 의미이다.
Print current file
현재 파일명을 출력하는 방법은 아래와 같다.
Shell setting
Print built-in key & maps
기본 단축키는 아래와 같이 확인할 수 있다.
Map 목록은 아래와 같다.
Unused keys
<Plug>
- Stackoverflow - Execute <Plug> commands in vim
- neovim - What does <Plug> do in vim? - Vi and Vim Stack Exchange
이것은 플러그인 작성자가 복잡한 매핑을 사용자가 사용할 수 있도록 하는 데 사용됩니다. 플러그인 코드에서는 <plug>...실제 키 시퀀스가 아니지만 사용자가 매핑에서 오른쪽 표현식으로 사용할 수 있는 매핑을 정의합니다.
<Plug> 명령을 실행하는 방법은 다음과 같다:
자세한 내용은 :h using-<Plug>으로 확인 가능하다.
Quick command in insert mode
CTRL-O 또는 CTRL-\ CTRL-O(:help ins-special-special 참조)를 사용하여 삽입 모드를 종료하지 않고 일반 모드 명령을 실행할 수 있습니다.
주로 inoremap에서 노멀모드 명령을 사용할 때 사용된다.
명령행에서 'More' 없이 스크립트 또는 명령 실행 방법
NeoBundle의 bin/neoinstall 스크립트를 참조.
vim의 경우:
ARGS=(
-N # No-compatible mode
-u "$HOME/.vimrc"
-c "try | NeoBundleUpdate! | finally | qall! | endtry"
-U NONE # GUI initializations
-i NONE # viminfo file
-V1 # Verbose level 1
-e # Start Vim in Ex mode
-s # Silent mode
)
vim "${ARGS[@]}" 2>&1 | grep -v "^not found in"
neovim의 경우:
ARGS=(
-u "$HOME/.config/nvim/init.vim"
-c "try | UpdateRemotePlugins | finally | qall! | endtry"
-V1
-es
)
nvim "${ARGS[@]}" 2>&1 | grep -v "^not found in"
전체 Keymap 확인하는 방법
- Is there any way to view the currently mapped keys in Vim? - Stack Overflow
- vimrc - Redirect output of vim command into the vim buffer - Vi and Vim Stack Exchange
- Is there a way to pipe the output of :nmap to a file in vim? - Stack Overflow
다음 방법으로 확인 가능:
Vim 의 messages 로 출력되므로 검색하기가 곤란하다. 그래서 redir!명령(Redirection)을 사용하여 파일로 저장한다:
뭔가 불편하다. 직접 버퍼로 적고 싶다면 put명령을 사용하면 된다.
:silent put =execute('map')
:silent put =execute('nmap')
:silent put =execute('imap')
:silent put =execute('vmap')
슬래시(/)를 키맵으로 사용하고 싶을 때
붙여 넣기 계단 현상 없애는 방법
붙여 넣기 모드로 이동:
붙여 넣기 모드 해제:
붙여 넣기 모드 토글 단축키:
Troubleshooting
VIM을 사용하는 중 발생할 수 있는 문제점에 대하여 설명한다.
E21: Cannot make changes, 'Modifiable' is off
.vimrc에 아래를 추가하면 된다.
E474: Invalid argument
아래와 같은 에러메시지가 출력될 수 있다.
이 경우 .vimrc와 같은 스크립트 파일의 인코딩을 정상적으로 설정해야 한다.
Font setting
- 한글을 사용하는 프로그래머를 위한 폰트
- Vim에서 글씨체 변경하기 + 프로그래머를 위한 폰트
- 윈도의 gVim의 한글 폰트 설정 문제 2
- Typeface#Developer_favorite_font
How do I make vim with netbeans_intg
See: Vim:Netbeans#How_do_I_make_vim_with_netbeans_intg
gVim GUI Setting
Ubuntu에서 GUI 폰트가 정상적으로 적용되지 않아 이상하게 보일 수 있다. 이 때 아래와 같이 설정하면 된다.
if has('gui_running')
set guioptions-=T " no toolbar
colorscheme elflord
set lines=60 columns=108 linespace=0
if has('gui_win32')
set guifont=DejaVu_Sans_Mono:h10:cANSI " 이 방식은 Windows에서만 가능하다.
else
set guifont=DejaVu\ Sans\ Mono\ 10
endif
endif
VIM 한글화
Download: Vim-ko-master-_4ef19e0.zip
See also
Favorite site
- vim web site
- Wikipedia (ko) Vi에 대한 설명
- vi - 엔하위키미러
- Viper Wiki: Vim 팁
- vi 입문 - 컨닝 페이퍼 이용하기
- [추천] VIM을 사용하자 2
- Vim tips: Using viewports
- Vim 편집기로 스크립트 작성하기
- Creating your own syntax files
- Vim Tab Madness. Buffers vs Tabs
- 유닉스의 숨결 – 파워 에디터 vi
Cheat Sheet
Documentation
Tutorial
- Vim 시작하기
- Linux vi and vim editor: Tutorial and advanced features
- [추천] Vim 사용방법 3
- [추천] Vi (Vim) Editor (TIP) 4
- [추천] Use Vim like an IDE
- [추천] vim-ko - 빔 편집기 한글화
- Learn Vimscript The Hard Way 5
- [추천] 'tools/vim' 카테고리의 글 목록 - 챕터별 한글 정리
Guide
- [추천] Practical Vim 팁 요약 시리즈 - grep and vimgrep
- [추천] Practical Vim 2판 정리 페이지
- Vim 텍스트 개체: 궁극의 가이드
- (번역) Vim의 탭은 그렇게 쓰는 게 아니다. 버퍼와 탭의 사용법
- Profiling Vim