리눅스를 사용 할 때 가장 많이 사용하는 Vim 에디터 사용에 필요한 기초적인 내용을 설명합니다.
순서대로 따라하시면 사용법을 익히실 수 있을거라 생각합니다.
⚠ 소스코드의 #은 주석입니다.
⚠ 리눅스 박스나 MAC 터미널에서 실습하세요.

 

실습준비

실습에 사용할 파일(korean.txt)을 wget 명령어를 이용해 원격 텍스트 파일 을 가져옵니다.

$ cd ~          # 현재 사용자의 홈 디렉토리로 이동합니다.
$ wget https://raw.githubusercontent.com/ABoutCoDing/Linux-Study/master/korean.txt          # korean.txt 파일을 가져옵니다.

 

명령어 모드(command mode)와 편집 모드(입력모드, editing mode)

Vim 에디터는 명령어 모드(command mode)와 편집 모드(입력모드, editing mode)가 있습니다.
⚠ 명령어 입력이 있다면 모두 명령어 모드(command mode)입니다.

$ cd ~
$ vi korean.txt

기본은 명령어 모드 입니다. (다양한 명령어들은 뒤에서 설명하겠습니다.)
그리고 다음과 같이 텍스트 파일의 내용이 표시됩니다.

Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away,
...

이 상태에서 i 커맨드를 실행하면 최 하단에 -- INSERT -- 라고 표시됩니다.
편집모드로 변경되었습니다. 이제 원하는 글을 적으시면 됩니다.

Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away,
...
-- INSERT -- 

편집 모드에서 ESC 키를 누르면 다시 명령어 모드로 돌아오게 됩니다.
⚠ 편집 모드에서는 명령이 동작하지 않습니다.

 

기본편집

이번엔 foo.txt파일을 만들어서 내용을 입력해 보겠습니다.

$ vi foo.txt

이제 i 키를 눌러 편집 모드로 들어가겠습니다.
그리고 hello world 라고 입력해보세요.

hello world

ESC를 눌러 명령어 모드로 전환 한 후
a를 입력해보시면 커서 옆으로 이동한 후 편집모드로 변경되는 걸 보실 수 있습니다.

h□llo world

-- INSERT -- 

i커맨드는 현재 위치에서 편집모드로 전환되고
a커맨드는 오른쪽으로 한칸 이동 후 편집모드로 전환됩니다.
Shift + a (A)커맨드는 줄의 가장 마지막으로 이동 후 편집모드로 전환됩니다.

hello world□

-- INSERT -- 

 

되돌리기

입력한 내용을 돌려놓고 싶을때는 u (undo) 키를 입력한다.

편집 모드에서 아무 글이나 입력 하고
ESC를 눌려 명령어 모드로 전환 후 u키 를 누른다.
누를 때마다 이전 입력 내용으로 단계별로 변경된다.

hello world□

 

저장과 종료

명령어 모드 (– INSERT – 표시가 사라진 상태)에서

:q              # quit

라고 입력하면 에디터가 종료됩니다.

:w 

커맨드를 입력하면 파일이 저장됩니다.
저장하면서 에디터를 종료하고 싶다면

:wq

라고 입력하시면 됩니다.
변경한 내용을 저장하지 않고 빠져 나오려면

:wq! 

입니다.

다른 파일이름으로 저장하려고 한다면

:w foo1.txt 

라고 하면 foo1.txt파일로 저장됩니다.

‘ZZ’키를 이용해서 에디터를 종료 할 수도 있습니다.

 

커서이동

명령어 모드에서는 다양한 커맨드를 이용해 커서를 이동 할 수 있습니다.

커서 상하좌우 이동

이동 방향 명령
위로 K 또는 위쪽 방향키
아래로 J 또는 아래쪽 방향키
오른쪽 L 또는 오른쪽 방향키
왼쪽 H 또는 왼쪽 방향키

다양한 커서 이동

이동 방향 명령
현재 줄 처음으로 0
현재 줄 첫번째 공백이 아닌 글자로 SHIFT-6 (^)
현재 줄 마지막으로 SHIFT-4 ($)
다음 단어나 구두점 기호 처음으로 W
다음 단어 처음으로 구두점 기호 무시 SHIFT-W (W)
이전 단어나 구두점 기호 처음으로 B
다음 단어 처음으로, 구두점 기호 무시 SHIFT-B (B)
한페이지 아래로 CTRL-F 또는 PAGE DOWN
한페이지 위로 CTRL-B 또는 PAGE UP
줄 번호로 이동 number-SHIFT-G
파일의 처음으로 gg
파일 마지막 줄로 SHIFT-G

 

korean.txt 파일을 열어 실습해 보겠습니다.

$ vi korean.txt
# k, j, l, m 를 각각 눌러 봅시다.
Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away,

 

빈줄 추가

명령어 모드에서 빈줄을 추가하는 명령은 다음과 같습니다.

동작 명령
현재 줄 아래 빈 줄 추가 o
현재 줄 위에 빈 줄 추가 O

 

실습을 해봅시다.

$ vi korean.txt
# 첫번째 줄(Until...)에서 O 를 누르면 위에 빈줄이 생깁니다.
Until the day when the East Sea's waters and
# 첫번째 줄(Until...)에서 o 를 누르면 아래 에 빈줄이 생깁니다.     
Mt. Baekdu are dry and worn away,

 

텍스트 삭제

