본문 바로가기
컴퓨터 & IT (Computer & IT)/VIM

[VI/VIM ] 모드 및 기본명령어

by Physics 2020. 3. 19.
728x90

■ VIM의 모드 

VIM에는 3가지 모드가 존재한다: 입력모드, 편집모드, 명령모드

 

1. 입력모드

텍스트를 입력하거나 삭제함

자판 의미
a 커서가 위치한 다음 칸부터 입력
A 커서가 위치한 행의 끝부터 입력
i 커서가 위치한 칸부터 입력
I 커서가 위치한 행의 처음부터 입력
o 커서가 위치한 행의 아래에 행을 만들어 입력
O 커서가 위치한 행의 위에 행을 만들어 입력

 

2. 편집모드

편집 모드 내에서는 복사하기, 자르기, 붙이기 등을 수행할 수 있음

1) 커서의 이동

(1) 기본 단위 커서 이동

자판 의미
h 왼쪽으로 한 칸 이동 
j 아래로 한 칸 이동 
k 위로 한 칸 이동
l 오른쪽으로 한 칸 이동

 

(2) 줄 단위, 단어 단위 커서 이동
Using a count for a motion: <number> + <command>: repeat command by number 
커서 위치 
(1) <ctrl> + g
 - 파일 이름과 커서의 현재 위치를 화면의 하단부에 표시해줌 

자판 의미
0 커서를 행의 처음으로 이동
^ 커서를 해당 행의 처음 문자로 이동
<enter> 커서를 다음 행의 첫 문자로 이동
$ 커서를 해당 행의 맨 뒤로 이동
w 커서를 다음 단어의 첫 글자로 이동
a. 추가 활용 1: nw (n: 임의의 숫자) 
- n개의 단어씩 이동 
- ex) 3w: 3단어씩 이동 
b 커서를 이전 단어의 첫 글자로 이동
a. 추가 활용 1: nb (n: 임의의 숫자) 
- n개의 단어씩 뒤로 이동 
- ex) 3b: 3단어씩 뒤로 이동 

W 공백 기준으로 다음 단어의 시작 위치로 이동
B 공백 기준으로 이전으로 이동
e 단어 마지막 글자 기준으로 다음으로 이동
E 공백 기준으로 다음 단어의 끝으로 이동
+ 커서를 다음 행의 첫 문자로 이동
- 커서를 이전 행의 첫 문자로 이동
H 커서를 현재 페이지의 첫 행의 첫 글자로 이동
L 커서를 현재 페이지의 마지막 행의 첫 글자로 이동
% 대칭되는 괄호 문자 ("()", "{}", "[]")로 이동 
G
글의 맨 밑으로 이동
1G - 글의 맨 처음으로 이동 
- 또는 "gg"를 입력해도 동일함 
- 추가적인 정보: nG (n: 임의의 숫자) 
   -- n번째 줄로 이동함  
M 커서 화면 중간으로 이동
( 문장의 시작으로 이동
) 문장의 끝으로 이동하여 다음 단어의 시작으로 커서 이동
{ 문단의 시작 위치로 이동
} 문단 끝으로 이동

 

자판 의미
f - 문자의 위치로 이동
- ; 를 누르면 계속 이동 
F - 백워드 방향으로 문자의 위치로 이동
* 현재의 단어를 포워드 방향으로 찾기
# 현재의 단어를 백워드 방향으로 찾기

 

