vi 에디터 사용법
목차
vi 에디터는 유닉스 시스템에서 사용하는 텍스트 에디터입니다. 우분투 20.04에는 vi 에디터의 튜토리얼인 vimtutor 로 기초를 학습할 수도 있습니다. (약 30분 소요) vim 은 vi improved를 의미하며 기존 유닉스의 vi 에서 기능을 향상한 프로그램입니다. 우분투에서는 vi나 vim 이나 vim 을 실행시킵니다.
리눅스 시스템의 관리자라면 vi 에디터의 사용법을 필수로 알고 있어야 합니다. 리눅스의 설정파일들은 거의 텍스트 파일로 되어 있어서 vi 에디터로 작업을 합니다. 사용법이 좀 더 간편한 nano도 많이 쓰는데 기능적으로 우수한 것은 vi 에디터입니다. 수많은 기능들이 탑재되어 있기 때문에 사용할 수록 숙련도가 높아지는 것을 경험할 수 있습니다.
윈도우만 사용해본 유저라면 사용법이 익숙하지 않지만, 처음의 불편함을 이겨내면 마우스로 하는 것 보다 빠르게 텍스트를 편집할 수 있습니다.
*아래의 명령어로 vi 에디터를 실행시킵니다. mytext.txt 파일을 생성하여 에디터를 실행합니다.
vi mytext.txt
모드 구분
vi 에디터는 모드가 구분됩니다. 마우스를 사용하여 컨트롤 하는 gui 에디터가 아니기 때문에 특정 키로 모드를 이동해야 합니다. 처음 실행시키면 명령모드(command mode)로 시작합니다. 이 상태에서는 텍스트를 편집할 수 없고 검색, 저장 등 프로그램을 제어하는 기능을 사용할 수 있습니다.
텍스트를 편집하기 위해서는 i (insert) 키를 누르고 편집을 시작합니다. 편집모드(insert mode)에서 다시 명령모드로 돌아오려면 ESC 키를 누릅니다. 편집된 내용을 저장하려면 명령모드에서 :w 를 입력합니다. 프로그램을 종료하는 것은 :q 인데 텍스트 내용에 변경이 있으면 그냥 종료가 되지 않습니다. 내용을 변경하지 않고 종료하는 방법은 :q! 입니다.
편집모드(insert mode) 시작
명령 모드에서 타이핑을 시작하는 방법은 총 6가지가 있습니다. a, A, i, I, o, O 이며 기능은 아래와 같습니다.
명령어 | 동작 |
a | 현재 문자 다음에서 편집(append) |
A | 현재 라인의 맨끝에서 편집 |
i | 현재 문자 앞에서 편집(insert) |
I | 현재 라인 맨앞에서 편집 |
o | 현재 라인 다음 라인에서 편집(new line) |
O | 현재 라인 앞 라인에서 편집 |
여러가지가 많은데 처음에는 소문자 a 나 i 두개 정도를 사용하면 됩니다. 리눅스는 똑같은 일을 하는데 다양한 방법을 제시하는 경우가 많습니다. 자신이 편한 방법을 선택하면 됩니다.
명령모드에서 문자 삭제
명령모드에서 문자를 삭제하거나 교체(replace) 등의 작업을 할 수 있습니다.
명령어 | 동작 |
x | 커서 오른쪽의 문자를 삭제한다 |
X | 커서 왼쪽의 문자를 삭제한다 |
r | 커서 오른쪽의 문자를 대체한다 |
되돌리기 (undo) 다시하기(repeat)
명령모드에서 마지막 동작을 되돌리는 것을 할 수 있습니다.
u는 마지막 동작을 되돌립니다. . (점) 은 마지막 동작을 다시합니다.
라인 복사 붙여넣기 (copy and paste a line)
라인 하나 전체를 복사하고 붙여넣는 것을 명령모드에서 합니다.
명령어 | 동작 |
dd | 현재 라인을 자른다 |
yy | 현재 라인을 복사한다 |
p | 다음 라인에 붙여넣는다 |
P | 앞의 라인에 붙여넣는다 |
(숫자)dd | 숫자 만큼 라인을 자른다 ex (2dd) |
(숫자)yy | 숫자 만큼 라인을 복사한다 ex (3yy) |
저장과 종료
저장에도 다양한 옵션이 있습니다. 명령모드에서 실행합니다.
명령어 | 동작 |
:w | 저장한다(write) |
:w 파일이름 | 파일 이름으로 저장 |
:q | 종료한다(저장 안함) |
:wq | 저장하고 종료 (ZZ 도 동일) |
:q! | 변경사항을 제외하고 종료 |
문자열 검색하기
문자열 검색은 명령모드에서 커서를 기준으로 정방향은 ‘/문자열’ 로 검색하고 역방향은 ‘?문자열’ 로 검색합니다. 문자열을 찾은 후 esc로 명령모드로 복귀 후 n 은 정방향으로 같은 문자열로 이동합니다. 대문자 N은 역방향입니다.
예를 들어 test 를 검색하면 커서를 기준으로 정방향에 ‘/test’ 로 검색할 수 있습니다.
문자열 치환하기
문자열의 치환(replace)은 라인을 지정해서 할 수 있습니다.
:1 s/기존문자열/치환문자열
예를 들어 라인 1에 있는 test 를 text로 바꾼다면 명령모드에서 ‘:1 s/test/text’ 를 입력합니다. :1,$ 를 입력하면 치환의 범위를 전체 라인으로 확대합니다. 여러개의 문자열이 한번에 변경되는데 라인의 첫번째 문자열이 변경됩니다. 한 라인의 모든 문자열을 치환하려면 :1 s/test/test/g 로 g 옵션을 넣어줍니다. 문자열 검색은 다소 tricky 하기 때문에 설명을 많이 읽어 보는 것 보다는 연습을 통해 손에 익히는게 중요합니다.
요약
인터넷 검색엔진에 익숙한 사람은 CLI 텍스트 에디터인 vim 이 손에 익지 않을 수 있습니다. vim 은 사용자의 숙련도에 따라 텍스트 편집의 효율이 올라가며 프로그래밍으로 배우기에 쉽지 않은 정규표현식도 자연스럽게 습득할 수 있습니다. 물론 하루 아침에 vim 의 메뉴얼을 읽고 모든 것을 이해 할 수는 없습니다. 숙련도는 자연스럽게 vim 을 사용하면서 얻게 됩니다.
vim 에는 방대한 기능이 있는데 이 포스팅에서는 기본적인 기능에서 대해서만 다루었습니다. 리눅스의 터미널 모드에 익숙해지려면 친해져야 하는 프로그램입니다. vimtutor 로 도움을 받을 수 있고 상세한 내용은 온라인의 Vim: help.txt (vimhelp.org) 에서 볼 수 있고 vim 프로그램 내에서 :help 명령어로 온라인 도움 파일을 볼 수 있습니다. (인터넷 브라우저 없이 커널 모드만 사용하는 경우) 사용법은 :help 명령어/파일이름 입니다. 예를 들어 :help로 도움 모드로 들어간 후에 열람하려는 페이지를 찾아서 :help usr_20.txt 처럼 입력하면 문서를 볼 수 있습니다.
:help 에 들어가면 매우 방대한 메뉴얼 목록을 볼 수 있는데 인터넷의 다른 메뉴얼 들도 이 문서를 기반으로 작성되었기 때문에 메뉴얼만 잘 읽어도 상세 사용법을 확인할 수 있습니다. 영어라는 점이 장벽이긴 하지만 전부 읽지 않아도 필요한 부분만 찾아서 보면 됩니다.
외부문서
Vim documentation : vim online