IT/Linux

vi :: 가장 많이 사용되는 vim, vi 명령어

DoubleSH 2008. 7. 1. 17:29
반응형

가장 많이 사용되는 vim, vi 명령어

여기에 작성된 vim, vi명령어는 가장 많이 사용되는 명령어만을 모아놨으며 자세한 사항은 다른 참고서를 참조하시기 바람니다.

 

vim의 모드 이해

vim에 대해서 이해하고자 한다면 먼저 vim의 여러 가지 모드에 대해서 이해해야 한다. vim은 3가지 모드를 가지고 있는데 명령모드, 입력모드, ex모드가 바로 그것이다.

*명령모드

명령모드는 키 입력을 통해 vim에 명령을 내리는 모드다. 명령모드에서 커서를 이동하거나, 삭제, 복사, 붙이기 등의 작업을 수행할 수 있다. 이 명령모드 때문에 대부분 처음 vim을 접하는 사람들은 생소함을 느낀다. 왜냐하면 vim을 실행하면 명령모드부터 시작하는데 명령모드에서는 아무리 타이핑해도 글자가 입력되지 않기 때문이다. 명령모드는 vim에게 명령을 내리기 위한 모드지 편집을 위한 모드가 아니라는 것을 기억하기 바란다.

*입력모드

입력모드는 실제로 문서를 편집하기 위한 모드다. 입력모드에서 글자를 타이핑하게 되면 실제로 화면에 출력되면서 글자의 입력이 가능하게 된다. 다시 한번 강조한다. vim은 명령모드와 입력모드가 있는데 명령모드는 키 입력으로 삭제, 복사, 붙이기 등의 작업을 수행하는 모드고 입력모드가 실제로 문서를 타이핑하여 편집하기 위한 모드라는 것을 기억하기 바란다. vim은 일반 에디터와 틀리게 명령모드와 입력모드가 분리되어 있다. 이러한 특징을 이해하지 못하고 접근하면 vim은 낯설고 이해하기 힘든 에디터가 된다.

*ex모드

ex모드는 라인 에디터의 ex에디터의 기능을 사용하는 모드다. vim은 ex 에디터를 기반으로 만들어진 에디터다. 그래서 ex 에디터의 기능을 그대로 사용할 수 있다. ex모드를 사용하면 특정 패턴들을 특정 문자열로 대체한다는 것과 같이 일괄적으로 처리해야 할 작업에 매우 효율적이다. 그리고 ex모드에서 ex 라인에디터의 기능만 구현되어 있는 것이 아니다. vim을 더욱 강력하게 하는 많은 기능들이 숨어있는 모드가 바로 ex모드다.

 

사용자 삽입 이미지

각 모드의 전환은 위 그림과 같다. vim을 처음 실행시키면 명령모드에서부터 시작한다. 명령모드에서 i,a,o,s 중 한 키를 누르면 편집이 가능한 입력모드로 전환된다.

 

입력모드에서 복사, 붙이기 등과 같은 작업을 수행하기 위해서는 명령모드로 다시 전환해야 한다. 입력모드에서 명령모드로의 전환은 Esc 키를 누르면 된다. 그림에서 보는 바와 같이 입력모드에서 ex모드로 바로 전환하는 것은 불가능하다. 일단 명령도드로 전환한 후 ex모드로 전환해야 한다. 명령 모드에서 ex모드로 전환하기 위해서는 :,/.? 키 중 한 키를 누르게 되면 전환하게 된다. : 키는 ex 편집기 명령과 vi의 ex모드 명령을 입력할 때 사용하고 /,? 는 특정한 패턴을 찾을 때 사용한다. / zlfmf 누른 후 찾고자 하는 패턴을 입력하면 패턴이 나오는 곳으로 커서가 이동한다. /는 정방향 탐색이고 ?는 역방향 탐색을 할 때 이요된다.

 

파일 열기, 저장 종료

$ vim hello.c

리눅스 셸 프롬프트 상에서 위 명령을 내리면 vim이 실행된다. ‘$’는 셸 프롬프트를 의미한다. 실행시 기존에 hello.c 파일이 존재한다면 hello.c파일이 열게 되고 hello.c 파일이 존재하지 않는다면 새로 생성하게 된다.

텍스트 입력이 끝나면 Esc 키를 눌러 입력모드에서 명령모드로 전환한다.

hello.c파일에 저장하기 위해서는 Esc키를 누르고 : 키를 눌러 ex모드로 전환하여 w 키를 누르고 Enter를 치면 된다.

종료는 명령모드에서 : 키를 눌러 일단 ex모드로 전환하고 q 키를 누르게 되면 종료하게 된다.

일반적으로 저장 후 종료하는 것은 ex모드에서 다음과 같은 형식으로 사용한다.

:wq!

wq는 저장 후 종료를 의미하고 !는 강제 저장, 종료를 의미한다.

 

저장 및 종료

명령어

설명

:w

저장

:w file.txt

file.txt 파일로 저장

:w >> file.txt

file.txt파일에 덧붙여서 저장

:q

vi종료(저장이 안됐을시 경고)

:q!

vi강제 종료(경고 무시)

:wq!

강제 저장 후 종료

:e file.txt

file.txt파일을 불러옴

:e

현재 파일을 불러옴

 

 

입력모드 전환

명령어

설명

a

커서위치 다음 칸부터 입력

i

커서의 위치에 입력

o

커서의 다음 행에 입력

s

커서 위치의 한 글자를 지우고 입력

 

 

이동

명령어

설명

h

왼쪽으로 이동

l

오른쪽으로 이동

j

아래 행으로 이동

k

위 행으로 이동

w

다음 단어의 첫 글자로 이동

b

이전 단어의 첫 글자로 이동

^

그 행의 첫 글자로 이동 Home키와 동일

$

그 행의 마지막 글자로 이동 End키와 동일

gg

문서의 맨 첫 행으로 이동

G

문서의 맨 마지막 행으로 이동

:n

n행으로 이동 (여기서 n은 숫자임)

 

 

삭제

명령어

설명

x

커서 위치의 글자 삭제

dw

한 단어를 삭제

dd

커서가 있는 행을 삭제

 

복사 & 붙이기

명령어

설명

yy

커서가 위치한 한 행 복사

p

붙여넣기

Nyy

N행만큼 복사 (N은 숫자임)

Np

N번만큼 붙여넣기 (N은 숫지임)

 

 

블록 지정 관련

명령어

설명

v

블록 지정 (v를 누른후 h j k l을 통해 블록 지정)

y

복사

d

잘라내기

U

대문자로 만듬

u

소문자로 만듬

 

 

문자열 탐색 및 치환

명령어

설명

/문자열

문자열을 탐색

:%s/old/new/g

문서 전체에서 old를 new로 교체

 

 

파일 버퍼 관련 명령 요약

명령어

설명

:ls

버퍼의 내용을 나열

:bN

N번 버퍼로 이동(N은 숫자임)

:bwN

N번 버퍼를 완전 삭제(N은 숫자며, 없으면 현재의 버퍼삭제)

*여러 파일을 편집하는 방법

$vi file1.c file2.c file.3c 또는 vi *.c

버퍼 1에 file1.c가 들어가고 버퍼 2,3에 각각 file2.c file3.c가 들어가며

vim 명령어 모드에서 :b2를 입력하면 file2.c가 열리게 된다.

 

마킹 및 마킹한 위치로 이동

명령어

설명

ma

a로 마킹, mb는 b로 마킹

‘a

a로 마킹된 위치로 돌아감 ‘c는 c로 마킹된 위치로 돌아감

  





반응형