자판 의미
]] 포워드 방향으로 여는 컬리 블레이스( "{" )로 이동
[[ 백워드 방향으로 여는 컬리 블레이스( "{" )로 이동 
<enter> 커서를 다음 행의 첫 문자로 이동
   

 

  (3) 페이지 단위 커서 이동

자판 의미
<ctrl> + <F> 커서를 한 페이지 아래로 이동
<ctrl> + <B> 커서를 한 페이지 위로 이동
<ctrl> + <U> 커서를 반 페이지 위로 이동
<ctrl> + <D> 커서를 반 페이지 아래로 이동

  2) 복사하기, 삭제하기, 붙이기

(1) Objects 
VIM에서는 명령어의 조합이 <command> + <object>이다. 가령, 우리가 3개의 단어를 현재 커서의 위치에서부터 삭제를 하고자 한다면 d3w을 누르게 될 것이다. 이때, d (delete)는 command이고, 3w은 object에 해당을 한다. 따라서, command와 object의 조합으로 무궁무진하게 vim의 활용도가 높아진다.  

• dw: delete word

example 1: di{: {}안에 있는 모든 것들을 삭제 
example 2: di(: ()안에 있는 모든 것들을 삭제 
example 3: da{: {}을 포함한 {}안에 있는 모든 것들을 삭제 
example 4: daw: 커서가 포함하는 한 단어 전체를 삭제 
example 4: di': ''안에 있는 모든 것들을 삭제 
example 5: dt( 현재 커서부터 바로 다음 나오는 (까지 삭제 
Example 6: d/use: 
    - /: search 키워드 
    - search 키워드를 사용하면, 대응되는 단어가 하이라이트 됨 
    - 현재 커서로부터 앞에 나오는 use까지 삭제함 
 

Operation Description
d delete
c change (delete and enter insert mode)
> indent
v visually select  
y yank (copy) 
자판 의미
w 단어 (word 또는 forward by a word)
b
t 태그 (tag)
 p 문단 (paragraph)  
s 문장 (sentence) 
e end of the current word, including the last characters
$ to the end of the line, including the last characters 
i inner 
ex) iw: inner word (works from anywhere in a word)
ex) it: 태그 안에 있는 것* 
ex) i'': 쌍따옴표 안에 있는 것 
ex) ip: 문단 안에 있는 것 
j 윗줄 
k 아랫줄

  = Vim의 경우, HTML을 수정하는 경우, 어떤 태그에 위치했는지 알고 있음 

명령어 의미
   
   
   
   
   
yG 현재부터 파일의 끝까지 복사
   
:1,2 co 3 1, 2행을 3행 다음으로 복사
:1,2 m 3 1, 2행을 3행 다음으로 이동
:1, 200 w <file> 1~200 행을 <file>이라는 파일에 저장

 

자판 의미
x 현재 커서가 위치한 한 글자 삭제 (잘라냄)
X 현재 커서가 위치한 앞 한글자 삭제 (잘라냄)
yy 현재 커서가 위치한 행을 복사 
nyy -ex) 5yy
- 현재 커서가 위치한 행부터 n행을 복사
yw 현재 커서가 위치한 한 컬럼부터 한 단어 복사
dd 현재 커서가 위치한 행을 삭제 (잘라냄)
ndd 현재 커서가 위치한 행부터 n행을 삭제 (잘라냄) 
dw 현재 커서가 위치한 컬럼 이후부터 한 단어 삭제 (잘라냄)
- 추가 활용: dnw (n: 임의의 숫자)
현재 커서가 위치한 컬럼 이후부터 n개의 단어 삭제 
ex) d3w: 커서가 위치한 곳부터 3개의 단어 삭제 
d0 현재 커서가 위치한 컬럼에서 행의 선두까지 삭제 (잘라냄)
D or d$ 현재 커서가 위치한 컬럼 이후부터 한 행 삭제 (잘라냄)
p 현재 커서가 위치한 행 다음 행에 붙여넣기
p*  클립보드 붙여넣기 
P 현재 커서가 위치한 행 윗행에 붙이기

 

x : 커서가 있는 문자 삭제

X : 커서가 있는 문자 앞의 문자 삭제

dw : 커서가 있는 단어 삭제

db : 커서 앞에 있는 단어 삭제

dW : 공백으로 구분된 뒷 단어 삭제

dB : 공백으로 구분된 앞 단어 삭제

dd : 커서가 있는 라인 삭제

D : 커서가 있는 라인의 나머지 삭제

d) : 문장의 나머지 삭제

d} : 문단의 나머지 삭제

dG : 파일의 나머지 삭제

dH : 화면의 시작까지 삭제

dL : 화면의 나머지 삭제

J : 커서와 다음 단어의 공백을 모두 삭제

~ 문자형(대, 소문자) 변경

복사

yw : 커서가 있는 단어를 복사

yb : 커서가 있는 앞 단어를 복사

yW : 공백으로 구분된 뒷 단어 복사

yB : 공백으로 구분된 앞 단어를 복사

y : 특정한 다음 텍스트 복사

