본문 바로가기
리눅스

vi 편집기

by 므시칸곰틔군 2017. 7. 17.

vi 사용법


리눅스나 유닉스, 맥 터미널에서 사용하는 에디터라고 생각하면 된다.


입력모드

화면에 원하는 글자를 입력한다.

입력과 삭제

vi에서 텍스트를 입력하는 것은 사실 ‘추가’이다. 추가는 추가 모드로 진입한 후 타이핑을 하면 이 때부터 타이핑되는 글자들은 모두 파일의 내용으로 기록된다.


i – 현재 커서 위치에서부터 텍스트 삽입을 시작한다.

<ESC> –  esc키를 누르면 삽입 모드를 빠져나가 명령모드로 진입한다.

a – append. 현재 커서 위치 다음 글자부터 텍스트를 붙여 준다.

o – 현재 커서의 바로 다음에 새 줄을 추가하고 다음줄에서 바로 삽입모드로 전환된다.

O – (shift + o) 커서의 바로 위에 새 줄을 추가해준다.


명령모드

커서를 이동하여 글자를 삭제 또는 교체하고문자열을 검색하는 모드로 다양한 편집을 가능하게 한다.



j – 한 칸 아래로 이동

k – 한 칸 위로 이동

h – 한 칸 왼쪽으로 이동

l – 한 칸 오른쪽으로 이동

w – 한 단어만큼 앞쪽으로 점프 (여기서 앞쪽이란 문서를 써나가는 방향이다.)

b – 한 단어만큼 뒤쪽으로 점프

0 – (숫자 0) 현재 줄의 시작지점으로 점프

$ – 현재 줄의 끝 지점으로 점프

^ – 현재 줄에서 공백이 아닌 첫 글자로 점프

g g – 파일의 맨 첫줄로 점프

G – (shift + g) 파일의 맨 끝으로 점프

(숫자)G – 해당 번호의 행으로 점프

^f – (ctrl+F)다음 페이지로 이동. 특히 도움말을 볼 때 유용하다.

^b – 이전 페이지로 이동.

각각의 키들은 단순히 방향키를 치환한 것이 아니라 하나의 명령이다. vi에서 재밌는 것은 숫자와 함께 사용하여 명령을 실행할 수 있다. 예를 들어 h 는 한 칸 왼쪽으로 이동하는데, 8h 라고 입력하면 8칸 왼쪽으로 이동할 수 있다. 같은 방법으로 9j 는 9줄 아래로 이동한다.




입력과 삭제

vi에서 텍스트를 입력하는 것은 사실 ‘추가’이다. 추가는 추가 모드로 진입한 후 타이핑을 하면 이 때부터 타이핑되는 글자들은 모두 파일의 내용으로 기록된다.


i – 현재 커서 위치에서부터 텍스트 삽입을 시작한다.

<ESC> –  esc키를 누르면 삽입 모드를 빠져나가 명령모드로 진입한다.

a – append. 현재 커서 위치 다음 글자부터 텍스트를 붙여 준다.

o – 현재 커서의 바로 다음에 새 줄을 추가하고 다음줄에서 바로 삽입모드로 전환된다.

O – (shift + o) 커서의 바로 위에 새 줄을 추가해준다.

삭제

삭제는 커서를 기준으로 글자를 지우거나, 단어를 지우거나 하는 등의 동작이다. 재밌는 것은 입력모드에서는 백 스페이스 키를 눌러서 입력하던 글자를 얼마든지 지울 수 있는데, 입력모드가 끝나고 나면 삭제 명령으로 지워야 한다. (백스페이스키는 보통 왼쪽으로 이동하는 것과 동일하게 작동하는 경우가 많다.)


x – 커서가 위치한 곳의 글자를 지운다.

d h – 커서가 위치한 곳에서 부터 한칸 앞쪽으로 지운다. delete + h 인 셈인데, 이를 활용하여 d3h 하면 현재 커서 위치로 부터 3칸 앞의 글자들을 지울 수 있다. 즉 d 와 이동 명령을 결합하여 커서가 지나가는 자리만큼을 지운다.

d j – 현재줄을 포함하여 다음 줄까지 2줄을 지우게 된다.

d d – 가장 많이 쓰는 것은 아마 현재 줄을 지우는 경우일 것이다. dd는 현재 줄을 지운다.

삭제는 사실 “오려두기”이다. 이는 뒤에서 다시 설명하겠다.


고치기

오타를 수정하거나 하려면 덮어쓰기를 시전하면 된다. 다음과 같은 명령들이 있다.


r – 현재 커서 위치에서 한 글자만 바꾼다. 커서가 위치한 곳의 글자가 a 인경우 rb 라고 누르면 a가 b로 바뀐다. 한글자만 딱 입력받아 바꿔준다.

R – 수정모드가 되어 ESC를 누를 때까지 현재 줄의 내용을 수정해 준다. 재밌는 것은 수정 모드에서는 백스페이스키를 누르면 입력한 글자가 지워지는 것이 아니라 기존에 있던 글자로 되돌아간다는 점이다.

