Vim 에디터 명령어 정리

2021년 09월 20일 (2달 전)
리눅스에서 텍스트 편집을 할 때면 그나마 접근성이 좋았던 nano 에디터를 이용해왔는데, nano는 별도로 설치해야 사용할 때도 있고, Vim 에디터 기능이 더 좋은 것 같아 Vim 에디터 명령어를 정리해 보려고 한다.

에디터 모드

  • 명령 모드 (command mode) - 다양한 명령을 내리는 모드이다
  • 입력 모드 (insert mode) - 텍스트를 자유롭게 편집하는 모드이다
  • EX 모드 (ex mode) - vi의 특별한 명령어를 실행하기 위한 모드이다
  • 비쥬얼 모드 (visual mode) - 이런 게 있다곤 하지만 잘 모르겠고, 몰라도 될 것 같다

명령 모드에서 입력 모드로 전환

Vim 에디터를 실행하면 처음엔 명령 모드이므로 아래 키워드 중 하나를 입력하면 입력 모드로 전환이 가능하다.

  • a : 커서 다음(오른쪽)에 입력
  • A : 행 마지막 부분에 입력
  • i : 커서 앞(왼쪽)에 입력
  • I : 행 처음 부분에 입력
  • o : 커서 밑에 빈 행을 추가하여 입력
  • O : 커서 위에 빈 행을 추가하여 입력
  • s : 커서에 있는 글자를 지우고 입력

입력 모드에서 명령 모드로 전환

명령 모드에서 입력 모드로 들어왔으니 반대로 <ESC> 키를 통해 나가는 것이 가능하다.

아래 명령어는 명령 모드에서 사용할 수 있는 명령어들이다.

커서 이동

  • h, j, k, l : 좌, 하, 상, 우 커서 이동하기 (방향 키가 없는 키보드에서 사용)
  • w : 다음 단어의 첫 글자로 이동하기
  • b : 이전 단어의 첫 글자로 이동하기
  • G : 마지막 행으로 가기
  • :숫자 : 지정한 숫자 행으로 이동하기

삭제

삭제된 내용은 버퍼에 저장되어 붙여넣기가 가능하다.

  • x : 커서에 있는 글자 삭제하기
  • X : 커서 앞에 있는 글자 삭제하기
  • dw : 커서를 기준으로 뒤에 있는 단어 글자 삭제하기 (커서 포함) (ex: 5dw)
  • db : 커서를 기준으로 앞에 있는 단어 글자 삭제하기 (ex: 7db)
  • dd : 커서가 있는 라인(줄) 삭제하기 (ex: 9dd)

복사

  • yw : 커서를 기준으로 뒤에 있는 단어 글자 복사하기 (커서 포함)
  • yb : 커서를 기준으로 앞에 있는 단어 글자 복사하기
  • yy : 커서가 있는 라인(줄) 복사하기

명령 앞에 복사할 숫자를 지정할 수 있다. ex) 3yw, 2yb, 4yy

붙여넣기 (복사, 삭제된 내용을 붙여 넣는다)

  • p : 커서 다음에 붙여넣기
  • P : 커서 이전에 붙여넣기

찾기

  • /문자열 : 앞에서부터 문자열을 찾기
  • ?문자열 : 뒤에서부터 문자열을 찾기
  • n : 뒤로 검색
  • N : 앞으로 검색

바꾸기

  • :%s/old/new - 각 행의 처음 나오는 old를 찾아 new로 바꾸기
  • :%s/old/new/g - 모든 old를 찾아 new로 바꾸기
  • :%s/old/new/gc - 모든 old를 찾아 new로 바꾸기 전에 물어본다

되돌리기(Undo), 다시 실행(Redo)

  • u : 이전으로 되돌리기
  • Ctrl + r : 되돌리기 한 것은 다시 실행하기

EX 모드

명령 모드 상태에서 :(콜론)을 입력한 명령어를 지원한다.

저장, 나가기

  • :q - 종료하기
  • :q! - 저장하지 않고 그냥 강제로 종료하기
  • :w - 저장하기
  • :w 파일명 - 현재 편집 중인 내용을 지정한 파일명으로 저장하기
  • :w >> 파일명 - 현재 편집 중인 내용을 지정한 파일의 내용에 추가하기
  • :w! - 강제로 내용을 저장하기
  • :wq - 저장하고 종료하기
  • :wq! - 강제로 저장하고 종료하기
  • :x - 파일 내용이 변경된 경우 저장 후 종료하기
  • ZZ - 저장하고 종료하기 (:wq와 동일)

유용한 기능들

  • :set number, :set nu - 행번호를 출력하기
  • :set nonumber, :set nonu - 행번호를 숨기기
  • :cd - 현재 디렉토리를 출력하기

참고

https://blog.lael.be/post/7321
https://dololak.tistory.com/379