VI 모드

  • command line → 명령

  • normal mode → 기본모드

  • edit mode → 수정모드

  • visual mode → 비쥬얼모드



이동키

normal mode / edit mode normal mode  
h 좌로 커서 이동
j 아래로 커서 이동
k 위로 커서 이동
l 우로 커서 이동
Page Up <CTRL> + U 화면에 비례하여 커서 위로 이동
Page Down <CTRL> + D 화면에 비례하여 커서 아래로 이동
- <CTRL> + B Ctrl + U와 비슷
- <CTRL> + F Ctrl + D와 비슷
(마우스 휠스크롤 down) <CTRL> + E 커서는 움직이지 않고 스크롤 내리기
(마우스 휠스크롤 up) <CTRL> + Y 커서는 움직이지 않고 스크롤 올리기
  • vim 명령어는 대소문자를 구분하므로 유의

  • 글자가 없는 (~)곳으로는 커서 이동 불가



normal mode에서 사용

의미
i 커서가 있는 곳에서 edit mode 진입
I 커서가 있는 줄 맨 앞에서 edit mode 진입
a 커서가 있는 곳 바로 뒤 (한글자 뒤)에서 edit mode 진입
A 커서가 있는 줄 맨 뒤에서 edit mode 진입
o 커서가 있는 곳 바로 아래에 한 줄을 삽입하며 edit mode 진입
O 커서가 있는 곳 바로 위에 한 줄을 삽입하며 edit mode 진입
x 커서 뒷자리 문자 한 개 제거
X 커서 앞자리 문자 한 개 제거
u 실행취소(ctrl+z와 같은 기능) [undo]
<CTRL> + r 실행취소 되돌리기 [Redo]
yy 현재 커서가 위치한 한 줄 복사 [yank]
p yy로 복사한 줄 커서 아래 붙여넣기(=삽입) [put]
[num]p
ex)10p
num 숫자만큼 yy로 복사한 줄 커서 아래 붙여넣기(=삽입) [put]
ex) yy로 복사한 줄 10줄 붙여넣기
^ 해당 줄(라인) 처음(시작점)으로 커서 이동
$ 해당 줄(라인) 끝 바로 앞(한 문자 앞)으로 커서 이동
w 다음 단어의 제일 앞으로 커서 이동
- 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식
W 다음 단어의 제일 앞으로 커서 이동
- 공백(띄어쓰기, 줄바꿈) 기준으로 단어 인식
e 해당 단어 끝 바로 앞(한 문자 앞)으로 커서 이동
- 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식
E 해당 단어 끝 바로 앞(한 문자 앞)으로 커서 이동
- 공백(띄어쓰기, 줄바꿈) 기준으로 단어 인식
b 이전 단어의 제일 앞으로 커서 이동
- 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식
B 이전 단어의 제일 앞으로 커서 이동
- 공백(띄어쓰기, 줄바꿈) 기준으로 단어 인식
gg 해당 vi 문서의 맨 첫 줄 맨 앞으로 커서 이동
G 해당 vi 문서의 맨 끝 줄 맨 앞으로 커서 이동
d
d+(?)
삭제 (visual mode에서도 가능)
- 뒤에 범위 지정을 하게 되면 범위까지 삭제
ex) d, ^, $, 방향키, gg, G … etc
dd 해당 커서가 있는 줄 삭제
d$ 커서가 있는 곳부터 해당 줄 끝까지 제거
D 해당 커서가 있는 곳부터 해당 줄 끝까지 제거
c
c+(?)
d와 동일한 기능 후 edit 모드 진입
C D와 동일한 기능 후 edit 모드 진입
r 다음 한 글자를 새로 입력받는 문자로 덮어씌우기(Insert 수정과 같은 역할)
* 현재 커서가 포함되어있는 단어(문자열) 검색
- 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식



to normal mode

의미
<ESC> 모든 mode에서 normal mode로 변경시 사용



Command line