yL : 화면의 나머지 복사

yy : 커서가 있는 라인을 복사, 커서가 가리키는 곳으로 라인을 이동

y) : 문자의 나머지 복사

y} : 문단의 나머지 복사

yG : 파일의 나머지 복사

yH : 화면 시작까지 복사

바꾸기 명령 (r: replace, or c:change) 

r + <character>: 커서에 있는 단어를 <character>로 대체 
r : 커서에 있는 문자 대치 

R : 입력 모드로 한 문자씩 덮어씀

s : 커서가 있는 문자 삭제 후 입력 모드로 전환

S : 커서가 있는 줄을 삭제한 후 입력 모드로 전환

c: delete + insert
Example: ci{: {}내의 단어들을 삭제 후, insert모드로 입력 시작 
cb : 커서가 있는 앞 문자 삭제 후 입력 모드

cW : 공백으로 구분된 뒷 단어를 삭제한 후에 입력 모드

cB : 공백으로 구분된 앞 단어 삭제 후 입력 모드

cc : 커서가 있는 라인을 삭제하고 입력 모드

C : 커서가 있는 라인의 나머지를 삭제하고 입력 모드로 전환

c0 : 커서에서부터 라인의 시작까지 텍스트 바꾸기

c : 특정 테스트 바꾸기

c) : 문장의 나머지 바꾸기

c} : 문단의 나머지 바꾸기

cG : 파일의 나머지 바꾸기

cm : 표시까지 모든 것 바꾸기

cL : 화면의 나머지 바꾸기

cH : 화면의 시작까지 바꾸기

:1,2 co 3 1~2행을 3행 다음으로 복사

:4,5 m 6 4~5행을 6행 위로 이동

   3) 명령의 취소와 반복 

자판 의미
u 최근 실행 명령 취소 (undo)
. 최근 실행 명령 반복
CTRL + R 앞감기 

   4) 변환하기 (바꾸기) 

자판 의미
r 커서가 위치한 곳의 한 글자를 다른 한 글자로 변환
R 커서가 위치한 곳부터 덮어씀
s 커서가 위치한 곳부터 끼워넣기
S 커서가 위치한 행 전체를 삭제하고 새로운 문자열 입력
ns 커서가 위치한 것부터 n글자를 삭제하고 끼워넣기
C 커서가 위치한 곳부터 끝까지 행을 삭제하고 새로운 문자열 입력
cw 커서가 위치한 곳부터 한 단어를 다른 문자열로 변환
~ 커서가 위치한 곳부터 대소문자를 서로 변환

  5) 다중 작업: 하나의 터미널 화면을 여려 개로 분리하여 작업할 수 있음