명령어 모드에서 텍스트를 삭제하는 방법은 다음과 같습니다.
커서를 이동 한 후 다음의 명령을 사용하여 삭제 합니다.

삭제동작 명령
현재 문자 삭제 x
현재 문자를 포함한 다음 2개 문자 3x
현재 줄 dd
현재줄을 포함한 다음 4줄 5dd
현재 커서 위치부터 현재 줄 끝까지 dw
현재 커서 위치부터 현재 줄 끝까지 d$
현재 커서 위치부터 현재 줄 맨앞까지 d0
현재 커서 위치부터 그 줄의 공백이 아닌 첫 번째 글자까지 d^
현재 줄부터 그 파일 끝까지 dG
현재 줄부터 파일의 20번째 줄까지 d20G

 

실습을 해봅시다.

$ vi korean.txt
Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away,

첫번째 줄에서 x키를 눌러보세요.
그리고 dd를 눌러보세요.

Mt. Baekdu are dry and worn away,
God protect and preserve us.

 

텍스트 자르기, 복사하기, 붙여넣기

$ vi korean.txt
Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away,

첫번째 줄에서 yy키를 누른 후
p키를 눌러보세요.
복사된 라인이 붙여넣기 됩니다.

Until the day when the East Sea's waters and
Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away,

 

줄 합치기

$ vi korean.txt
Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away, 
God protect and preserve us.

두 번째 줄로 이동한 후

:j

명령을 입력해보세요.

Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away, God protect and preserve us.
Long live our nation!

 

검색 및 치환

줄에서 텍스트 검색

같은 줄에서 검색 하고 싶은 알파벳을 찾을 때 사용합니다.

Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away, 
God protect and preserve us.
Long live our nation!

명령어 모드에서 두 번째 줄로 커서를 이동 후
fw 라고 입력하면 두번째 줄의 worn 에 커서가 이동합니다.

Until the day when the East Sea's waters and
Mt. Baekdu are dry and worn away, God protect and preserve us.
Long live our nation!

파일에서 텍스트 검색

$ vi korean.txt

명령어 모드 /true 라고 입력하면

stay true to the Great Korean way.

true 라는 단어에 커서가 이동하고 단어가 강조됩니다.
이후에 n키를 누르면 같은 검색어로 단어를 계속 찾게 됩니다.

 

전체 검색 및 치환

$ vi korean.txt

다음과 같이 커맨드를 입력하면 모든 Greatgreatest 로 바뀝니다.

:%s/Great/greatest/g
항목 의미
: 콜론 문자는 ex명령어를 실행
% 작업을 수행하는 줄 범위
$ 작업을 지정
/검색패턴/변경텍스트 검색 패턴과 바꾸고자 하는 텍스트 입력
g 전체

 

치환시 사용자의 허가(confirm)가 필요하다면 마지막에 c를 붙여 줍니다.

:%s/Great/greatest/gc

replace with greatest (y/n/a/q/l/^E/^Y)?
항목 의미
y 치환 실행
n 이번 치환 건너뛰기.
a 전체 치환 실행
q or ESC 치환 중단
l 이번 치환 후 종료
CTRL-E, CTRL-Y 스크롤 위 아래로 이동 치환 내용 확인

 

다중 파일 편집

실습을 위해 파일을 같은 파일을 하나 더 생성하겠습니다.

$ cat korean.txt > korean1.txt
$ ls
korean.txt  korean1.txt

동시의 파일을 열고 싶다면 다음과 같이 파일의 이름을 나열합니다.

$ vi korean.txt korean1.txt

파일간 전환

두개의 파일이 열린 상태입니다.
현재 화면에 출력되고 있는 파일은 최하단에 표시됩니다.

"korean.txt" [noeol] 39L, 1012C

이때 두번째 파일로 전환하려고 한다면

:n

을 누르면 다음과 같이 파일이 변경됩니다.

"korean1.txt" [noeol] 39L, 1012C  

다시 이전 파일로 전환하려면

:N

를 입력합니다.

파일 변경이 있어도 변경 하려면

:n!
:N!

처럼 명령어에 !를 붙여 파일을 전환합니다.

모든 파일 정보 확인

:buffers 명령을 입력하면 열려있는 모든 파일의 리스트를 보여줍니다.

:buffers
  1 #    "korean.txt"                   line 8
  2 %a   "korean1.txt"                  line 1

파일 내용을 다른 파일로 복사

이번엔 korean.txt 의 내용을 korean1.txt 파일로 붙여 넣기 해보겠습니다.

다음과 같이 :buffer 1 커맨드로 korean.txt 로 전환합니다.

:buffer 1

"korean.txt" [noeol] 39L, 1012C 

복사를 원하는 라인에서 yy키를 누릅니다.

God protect and preserve us.

다시 :buffer 2로 이동후에

:buffer 2

원하는 위치에서 p버튼을 누르면 붙여 넣기 됩니다.

Until the day when the East Sea's waters and
God protect and preserve us.

 

파일 전체를 다른 파일에 삽입

:r foo.txt        # r (read)

foo.txt 파일에 있던 hello world (전체내용) 이 현재 열려있는 파일에 붙여 넣기 됩니다.

God protect and preserve us.
hello world
Long live our nation!

 

정리

간단하게? vim 사용법에 대해서 정리해 보았습니다.

 

참고자료

The Linux Command Line: A Complete Introduction