의미
:, ?, /, ! Command line 진입
(/, ? = serach command)
:cd<Enter> 현재 수정하고있는 vi 파일 위치
(ex) :cd<Enter> → /home/sunny
:cd 디렉토리경로<Enter>
(ex1) :cd heyA<Enter>
(ex2) :cd /home/sunny/heyB<Enter>
현재 수정하고있는 vi 파일이 저장될 위치를 변경함
(ex1) 상대경로(heyA)로 이동 (현재경로/heyA)
(ex2) 절대경로(/home/sunny/heyB)로 이동
→ 저장시 이름 지정 필요, 기존 파일이 옮겨가는 것이 아닌 새로 저장의 개념
:w<ENTER> 저장
:w (파일경로/)파일명<Enter>
(ex1) :w myFile.txt<Enter> → 현재경로
(ex2) :w heyB/myFile.txt<Enter> → 상대경로
(ex3) :w /home/sunny/myFile.txt<Enter> → 절대경로
파일명(및 경로)으로 현재 수정중인 파일 저장하기
(ex1) 현재경로에 myFile.txt를 저장
(ex2) 상대경로(현재경로/heyB/)에 myFile.txt를 저장
(ex3) 절대경로(/home/sunny/)에 myFile.txt를 저장
:o (파일경로/)파일명<Enter>
(ex1) :o myFile.txt<Enter> → 현재경로
(ex2) :o heyB/myFile.txt<Enter> → 상대경로
(ex3) :o /home/sunny/myFile.txt → 절대경로
파일 불러오기
(ex1) 현재경로의 myFile.txt를 불러옴
(ex2) 상대경로(현재경로/heyB/)의 myFile.txt를 불러옴
(ex3) 절대경로(/home/sunny/)의 myFile.txt를 불러옴
:q<Enter> 나가기
:wq<Enter>
ZZ [normal mode]
(ex1) :wq<Enter>
(ex2) ZZ
(ex3) :wq (파일경로/)파일명<Enter>
저장하고 나가기
(ex1) 현재 파일에 저장하고 vim 종료
(ex2) normal mode에서 입력하면 :wq<Enter>와 동일한 기능
(ex3) 파일경로/파일명을 지정하여 저장하고 vim 종료
! 옵션
:w! (파일경로/)파일명<Enter>
:o! (파일경로/)파일명<Enter>
:q!<Enter>
강제실행
:w와 사용 → 기존에 동일이름 파일있을 경우 강제 덮어쓰기
:o와 사용 → 현재 수정중인 파일 저장여부 무시하고 열기
:q와 사용 → 현재 수정중인 파일 저장여부 무시하고 나가기
/, ?
n
N
search command (정방향 / 역방향)
다음 찾기 [next]
이전 찾기 [backward]
/
/[찾을문자열]<ENTER>
(ex1) /abc<ENTER>
/[찾을문자열을위한정규식]<ENTER>
(ex2) /ab.<ENTER>
정방향 search command
/[찾을문자열]<ENTER>하면 일치하는 문자열 정방향 검색
/[찾을문자열을위한정규식]<ENTER>하면 정규식에 해당되는 문자열 정방향 검색
n : 다음찾기(정방향) / N : 이전찾기(역방향)
?
?[찾을문자열]<ENTER>
(ex1) ?abc<ENTER>
?[찾을문자열을위한정규식]<ENTER>
(ex2) ?ab.<ENTER>
역방향 search command
?[찾을문자열]<ENTER>하면 일치하는 문자열 역방향 검색
?[찾을문자열을위한정규식]<ENTER>하면 정규식에 해당되는 문자열 역방향 검색
n : 다음찾기(역방향) / N : 이전찾기(정방향)
:nohl 검색을 하면 검색된 문자열이 하이라이트(음영)처리 되는데, 해당 하이라이트 처리 제외
:[number]
(ex) :21
해당 number에 해당하는 줄로 번호 이동
(ex) 21번째 줄로 이동
:se nu
:se nonu!
:se number
:se nonumber!
:set nu
:set nonu!
:set number
:set nonumber!
좌측에 줄 번호가 보이도록 설정
:se nu!
:se nonu
:se number!
:se nonumber
:set nu!
:set nonu
:set number!
:set nonumber
좌측에 줄 번호가 보이지 않도록 설정
<TAB>
ex) :set nu<TAB>
자동완성
ex) set nu로 시작하는 명령들을 보여준다. <TAB> 누르면 다음 명령으로 이동됨(글자순으로..)
:his
:history
Command line history 확인
:<CTRL>+F Command line history 편집 및 실행
(방향키로 움직이고 실행은 <ENTER>)
/<CTRL>+F Search history 편집 및 실행
(방향키로 움직이고 실행은 <Enter>)



Visual mode

의미
v visual mode
V visual line (줄 단위)
<CTRL> + V
<CTRL> + Q
visual bloc (블럭 단위 → 열 단위)
<CTRL> + V가 되지 않는 일부 윈도우 Vim에서는 Q를 대체 사용
<SHIFT> + i visual bloc에서 설정한 열 영역 일괄 문자 입력(수정)
y 선택 영역 복사
p 선택 영역 붙여넣기 [삽입]
P 선택 영역 붙여넣기(단, 커서는 움직이지 않음) [추가]



화면분할

의미
<CTRL> + W + (?) 모든 화면(윈도우) 명령은 <CTRL> + W + (?)로 구성
- normal mode에서 실행
<CTRL> + W + n 화면 분할 + 새 창 (창 나가기는 :q 동일)
<CTRL> + W + <방향키> 화면 분할 창끼리 이동
<CTRL> + W + <+> 창 크기 확대
<CTRL> + W + <-> 창 크기 축소
<CTRL> + W + <=> 창 크기 동일하게
기타생략  



도움말

의미
:help (대상) 대상에 대한 도움말이 나타남
<CTRL> + ] 커서 위의 태그(도움말 링크..?)로 이동
<CTRL> + T 태그 이동 전 태그로 이동
:tags 이동한 태그들을 보여줌(트리)