c –  change로 이동 명령과 결합하여 한 글자를 지우고 입력모드가 된다. 즉 커서위의 글자가 입력한 글자들로 바뀌게 된다. cl 이라고 입력하면 커서위의 글자가 지워진다.

c w – c+w로 커서 위치부터 그 단어의 끝까지가 새로 입력한 글자들로 대체된다. 즉 change + w로 실행되었다고 보면 된다. 비슷하게 c $ 하면 커서 위치부터 그 줄 끝까지를 지우고 새로 쓰게 되는 것이다.

C – c$와 같다.

s – cl 과 같다. 한 글자만 지우고 입력한다.

S – 줄 전체를 새로 쓴다. s는 아마 subtitute의 머리글자인 것 같다.

복사와 붙이기

복사 명령은 y 이다. y y는 현재 라인을 복사하고, 2 y y는 현재 라인을 포함한 두 줄을 복사한다.


y – 복사 시작. y 다음에 이동 명령을 조합하여 복사할 범위를 지정한다.

y w – 단어 끝까지 복사

y $ – 현재 줄의 끝까지 복사

p – 붙여 넣기. 만약 줄을 복사하였다면 현재 커서위치가 아닌 바로 아래쪽에 줄이 붙는다.

또한 x, d 등을 통해 삭제한 글자들은 모두 ‘오려두기’로 지우고 메모리에 저장되어 있으므로 p를 사용하여 붙여넣을 수 있다.


되돌리기

u – 한 번의 변경을 되돌릴 수 있다.

U – 한 줄에 대해 변경사항을 모두 되돌린다.

^r – (ctrl+R) 되돌린 내용을 다시 적용한다.

되돌리기도 물론 지원하고 있다. 기본적으로 약 50번 정도의 undo를 지원하는 듯. 이쯤에서 메모장이 더 이상 아쉽지 않기 시작한다.


라인모드

esc키를 누르고 콜론(:)을 입력하여 저장, 편집, 검색 등 다양한 기능을 제공한다.



:cd – 현재 디렉토리를 보여준다.

:cd _PATHNAME_ – 다른 디렉토리로 변경한다.

:!{shell command} – 쉘 명령를 vi 안에서 실행한다. :!ls 하면 현재 디렉토리의 파일 목록을 확인할 수 있다. 명령 실행이 완료되면 엔터를 눌러 복귀한다.

^g : 현재 행 번호를 보여준다.

:w – 현재 내용을 디스크에 기록한다.

:w __FILEPATH__ – 현재 내용을 다른 이름으로 저장할 수 있다.

:q – 종료한다. 만약 편집된 내용이 있다면 종료가 안된다.

:wq – 저장 후 종료한다.

:q! – 무조건 종료한다. 편집한 내용은 기록되지 않는다.

Z Z – 내용을 저장하고 종료한다.

찾기와 바꾸기

/ – 패턴을 검색할 수 있다. 패턴은 당연히! 정규식을 지원한다. 점점 메모장과는 다른 세상이다.

n – 다음 검색 결과로 이동한다. 파일 끝까지 이동했다면 다시 맨 처음 검색 결과로 돌아간다.

N – 이전 검색 결과로 이동한다.

: %s/old/new – old를 찾아 new로 바꿔준다.

: %s/old/new/g – 전체를 검색하여 한 번에 모두 바꾼다.

: %s/old/new/gc – 위와 같은데 바꿀 때 마다 물어보게 한다. (c는 confirmation)

도움말 사용하기

vi 나름 잘 문서화된 도움말도 제공하고 있다. 도움말을 실행하는 명령은 :help 이다. 이 명령에는 다른 명령을 붙여 해당 명령의 도움말을 바로 확인할 수 있는 기능도 있다.


:help – 도움말을 시작한다. 도움말은 분리된 창의 형태로 보인다.

:help :cd – :cd 명령에 대한 도움말을 볼 수 있다.

^] – 도움말내의 각 인덱스는 |01.1 인덱스제목| 과 같은 식으로 표시되는데, 커서를 이곳으로 옮기고 ^] 를 누르면 해당 항목으로 바로 이동한다.

^t – 위에서 이동한 방식으로 문서를 탐색하다가 다시 되돌아가는 기능이다.

^w ^w : 분리된 창 사이를 이동할 수 있다. (컨트롤 키를 누른 상태로 w키를 두 번 누른다)

간략히 살펴본 바와 같이 vi는 언뜻 처음에 볼 때는 사용하는 사람이 이해가 가지 않는 동작 방식 때문에 적잖이 당황스러울 수 있는데, 역시나 익숙해지려 조금만 노력하면 상당히 강력한 도구가 될 수 있을 것 같다.



'리눅스' 카테고리의 다른 글

tightvnc 설치  (0) 2017.10.10
우분투 코드이그나이터 index.php 사라지게 하기.  (0) 2017.08.31
리눅스 우분투 cli 부팅  (0) 2017.07.24
리눅스 명령어 정리.  (0) 2017.05.25
우분투 16.04 APM 설치.  (0) 2017.02.13