Vim(빔) 단축키, 명령어 한 번에 끝내기
Vim(Vi Imporved)은 Vi 에디터의 향상된 버전으로, 강력한 텍스트 편집 기능을 제공하는 터미널 기반 텍스트 편집기입니다. 프로그래머와 시스템 관리자들이 많이 사용하며, 빠른 키보드 조작과 강력한 편집 기능으로 유명합니다.
Vi와 호환이되면서 멀티탭, 화면분할, 스니펫, 검색기능, 멀티 언어지원, UI색상, 플러그인 (ex, NerdTree, FZF, Youcompleteme) 등 다양한 기능이 추가되었습니다.
특히, 코드나 텍스트를 편집하면서 마우스를 자주 사용하는 경우에 마우스를 쥐었다가 키보드로 갔다가 상당히 불편합니다. 그래서 키보드 내에서 다 해결할 순 없을까? 생각을 하죠.. 노트북을 사용하는 경우에도 비슷한 상황이 생기고요. 그래서 처음에는 적응하는 데 시간도 걸리고 어렵게 느껴질 수도 있지만 그럼에도 많은 개발자들이 애용한다고 생각합니다.
특히 VScode에서도 플러그인을 통해 유사한 환경을 이용할 수 있기때문에 터미널 기반으로 작업하지 않아도 익숙해지면 상당히 유용합니다. 이 글에서도 VScode의 플러그인 기준으로 작성하였지만, 거의 대부분의 기능이 동일하게 동작하기때문에 큰 문제는 없을 거라고 생각합니다.
맥에서는 기본적으로 vim이 설치되어있고, 터미널에서 vimtutor 명령어로 빠르게 학습도 가능합니다.
이 글에서는 키보드의 위치를 기준으로 vim 사용에 필요한 대부분의 기능을 설명하려합니다.
고급 커스텀 기능들을 제외하고는 아래의 내용만 익혀둬도 기본적인 텍스트 작업에는 문제 없을 것이라고 생각합니다.
단축키
ESC : 명령모드로 이동합니다.
키보드 순 (qwer~asd~zxc)
(vim에서는 대문자와 소문자를 구별합니다.)
q
매크로 기능 (recording)
ex) q1 을 누른 후 작업을 처리하고 q키를 눌러서 종료, 그 후에 @1로 이전에 기록해두었던 작업을 다시 실행할 수 있음. 물론 qa처럼 문자도 가능
:reg
:registers
현재 기록되어있는 매크로들 확인 가능
:resgister 1
1번에 기록되어있는 매크로 확인 가능
기록되어있는 매크로를 삭제하려면 vimscript 명령어
:let @a=""
로 비울 수 있지만 간단하게 @1로 저장된 매크로를 지우려면 q1q를 누르면 빈 매크로로 덮어씌울 수 있다.
w
단어 (word) 단위 이동
다음 단어 첫 글자로 커서 이동
중간에 . " 등 특수문자도 하나의 단어 경계로 인식되어 app.com 의 a부분에서 w를 눌러도 c가 아닌 .에서 멈춤.
활용 예
3w 세 번째 단어의 첫부분으로 이동
vw (비주얼모드) 현재 위치부터 다음 단어 첫부분까지(포함) 선택
dw 현재 위치부터 다음 단어 시작 전까지(포함x) 삭제
cw 현재 위치부터 다음 단어 시작 전까지(포함x) 변경 (삭제 후 입력 모드 전환)
yw 현재 위치부터 다음 단어 시작 전까지(포함x) 복사 (yank)
W
공백을 기준으로 이동
ex)
Hello-world Example.txt
에서 H에 현재 커서가 있다면 w는 -로 이동, W는 E로 이동함.
그외에는 w와 동일
e
(end)
w와 유사하지만, 단어의 끝으로 간다는 점이 다릅니다.
현재 단어의 끝 부분으로 이동, 현재 커서가 단어의 끝이라면 다음 단어의 끝 부분으로 이동.
E
대문자 W와 마찬가지로 공백을 기준으로 단어를 구분해서 단어의 끝부분으로 이동합니다.
r
(replace) 한 글자를 치환합니다. 치환 후에는 normal mode로 돌아갑니다.
수정을 원하는 글자에 커서를 놓고 r<문자>를 입력하면 됩니다.
활용 예
3rq
현재 커서부터 3개의 글자를 q로 바꿉니다.
R
한컴의 수정모드를 써보신 분들은 아시겠지만, R키를 누르면 REPLACE MODE가 활성화 됩니다.
입력하는 글자가 새로 추가되는 것이 아니라 기존의 글자 위에 덮어씌워집니다.
여러 문자를 수정할때 사용합니다.
backspace 가능
예를 들어 123을 abd로 치환했는데 abc를 입력하고자 한다면 백스페이스를 눌러서 취소 가능합니다.
백스페이스를 입력하면 다시 ab3이되고 다시 c를 입력해서 원하는 대로 덮을 수 있습니다.
t
(till)
t<문자>를 입력해서 해당 문자 앞까지 커서를 이동합니다.
현재 줄 내에서만 수행하기 때문에 현재 줄에 없는 문자를 입력하면 아무 일도 일어나지 않습니다.
abcdef 라는 문자열에서 커서가 a에 있을 때 tc를 입력하면 b로 이동합니다. 커서가 b보다 뒤쪽에 있는 경우에는 더 이상 c가 없기때문에 이동하지 않습니다.
T
대문자 T도 소문자t와 동일합니다만 방향이 반대입니다.
위의 예와 마찬가지로 abcdef라는 문자열에서 커서가 f에 있을때 Tc를 입력하면 f에서 c방향으로 c 바로 앞 d로 커서가 이동합니다.
y
(yank) 복사입니다. VISUAL 모드에서 선택된 부분을 복사하거나
y<이동명령어>로 해당 부분까지 복사가 합니다.
활용 예
yw 다음 단어 첫 글자 바로 앞까지 복사(공백포함)
yy 현재 줄 복사
y$ 현재 위치부터 줄 끝까지 복사
매크로와 마찬가지로 복사된 부분은 기본적으로 레지스트리에 저장됩니다.
따라서 다른 프로그램에서 ctrl+v로 복사가 안될 수 있습니다.
:reg 의 "가 기본 레지스트리이며 현재 복사되어있는 문구입니다.
:reg + 로 현재 클립보드의 내용도 확인 가능합니다.
[클립보드 사용방법]
"+y
시스템 클립보드에 복사
"+yy
시스템 클립보드에 한 줄 복사
"+p
시스템 클립보드를 붙여넣기
외 에도 옵션 설정을 통해 클립보드를 디폴트로 사용가능합니다.
Y
현재 줄 복사 (=yy)
설정에 따라 기능이 조금 다를 수 있음
u
(undo) 작업 취소 입니다.
일반적으로 우리가 사용하는 ctrl+z랑 유사합니다.
참고로 redo는 ctrl+r로 가능합니다.
U
현재 줄의 모든 변경사항을 되돌리는 기능입니다.
i
(insert) 삽입 기능으로, 입력모드(INSERT)로 전환하는 기능입니다.
현재 커서 앞부분부터 입력모드가 시작됩니다.
I
마찬가지로 입력 모드로 전환합니다.
차이점은 커서가 줄의 첫부분으로 이동합니다.
o
(open below) 현재 커서의 아래에 새로 줄을 추가하고 입력 모드로 전환합니다.
커서도 다음 줄로 이동하기 때문에 바로 새로운 텍스트를 입력할 수 있습니다.
O
(open above) 소문자와 반대로 현재 커서의 위에 새로 줄을 추가하고 입력모드로 전환합니다.
p
(paste) 붙여넣기 기능입니다.
현재 커서의 다음 위치에 레지스트리의 내용을 붙여넣습니다. 커서는 붙여진 내용 뒷부분으로 이동합니다.
yy로 줄 전체가 복사된 경우 붙여넣기를 하면 커서 위치의 다음 줄에 새로운 줄로 문장 전체가 붙여넣기 됩니다.
커서는 문장의 첫부분으로 이동합니다.
P
소문자 p와 동일하지만 차이점은 커서의 앞 부분에 내용을 붙여넣습니다.
a
(append) 추가하기 기능입니다. i와 마찬가지로 입력모드로 전환하는 역할이지만, 시작 위치가 다릅니다.
해당 커서의 뒤 부분부터 입력합니다.
예를들어 are이라는 단어에서 r에 커서가 있다면, i를 누르고 123을 입력하면 a123re가 될 것이고,
a를 누르고 123을 입력한다면 ar123e가 될 것입니다.
A
I가 줄의 맨 앞부분부터 입력모드가 시작되는 기능이었다면, A는 줄의 끝부분부터 텍스트를 추가할 수 있게
커서의 위치와 상관 없이 줄의 맨 끝 부분부터 입력모드가 시작됩니다.
s
(substitute)
현재 커서의 글자를 삭제하고 입력모드로 전환
S
현재 줄을 삭제하고 입력모드로 전환 (=cc)
d
(delete)
방향(모션) 명령과 함께 사용하는 삭제 기능
활용 예)
dd 현재 줄 삭제
d$ 커서 위치부터 줄 끝까지 삭제 (커서 포함)
d0 커서 위치부터 줄 시작까지 삭제 (커서 포함x)
dG 커서 위치 줄(포함)부터 파일 끝까지 삭제
dgg 커서 위치 줄(포함)부터 파일 시작까지 삭제
D
커서 위치부터 줄 끝까지 삭제 (d$)
f
(find)
f<문자>를 입력하여 해당 문자위치로 커서를 옮깁니다.
현재 줄에서만 적용되며, 해당 문자가 없을 경우 아무 일도 일어나지 않습니다.
현재 커서의 오른쪽 방향으로만 진행합니다.
F
f와 동일한 기능이며, 방향만 반대입니다.
예를들어 문자열 abcde에서 e에 커서가 있을때 Fb를 입력하면 커서가 b의 위치로 이동합니다.
g
다른 문자들과 함께 사용됩니다.
ex)
gg 파일의 첫 번째 줄로 이동
g; 가장 최근에 수정한 위치로 커서가 이동
gU 대문자로 변환
gu 소문자로 변환
등..
G
(Go to line)
단독으로 사용하면 파일의 마지막 줄로 이동합니다.
숫자와 함께 사용해서 n번째 줄로 이동가능합니다. ex) 30G 30행으로 이동
h
(left) 왼쪽으로 커서를 한 칸 이동합니다.
H
현재 화면의 가장 상단에 있는 줄로 커서를 이동합니다. (L과 반대)
j
(down) 커서를 한 줄 아래로 이동합니다.
J
현재 줄과 다음 줄을 하나로 이어붙입니다.
중간에 자동으로 공백이 추가되어 붙습니다.
ex)
동해물과 백두산이
마르고 닳도록
이라는 문장에서 위의 줄에 커서를 두고 J를 입력하면
동해물과 백두산이 마르고 닳도록
이렇게 이어집니다.
k
(up) 커서를 한 줄 위로 이동합니다.
K
현재 단어에 대한 매뉴얼 (man 명령어)를 표시합니다.
VSCode의 Vim plugin에서는 동작하지 않을 수 있습니다.
l
(right) 커서를 오른쪽으로 한 칸 이동합니다.
L
현재 화면의 가장 하단의 줄로 커서를 이동합니다. (H와 반대)
z
(scroll)
zz 현재 커서 위치를 화면 중앙으로 정렬합니다.
z<enter> 현재 커서를 화면 상단 부에 가도록 스크롤을 조정합니다.
z- 현재 커서를 화면 하단 부로 오도록 스크롤을 조정합니다.
Z
현재 파일을 종료합니다.
ZZ 현재 파일을 저장하고 종료 (= :wq)
ZQ 저장하지 않고 종료 (= :q!)
x
현재 커서 위치에 있는 문자를 삭제합니다.
연속하여 누르면 오른쪽의 글자들이 하나씩 지워지는 것을 알 수 있습니다.
X
현재 커서 앞에 있는 문자를 삭제합니다.
연속하여 누르면 커서 왼쪽의 글자들이 하나씩 지워지는 것을 알 수 있습니다.
c
(change)
현재 커서 위치부터 지정한 범위까지 텍스트를 삭제하고 입력모드로 전환합니다.
활용 예)
cc 현재 줄 전체를 삭제하고 입력모드로 전환
c$ 현재 커서부터(포함) 줄 끝까지 삭제하고 입력모드로 전환
C
줄 끝까지 삭제하고 그 위치부터 입력모드로 전환 (=c$와 동일)
v
(VISUAL MODE) 비주얼모드 혹은 선택 모드로 진입합니다.
텍스트를 선택하는 명령어로 입니다. 마치 마우스로 텍스트를 드래그한 상태를 말합니다.
v를 누른 채로 방향 이동명령을 통해 하나씩 텍스트를 선택할 수도 있고
v$ 나 vgg 처럼 명령어로 범위를 지정할 수 있습니다.
범위 선택 후에는 y(복사), x(삭제) 등의 명령을 수행할 수 있습니다. 후에는 자동으로 일반 모드로 돌아갑니다.
crtl + v은 비주얼 블록 모드 입니다. 아래와 같은 문장에서 3줄 동시에 "줄입니다."를 선택하고 싶을때 유용합니다.
첫 번째 줄입니다.
두 번째 줄입니다.
세 번째 줄입니다.
V
줄 단위로 선택을 합니다.
V를 누른 후 방향 명령어로 위 아래로 이동하면서 선택할 수 있고 마찬가지로 gg와 같은 명령어와 함께 사용도 가능합니다.
b
(back)
현재 커서 이전 단어의 시작점으로 커서를 옮깁니다.
앞에서 본 e와 유사하고 방향이 다릅니다.
현재 단어의 중간에 있으면, 단어의 첫 부분으로
현재 단어의 첫 부분에 있으면 이전 단어의 첫 부분으로 이동합니다.
B
E와 유사하게 공백을 기준으로 단어를 이동합니다.
현재 커서 위치를 기준으로 앞(왼)쪽으로 이동합니다.
n
(next)
검색 기능과 같이 사용되어 다음 검색 결과로 이동합니다.
현재 검색 방향 (검색할 때 사용한 방향)으로 이동하면서 다음 결과로 넘어갑니다.
N
현재 검색한 결과의 반대방향으로 이전 검색 결과로 이동합니다.
m
(mark)
m 뒤에 문자(알파벳,숫자)를 붙여서 커서 위치에 마크를 설정합니다.
지정한 위치는 마크(책갈피, 태그)처럼 활용됩니다.
'문자 로 마크를 지정한 줄로 이동가능하고
`문자 를 입력하면 정확히 마크를 지정한 커서로 이동합니다.
M
화면의 중앙 라인으로 커서가 이동합니다.
특수문자
` (Backtick)
m(마크) 기능과 함께 사용됩니다.
예를들어 `1 를 누르면 1번에 지정되어있는 마크로 이동합니다. (해당 커서로)
맥북에서 ₩로 눌리는 경우 간단하게 해결할 수 있는 방법들이 있지만, option키와 함께 누르면 `로 나옵니다.
`` 이전 커서 위치로 이동
~ (Tilde)
해당 커서의 대소문자를 반전하고 다음 글자로 커서를 옮깁니다.
! (Exclamation mark)
주로 외부명령어, 쉘의 기능을 이용하기 위해 사용합니다.
- :! 형태로 외부 명령어(쉘 명령)을 사용합니다. ex) :! ls
- 비주얼 모드에서 글자를 선택하고 !를 통해 외부 명령어를 실행할 수 있습니다.
ex) !rev 글자 순서를 반대로 변경 - !!키와 함께 현재 줄에 외부명령어 결과를 입력합니다.
ex) !!ls 파일 목록 출력
!!date 현재 날짜 출력
단, 현재 줄의 데이터가 지워지고 그 위에 입력됩니다. - 현재 파일의 내용을 외부명령어로 전달도 가능합니다.
ex) :w !wc -l 현재 파일이 몇 줄인지 출력
@ (At)
@기호와 함께 문자를 입력하여 지정되어 있던 매크로를 사용합니다. (q키 참고)
활용 예)
@@ 가장 마지막에 사용한 매크로를 사용합니다.
<숫자>@<문자> 문자에 저장된 매크로를 n번 실행합니다.
# (Sharp)
현재 커서가 위치해 있는 단어를 역방향(뒤쪽)으로 검색합니다.
#는 정확히 같은 단어만 검색하고
g#는 해당 단어가 포함되어 있는 단어를 모두 검색합니다. n키와 N키로 이동 가능합니다.
(n키는 정방향 이동이기 때문에, 뒤로 검색하는 #에서 n키는 뒤로 가는 방향이 정방향이 됩니다.)
$ (Dollar sign)
$ 현재 줄의 끝으로 이동합니다. ( 0은 현재 줄의 시작으로 이동합니다.)
% (Percent sign)
괄호의 짝을 찾아 커서를 이동해주는 편리한 기능입니다.
괄호가 여러 개 있을 때 물론 에디터에서 색으로 구별해주는 기능도 있지만, 위치가 어디에 있는지 한번에 알 수 없을때가 있습니다.
그럴 때 괄호에 커서를 두고 %를 누르면 해당되는 짝으로 커서가 이동합니다.
hello(arg) 이런식으로 함수가 있다고 가정하면, 함수명 위에서 %를 누르면 인자의 끝 괄호 )로 이동할수도 있습니다.
인자가 복잡하거나, 괄호안에 또 괄호가 있을때 유용하고
d%, y%, v% 등으로 응용해서 지금 괄호부터 다음 괄호까지를 삭제하거나 복사, 선택도 가능합니다.
^ (Carrot)
0와 유사하게 줄의 맨 앞으로 가지만, 공백을 제외한 맨 앞으로 이동합니다.
문장이 탭이나 공백으로 시작할 때 유용합니다.
& (Ampersand)
마지막에 실행한 치환(:s)을 다시 한번 실행합니다.
* (Asterisk)
현재 커서의 단어를 정방향으로 검색합니다.
이전의 #과 정확히 반대되는 기능입니다.
마찬가지로 정확히 일치하는 단어들만 찾습니다.
g*로 해당 단어가 포함된 단어를 모두 검색하는 것도 가능합니다.
( ) { }
소괄호와 중괄호는 유사하기 때문에 한번에 묶어서 이야기하겠습니다.
소괄호는 문장 단위로 이동할때 쓰입니다.
중괄호는 문단 단위로 이동할때 쓰입니다.
( 는 문장의 첫 부분으로 이동하며, 이미 문장의 첫 부분이면 이전 문장의 첫 부분으로 이동합니다.
) 는 다음 문장의 첫 부분으로 이동합니다. 공백은 무시하고 다음 문장의 첫 번째 단어로 이동합니다.
문장의 구분은 . ? ! 를 기준으로 합니다.
{ 는 이전 단락으로 이동합니다.
} 는 다음 단락으로 이동합니다.
기준은 빈 줄을 기준으로 합니다. 커서도 빈 줄 부분으로 이동합니다.
- (Hyphen)
이전 줄로 이동합니다. 커서는 공백이 아닌 첫번째 글자에 위치합니다.
_ (Underscore)
현재 줄의 첫 번째 공백이 아닌 글자로 이동합니다. (^과 거의 동일)
= (Equal)
자동 정렬을 수행합니다.
== 현재 줄 자동정렬
gg=G 파일 전체 정렬
=% 블록 내 정렬
(정렬을 수행하려면 정확한 동작을 위해 파일형식에 대한 설정이 필요합니다.)
+ (plus)
플러스도 하이픈 기호와 유사하지만 다음 줄로 이동합니다. 커서는 공백이 아닌 첫번째 글자에 위치합니다.
+ - 플러스 마이너스 형태라 기억하기 쉽습니다.
[ ]
대괄호는 문장/단락 이동, 코드 블록 탐색, 오류 탐색, 매크로 실행 등 다양한 용도로 사용됩니다.
VScode 확장 vim에서는 일부 동작이 제대로 작동하지 않을 수 있습니다.
\ (Backslash)
커스텀 단축키를 만들 때 사용됩니다.
이스케이프 문자로 이용합니다.
| (Pipe)
특정 열로 이동합니다.
| 또는 1| 첫 번째 열로 이동 (=0)
10| 10번째 글자로 이동. 10열로 이동
여러 개의 명령어를 동시에 입력합니다. 쉘에서 ;의 역할과 동일합니다.
:set number | set cursorline
: (Colon)
명령어 모드를 활성화합니다.
위에서 이미 봤다시피
:wq 등 명령어를 입력할 때 사용됩니다.
; (Semi-colon)
마지막 이동 명령을 반복 실행 (f, F, t ,T) 합니다.
' (Quote)
마크 기능과 함께 쓰입니다. 마크의 첫번째 문자로 이동합니다.
" (Double Quotes)
레지스터에 접근할 때 사용됩니다.
"ap 레지스터 a 내용 붙여넣기
"+p 클립보드(레지스터+) 내용 붙여넣기
< >
들여쓰기 위치를 조정합니다.
>> 한 단계 들여쓰기
<< 한 단계 내어쓰기
비주얼 모드로 선택된 범위에서 > 또는 < 키로 조정가능합니다.
<숫자>와 함께 여러 줄을 한 번에 조정합니다.
, (Comma)
위의 ; 세미콜론과 동일하지만 반대 방향으로 진행합니다.
역시 이동명령(f, F, t, T)를 반복합니다.
. (Period)
가장 최근의 명령을 반복합니다.
단, 이동 명령이 아닌 편집 명령 (삭제, 붙여넣기, 수정 등)을 반복합니다.
/ (Slash)
검색 기능을 수행합니다.
/vim 를 입력해서 vim이 들어간 단어를 검색할 수 있습니다.
n키와 N키를 눌러 검색 결과를 이동할 수 있습니다.
기본적으로 대소문자를 구분하기 때문에 \c를 이용하면 대소문자 구분을 무시할 수 있습니다. ex) /Vim\c
? (Question mark)
슬래시(/)와 동일합니다만 검색 방향이 반대입니다. 즉 뒤에서 앞쪽으로 검색합니다.
n키는 정방향으로 이동하기 때문에 ?로 검색하면 n키가 뒤로 이동하는 방향이 정방향이 됩니다.
ctrl + 명령어
알파벳 순으로 정리했습니다. 모든 명령어를 다 표기하진 않았습니다.
ctrl + a
현재 커서의 숫자를 1 증가
ctrl + b
화면을 한 페이지 위로 스크롤
현재 커서의 화면 내에서의 위치는 변하지 않음. (실제로는 화면이 스크롤 되었으므로 위치는 변함)
예를들어 현재 400번째 줄에 있다면 약 320번째 줄로 이동 (페이지 크기에 따라 다를 수 있음)
ctrl + c 명령모드로 전환 (=esc)
ctrl + d
화면을 반 페이지 아래로 스크롤
(화면 내에서 커서의 위치는 동일, 커서는 이동)
ctrl + e
화면을 한 줄 아래로 스크롤
(화면만 이동, 커서는 이동x)
ctrl + f
화면을 한 페이지 아래로 스크롤 (<-> ctrl+b)
ctrl + g
현재 파일의 상태 정보를 표시합니다.
(:set statusline 명령어로 상태 정보 표시를 커스텀할 수 있습니다.)
ctrl + o
입력모드 중에 명령모드로 이동합니다. 명령 실행 후에는 다시 입력모드로 돌아옵니다.
ctrl + r
(Redo) undo 명령을 다시 되돌립니다.
ctrl + t
ctrl + ] 함수의 정의로 이동합니다.
ctrl + t 이전 위치로 되돌아감.
ctrl + u
화면을 반 페이지 위로 스크롤합니다. (<-> ctrl+d)
ctrl + v
비주얼 블록 (Visual Block) 모드로 진입합니다.
ctrl + w
창 관련 명령을 실행합니다.
자세한 설명은 여기서는 생략합니다.
ctrl+y
화면을 한 줄 위로 스크롤 (<-> ctrl+e)
ctrl + [ 명령 모드로 전환 (=esc)
명령 모드
모든 명령을 다루지는 않습니다. 일부 명령은 터미널에서만 작동합니다.
:<숫자>
n번째 줄로 이동
[파일]
:e 열기 (ex. :e ~/.vimrc)
:e! 파일 다시 불러오기 (변경 내용 무시)
:w 파일 저장
:q 파일 닫기
:q! 강제 종료
:wq 저장 후 종료
:r filename 파일 읽어서 붙이기
[버퍼]
:bd 현재 버퍼 닫기
:bn 다음 버퍼로 이동
:bp 이전 버퍼로 이동
[창]
:vsp 수직 분할 (새 창 열기)
:sp 수평 분할 ( 새창 열기)
[치환]
:s/old/new 현재 줄의 첫 번째 old를 new로 치환합니다.
:s/old/new/g 현재 줄의 모든 old를 new로 치환합니다.
:<숫자>,<숫자>s/old/new/g <숫자>~<숫자>번째 줄의 old를 모두 new로 치환합니다. (g옵션이 없으면 첫번째 단어만)
:.,$s/old/new/g 현재 줄(.)부터 파일의 끝($)까지 old를 new로 치환합니다.
:%s/old/new/g 문서 전체에서 old를 new로 치환합니다.
:%s/old/new/gc 문서 전체에서 모든 old를 new로 치환할 건지 물어봅니다. y(yes), n(no), a(all), q(quit), l(last)로 대답합니다.
:%s/foo|bar/new/g foo 또는 bar를 new로 변경 (|는 OR)
(이 외에도 특정 단어로 시작하는 단어, 끝나는 단어, 기존 단어를 이용하는 방법, 대소문자를 구분 혹은 무시하는 방법 등도 있습니다.)
[정렬]
:left 왼쪽 정렬
:right 40 40칸(열)을 기준으로 오른쪽 정렬
:center 60 60칸(열)을 기준으로 가운데 정렬
:1,5 center 80 1행부터 5행까지를 80칸 기준으로 가운데 정렬
[설정]
설정에 관한 명령어는 굉장히 많기 때문에 여기서는 간단하게 몇가지만 소개하고 넘어가겠습니다.
:set ic 대소문자 구별 안함 (ignore cases)
:set noic 대소문자를 구별함
:set hls 검색시 하이라이트로 표시
:set is 점진적 검색(incremental search)
:set nocp 호환모드 해제 (compatible mode) - 마치 vi처럼 동작