Home » vi 기본 사용법

vi 기본 사용법

vi은 대부분의 유닉스나 리눅스 시스템에 설치되어 있다고 믿어도 좋을만큼 널리 퍼져있는 텍스트 편집기이고, 매우 오랜 역사를 가지고 있는 텍스트 편집기이다. 일견, 상식적으로 이해가 힘들 것 같은 조작법 때문에 재미삼아 열어봤다가는 메뉴 등등 익숙한 문서 편집 프로그램에서 볼 수 있는 UI도 없기 때문에 낭패를 보기 십상이지만, 터미널에서 텍스트 파일을 작성하거나 편집할 때 유용하게 사용할 수 있다. 익혀두면 좋을 뿐더러 엄청 편리한 기능들을 제공하기 때문에 오늘날에도 많은 개발자들의 사랑을 받고 있는 편집기..라고 한다.
텍스트로 구성된 설정파일이나 하다 못해 hosts 파일 수정에는 더 없이 깔끔하니 좋은 프로그램이다보니 한 번쯤은 사용법을 익혀서 정리해 둘 봄 즉도 해서 정리한다.

기본 컨셉

vi는 일반적인 메모장과는 완전히 다른 인터페이스를 가지고 있다. 모든 것이 ‘명령’으로 이루어지고 이들 ‘명령’은 키를 누르는 것으로 입력된다. 또한 이 ‘명령’들은 간소하나마 자신만의 문법을 가지고 있다. 텍스트를 입력하는 것은 명령모드에서 입력모드 (insert mode)로 전환한 후에야 가능하며, 다시 명령 모드로 돌아가기 위해서는 ESC 키를 눌러 준다. vi의 화면 맨 아래에는 현재 상태를 표시해주는 줄이 있다. 이 줄에서 insert 가 표시되는지 안되는지를 눈여겨 보면 좋다.
vi는 터미널에서 vi 명령으로 실행할 수 있고, 다음처럼 파일 이름을 덧붙여 준다. 파일이 존재하는 경우에는 그 파일을 열고, 새로운 파일 이름인 경우에는 파일을 생성한다.

vi ~/mytext.txt

커서 이동

vi에서는 커서 이동도 하나의 명령이다. 이 개념을 이해 못하면 완전 낭패를 볼 수 있다. 물론 ㅍ플랫폼이나 버전에 따라서 약간 다를 수는 있는데 기본적으로 화살표 키가 아닌 h,j,k,l 키로 커서 이동을 한다. 한 번에 한 칸씩 이동하는 게 좀 답답하니까 몇 가지 추가적인 기능을 더해 제공해고 있다. 최소한 이 이동에 관한 내용은 외워줘야 한다.

  • 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를 지원하는 듯. 이쯤에서 메모장이 더 이상 아쉽지 않기 시작한다.

저장과 종료

편집이 아닌 파일에 접근하는 등의 명령은 : 로 시작한다. : 를 입력하면 화면 맨 아래에 : 가 입력되고 명령을 수행할 준비를 한다. 아래는 저장 종료 및 기타 유용한 명령들이다.

  • :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는 언뜻 처음에 볼 때는 사용하는 사람이 이해가 가지 않는 동작 방식 때문에 적잖이 당황스러울 수 있는데, 역시나 익숙해지려 조금만 노력하면 상당히 강력한 도구가 될 수 있을 것 같다.
vim을 별도로 설치한 경우에는 tutor 모드가 있는데, 이를 실행해서 기본적인 이동이나 편집 방법만 익혀두면 매뉴얼을 일일이 찾아보면서 익히는 것보다 훨씬 더 빠르고 효과적으로 배울 수 있다. (vi를 좀 사용할 일이 있다면 이를 적극 권장함)
끝으로 vi는 도저히 못쓰겠다. 그런데 터미널에서 파일 편집은 할일이 있다… 는 사람들은 nano 를 대신 쓰면 된다. nano는 그나마 비교적 메모장에 가깝게 생긴 프로그램이다. (ctrl+N 등과 같은 방식의 단축키도 지원하고 있고…)

“vi 기본 사용법”의 7개의 댓글

  1. 핑백: 6. WordPress 설치 – Hokmouse

  2. 감사합니다. 긁어 갑니다. 어제 우분투 14.04 설치하고 다시 공부 모드로 가면서… 감사합니다.

  3. vim이나 emacs나 처음 진입장벽이 너무 높죠
    저도 처음에는 vim과 gedit를 겸용해서 사용하다가 vim에 익숙해진뒤로는 윈도우에서조차 vim을 사용하고 있죠
    커서이동이라던지 복사/붙여넣기 등등 여러기능들을 사용하다가 일반 편집기를 사용하면 좀 불편하거든요 흐
    어쨌든 자기한테 가장 손에 익은 편집기를 쓰는게 좋아요

    1. 우분투에서 맥으로 넘어온 이후에도 터미널에서 텍스트 파일을 만져야 할 경우가 많아서 vi를 본격적으로 좀 써보고 있습니다. 최초의 진입장벽은 높게 느껴지는데, 나름 필수적인 명령들만 익숙해지면 금새 편해지더군요. 악명이 높아서 그렇지 두어시간 써보면 어느 정도 기본적인 사용은 금방 손에 익을 수 있다고 봅니다. 

  4.  잘 읽었습니다. 그런데 저장 안 하고 무조건 중료는 :q! 으로 알고 있습니다…

댓글 남기기