저장 및 종료
명령어 |
설명 |
:w |
저장 |
:w file.txt |
file.txt 파일로 저장 |
:w >> file.txt |
file.txt 파일에 덧붙여서 저장 |
:q |
vi 종료 |
:q! |
Vi 강제 종료 |
ZZ |
저장 후 종료 |
:wq! |
강제 저장 후 종료 |
:e file.txt |
file.txt 파일을 불러옴 |
:e |
현재 파일을 불러옴 |
입력모드 전환
a |
커서 위치 다음 칸부터 입력 |
A |
커서 행의 맨 마지막부터 입력 |
i |
커서의 위치에 입력 |
I |
커서 행의 맨 앞에서부터 입력 |
o |
커서의 다음 행에 입력 |
O |
커서의 이전 행에 입력 |
s |
커서 위치의 한 글자를 지우고 입력 |
cc |
커서 위치의 한 행을 지우고 입력 |
삭제
x, dl |
커서 위치의 글자 삭제 |
X, dh |
커서 바로 앞의 글자 삭제 |
dw |
한 단어를 삭제 |
d0 |
커서 위치부터 행의 처음까지 삭제 |
D, d$ |
커서 위치부터 행의 끝까지 삭제 |
dd |
커서가 있는 행을 삭제 |
dj |
커서가 있는 행과 그 다음 행을 삭제 |
dk |
커서가 있는 행과 그 앞 행을 삭제 |
이동
h |
왼쪽으로 이동 |
l |
오른쪽으로 이동 |
j |
아래 행으로 이동 |
k |
위 행으로 이동 |
w or W |
다음 단어의 첫 글자로 이동 |
b or B |
이전 단어의 첫 글자로 이동 |
e or E |
단어의 마지막 글자로 이동 |
<CR> |
다음 행의 첫 글자로 이동 |
^ |
그 행의 첫 글자로 이동 |
$ |
그 행의 마지막 글자로 이동 |
+ |
다음 행의 첫 글자로 이동 |
- |
위 행의 첫 글자로 이동 |
( |
이전 문장의 첫 글자로 이동 |
) |
다음 문장의 첫 글자로 이동 |
{ |
이전 문단으로 이동 |
} |
다음 문단으로 이동 |
H |
커서를 화면의 맨 위로 이동 |
z<CR> |
현재 행을 화면의 맨 위로 이동 |
M |
커서를 화면의 중앙으로 이동 |
z. |
현재 행을 화면의 중앙으로 이동 |
L |
커서를 화면 최하단으로 이동 |
z- |
현재 행을 화면의 최하단으로 이동 |
[n]H |
커서를 위에서 n행으로 이동 |
[n]L |
커서를 아래에서 n행으로 이동 |
Ctrl + u |
반 화면 위로 스크롤 |
ctrl + d |
반 화면 아래로 스크롤 |
Ctrl + b |
한 화면 위로 스크롤 |
ctrl + f |
한 화면 아래로 스크롤 |
gg, 1G |
문서의 맨 첫 행으로 이동 |
G |
문서의 맨 마지막 행으로 이동 |
[n]G |
n행으로 이동 |
:[n] |
n행으로 이동 |
복사 & 붙이기
yy |
커서가 위치한 한 행 복사 |
p |
붙여넣기 |
[N]yy |
커서가 위치한 이후로 N행 복사 |
[N]p |
N번만큼 붙여넣기 반복 |
블록 지정 관련
v |
블록 지정 |
Ctrl + v |
비쥬얼 블록 지정 |
~ |
대소문자 전환 |
d |
삭제 |
y |
복사 |
c |
치환 |
> |
행 앞에 탭 삽입 |
< |
행 앞에 탭 제거 |
: |
선택된 영역에 대하여 ex 명령 |
J |
행을 합침 |
U |
대문자로 만듦 |
u |
소문자로 만듦 |
문자열 탐색 및 치환
/[문자열] |
문자열을 탐색 |
:s/old/new |
현재 행의 처음 old를 new로 교체 |
:s/old/new/g |
현재 행의 모든 old를 new로 교체 |
:10,20s/old/new/g |
10행부터 20행까지 모든 old를 new로 교체 |
:-3,+4s/old/new/g |
현재 커서 위치에서 3행 위부터 4행 아래까지 old를 new로 교체 |
:%s/old/new/g |
문서 전체에서 old를 new로 교체 |
:%s/old/new/gc |
문서 전체에서 old를 new로 확인하며 교체 |
:g/pattern/s/old/new/g |
pattern이 있는 모든 행의 old를 new로 교체 |
:g/pattern/s/new/g |
:%s/old/new/g와 동일 |
파일 버퍼 관련 명령 요약
:buffers |
버퍼의 내용을 나열 |
:files 또는 :ls |
버퍼의 내용을 나열 |
:b[N] |
N번 버퍼로 이동 |
:bd[N] |
N번 버퍼를 삭제(N이 없으면 현재의 버퍼를 완전 삭제) |
:bw[N] |
N번 버퍼를 완전 삭제(N이 없으면 현재의 버퍼를 완전 삭제) |
:bp[N] |
이전 버퍼로 이동. N을 붙이면 N번만큼 이전 버퍼로 이동 |
:bn[N] |
이후 버퍼로 이동. N을 붙이면 N번만큼 이후 버퍼로 이동 |
:sb[N] |
창을 수평 분할하여 N번 버퍼를 로드 |
:bf |
첫 번째 버퍼로 이동 |
:bl |
마지막 버퍼로 이동 |
:al |
현재 열려 있는 모든 버퍼를 수평 분할 창에 로드 |
마킹 및 마킹한 위치로 이동
명령어 |
내용 |
명령어 |
내용 |
ma |
a로 마킹, mb는 b로 마킹 |
||
`a |
a로 마킹된 위치로 돌아감 |
'a |
a로 마킹된 행의 처음으로 돌아감 |
" |
직전에 커서가 위치하던 행의 처음 |
`` |
직전의 커서 위치로 이동 |
' " |
이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동 |
` " |
이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동 |
ctags 관령 명령
:ta [tag] or Ctrl + ] |
[tag]가 정의된 위치를 나열하고 선택한 위치로 점프, 현재 위치는 stack에 push된다. |
:ts [tag] or :tj [tag] | |
:po or ctrl + t |
stack top에 저장된 위치를 pop하고 그 위치로 점프 |
:sts [tag] |
[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시 |
:stj [tag] | |
:tn |
tj나 ts로 점프했을 때 다음 tag로 점프 |
:tp |
tj나 ts로 점프했을 때 이전 tag로 점프 |
:tr |
tj나 ts로 점프했을 때 처음 tag로 점프 |
:tl |
tj나 ts로 점프했을 때 마지막 tag로 점프 |
:pts [tag] |
[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시하지만 커서는 현재 위치에 유지 |
:ptj [tag] |
미리보기 윈도우에 tag가 정의된 형식을 보임 |
:ptn |
ptj나 pts로 점프했을 때 다음 tag로 점프 |
:ptp |
ptj나 pts로 점프했을 때 이전 tag로 점프 |
:ptr |
ptj나 pts로 점프했을 때 처음 tag로 점프 |
:ptl |
ptj나 pts로 점프했을 때 마지막 tag로 점프 |
레지스터 활용
vim은 a부터 z까지 26개의 네임 레지스터를 지원하는데 이를 반복되는 문자열을 저장해서 사용하면 편리하다.
"a[저장할문장] -> a 레지스터에 저장 ex) "a3yy
"ap -> a 레지스터에 저장된 내용을 붙여넣기
매크로 사용
네임 레지스터에 키 입력을 저장해서 사용하는 방법
q[네임 레지스터명] 입력한 뒤 저장할 키들을 순차적으로 누른 후 q를 누르면 저장된다.
@[등록된 네임 레지스터명]을 누르면 저장된 키들을 사용할 수 있다.
.vimrc 설정 변경 후 재시작 안하고 적용하는 법
:so .vimrc