자판 의미
<ctrl> + <W> + <N> 윈도우를 가로방향으로 생성함
<ctrl> + <W> + <V> 현재 파일을 새로운 윈도우에 세로 방향으로 생성함
<ctrl> + <W> +<W> 작업하는 윈도우를 이동함
<ctrl> + <W> + <X> 윈도우를 위치 변경함
<ctrl> + <W> + <C> 현재 작업하는 윈도우를 종료함
<ctrl> + <W> + <D> 현재 윈도우를 제외한 모든 윈도우를 종료한다
(명령모드) :sp <file_name> - <file_name>에 대응되는 파일을 위에 열고 창을 상하로 분할
- <file_name>을 생략할 경우에는 현재 파일을 의미함 
(명령모드) :vs <file_name> - <file_name>에 대응되는 파일을 위에 열고 창을 좌우로 분할
- <file_name>을 생략할 경우에는 현재 파일을 의미함
(명령모드) :new - 창을 상하로 분할하며, 위쪽에 새로운 창을 만듬
(명령모드) :vnew - 창을 좌우로 분할하며, 위쪽에 새로운 창을 만듬
창 크기 조정
CTRL-W =   창의 크기를 모두 균등하게 함
CTRL-W _   수평 분할에서 창의 크기를 최대화
CTRL-W |   수직 분할에서 창의 크기를 최대화
CTRL-W [N]+ :res[ize] +N 창의 크기를 N행 만큼 증가
CTRL-W [N]- :res[ize] -N 창의 크기를 N행 만큼 감소
CTRL-W [N]>   창의 크기를 오른쪽으로 N칸 만큼 증가
CTRL-W [N]<   창의 크기를 오른쪽으로 N칸 만큼 감소
창생성
CTRL-W s :[N]sp[plit] 현재 파일을 두 개의 수평 창으로 나눔
CTRL-W v :[N]vs[plit] 현재 파일을 두 개의 수직 창으로 나눔
CTRL-W n :new 새로운 수평 창 생성
CTRL-W ^ 또는 CTRL-W CTRL-^   수평 창으로 나누고 이전 파일의 오픈
CTRL-W f   창을 수평으로 나누고 커서 위치의 파일 오픈
CTRL-W i   커서 위치의 단어가 정의된 파일을 오픈
창삭제
CTRL-W q :q[uit]! 현재 커서의 창을 종료
CTRL-W c :close 현재 커서의 창 닫기
CTRL-W o :on[ly] 현재 커서의 창만 남기고 모든 창 삭제
창이동
CTRL-W h   왼쪽 창으로 커서 이동
CTRL-W j   아래쪽 창으로 커서 이동
CTRL-W k   위쪽 창으로 커서 이동
CTRL-W l   오른쪽 창으로 커서 이동
CTRL-W w   창을 순차적으로 이동
CTRL-W p   가장 최근에 이동한 방향으로 이동
CTRL-W t   최상위 창으로 이동
CTRL-W b   최하위 창으로 이동
창이동
CTRL-W r   순착으로 창의 위치를 순환
CTRL-W x   이전 창과 위치를 바꿈
CTRL-W H   현재창을 왼쪽 큰화면으로 이동
CTRL-W J   현재창을 아래쪽 큰화면으로 이동
CTRL-W K   현재창을 위쪽 큰화면으로 이동
CTRL-W L   현재창을 오른쪽 큰화면으로 이동

 

 

 

3. 명령모드: 

   - 파일을 저장하거나 종료하는 등의 명령을 수행할 수 있음 
   - ex 모드라고 부르기도 함 

   1) 위치 이동 

자판 의미
:1 커서를 파일의 첫 번째 줄로 이동
:n 커서를 파일의 n번째 행으로 이동
:$ 커서를 파일의 마지막 행으로 이동

   2) 글자변환

자판 의미
:s/<old_string>/<new_string>/g 커서가 위치하고 있는 행의 문자열을 새로운 문자열로 변환
:i,j s/<old_string>/<new_string>/g i번째 행부터 j번째 행까지 문자열을 새로운 문자열로 변환
:%s/<old_string>/<new_string>/g 파일 전체의 문자열을 새로운 문자열로 변환

s: substitute 

   3) 파일 열기 및 저장  

자판 의미
:w <file_name> 파일을 저장한다.
:sav <file_name> 현재 파일을 다른 이름으로 저장한다
:up 변경 사항이 있을 경우에만 저장
:x vim을 종료하면서, 변경사항이 있을 경우에만 저장
:e <file_name> 파일을 편집용으로 연다.

- ZZ: 변경사항 보관 후 vi 종료. 임시 버퍼의 내용을 vi로 호출할때 사용되었던 파일에 기록한 후 vi를 빠져나옴.
- <CTRL> + Z + Q: 명령모드의 :q!와 동일 
 

 

 

  4) 문자열 찾기 

자판 의미
/<string> - <string>에 대응되는 문자열을 찾는다. 
- 입력한 후 *를 누르면, 해당 문자열에 대응되는 문자열을 내림차순 순으로 즉시 찾는다. 
- n을 누르면 다음 검색결과로 이동 (N, 또는 ?,은 반대방향)
:set hlsearch 검색결과 하이라이트 설정
:set nonhlsearch 검색결과 하이라이트 해체

 

4. 기타 유용한 명령어

 1) 단어 완성: - <ctrl>+<N> → <ctrl>+<P>

                  - <ctrl>+<X> → <ctrl>+<N> 

 

 2) 줄바꿈 자동 완성: 
      (1) visual  모드에서 자리 바꿈하고 싶은 줄을 선택

      (2) 명령 모드에서 "="를 입력

 

~ - 선택 문자 대소문자 변경

