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*$/d
or: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 -
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?]
-
:new
will create a split window with an unnamed buffer. -
:enew
will open one in the current window. -
:vnew
will open one in a vertically split window. -
:tabnew
will 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_DISPLAY
is set) - xclip (if
$DISPLAY
is set) - xsel (if
$DISPLAY
is set) - lemonade (for SSH) https://github.com/pocke/lemonade
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
- win32yank (Windows)
- tmux (if
$TMUX
is 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