Ctrl + A - 숫자를 증가시키기
Ctrl + X - 숫자를 감소시키기

:tabnew - 새로운 탭 열기
:gt - 다음 탭으로 이동하기
:gT - 이전 탭으로 이동하기
:e ./ - 현재 탭에 오픈할 파일 탐색하기( ./ 는 현재위치에서 탐색 시작)
:colorscheme 스키마명 - VIM의 칼라스키마를 변경함(blue, desert, evening 등.. 스키마명에서 탭누르면 자동완성됨)

zc - 코드 접기(fold)
zo - 접힌 코드 펼치기
zd - fold 지우기
zR - 접힌 코드 모두 펼치기
zM - 코드 모두 접기
zD - 모든 fold 지우기

:buffers - 현재 Vim에서 여러 파일을 열었을때 버퍼에 있는 목록 확인
:buffer 숫자 - 버퍼 목록에 나온 숫자를 입력하면 해당 파일을 오픈함 ( :buffer 대신 :b 도 가능)
:bnext - 버퍼에 있는 다음 파일로 이동 ( :bn 도 가능)
:bprevious - 버퍼에 있는 이전 파일로 이동 ( :bp 도 가능)
:ball - 버퍼 목록에 있는 파일들이 가로로 분할된 창에 열림


 

Tip. 1 멀티 라인 커맨드 [3]

1. 일반 Vlsual 모드가 아닌 Visual Block 모드로 들어간다: <ctrl> + v
2. 블록을 지정 후, vim 명령을 사용한다.
   (1) 문자 하나를 제거하려고 하면 d를 누름
   (2) 문자열을 추가하려면 <shift> + i 로 누른 후, 편집기 모드로 들어감
3. 이후 작업이 완료가 되면 <ESC> 키를 두번 누름

Tip. 2 여러 줄 공백 넣기 

VIM에서 여러 줄의 공백을 한번에 넣는 방법은 아래와 같이 몇몇 방법들이 존재한다. 
1. 멀티 라인 커맨드를 사용하는 방법
2. 명령모드에서 다음 커맨드를 입력: n>> 
  - n 공백 문자를 넣을 줄의 수 
  - ex) >>  : 한 개 줄에 공백을 넣음 
  - ex) 3>> : 세 개 줄에 공백을 넣음 

Vim의 이점
1) a lot of editing tasks

첫번째 줄 이동: gg
마지막 줄 이동: G


명령 모드에서 
- 50gg : 50번째 줄로 이동 
- :50  : 50번째 줄로 이동

H: 스크린의 가장 윗부분줄로 이동
M: 스크린의 중앙줄로 이동
L: 스크린의 마지막 줄로 이동

zz: 현재 커서가 있는 부분을 스크린의 중앙부분으로 위치하게 함 

Completion in Vim

1. <ctrl> + p: default key binding for completion 
   - previous match (Backward) 
2. <ctrl> + n 

3. Tag Completion - ctags 
  <ctrl> + x -> <ctrl> + ]
 



<ctrl> + R : 되돌리기 취소

 

Vim과 관련한 추가 기능들 
(1) TAB: (명령어 모드) :tabedit   
• 여러 파일들을 탭형식으로 연다. 
• 참조: https://m31phy.tistory.com/235     
(2) 셰션 만들기 
• 세션 만들기: (명령어 모드) :mksession <session_name.vim>
• 세션을 열 경우: (터미널에서) vim -S <session_name.vim>
• VIM에서는 사용자가 연 파일들을 세션의 형태로 저장을 할 수 있다. 이 세션의 장점은 사용자가 작업을 위해 여러 파일들을 반복적으로 열 필요가 없다는 점이다. 가령 아래의 그림과 같이 탭 형태로 3개의 파일이 열려져 있다고 하자. 이 때 vim을 종료한 후, 이 구성으로 시작을 하고 싶다면, 세션을 만들면 된다. 

 

■ Reference: 

[1] 

[2] https://fsd-jinss.tistory.com/132?category=741751[
3] jybaek.tistory.com/758
[4] https://www.youtube.com/watch?v=wlR5gYd6um0    
[3] https://www.youtube.com/watch?v=d8XtNXutVto      
[5] https://www.youtube.com/watch?v=B-EPvfxcgl0

728x90

댓글