개요


Vim = 모달(modal) 에디터. 상황에 따라 모드가 바뀌고, 같은 키가 모드마다 다르게 동작한다. 거의 모든 리눅스 서버에 기본 설치돼 있어, 원격에서 파일을 고칠 때 최소한의 손감각이 필요하다.

  • normal mode = 기본 모드. 이동, 삭제, 복사 등 명령 실행. 실행 직후 이 상태.
  • insert mode = 실제 텍스트 입력.
  • visual mode = 영역 선택.
  • 모드 탈출은 Esc 로 normal 로 복귀.

실행


vi test.py

insert mode 진입


  • i = 커서 에서 입력 (insert)
  • a = 커서 에서 입력 (append)
  • o = 아래에 새 줄 열고 입력

커서 이동


normal mode 에서 이동한다.

  • h / j / k / l = 왼쪽 / 아래 / 위 / 오른쪽
  • H / L = 화면 최상단 / 최하단으로 (M = 화면 중앙)
  • w / e = 다음 단어 시작 / 단어 끝으로 (구두점도 경계로 취급)
  • W / E = 공백 기준 WORD 단위 이동
  • Ctrl + f / Ctrl + b = 한 화면 앞으로 / 뒤로 (forward / back)
  • Ctrl + e / Ctrl + y = 한 줄씩 아래로 / 위로 스크롤 (커서 위치 유지)

normal mode 에서 수정


  • x = 커서 위치 한 글자 삭제
  • d = 삭제 오퍼레이터 (dw 단어 삭제 등 이동키와 조합)
  • dd = 한 줄 삭제
  • y = 복사(yank) 오퍼레이터
  • yy = 한 줄 복사
  • p = 붙여넣기 (paste)
  • u = 실행 취소 (undo)
  • Ctrl + r = 다시 실행 (redo)

시스템 클립보드 연동

  • "+y = 시스템 클립보드로 복사
  • "+p = 시스템 클립보드에서 붙여넣기
  • "+ = 시스템 클립보드 레지스터 지정. (기본 y/p는 vim 내부 레지스터만 사용)

이동 후 수정

  • cib = 현재 줄에 있는 괄호 안 내용을 제거하고 바로 insert mode 로 진입
  • ci" = 현재 줄에 있는 문자열 안 내용을 제거하고 바로 insert mode 로 진입
  • ciw = 현재 커서에 있는 전체 word 를 제거하고 바로 insert mode 로 진입
  • da" = 현재 줄에 있는 문자열("something")을 잘라냄
  • I = 현재 줄 맨 앞에서 insert mode 로 진입
  • A = 현재 줄 맨 마지막에서 insert mode 로 진입

저장, 종료


  • :w = 저장 (write)
  • :q = 종료 (quit)
  • :wq = 저장 후 종료
  • :wq! = 저장 후 강제 종료
  • :q! = 저장 안 하고 강제 종료

여러 줄 동시 수정


VISUAL BLOCK 로 여러 줄에 같은 편집을 한 번에 적용한다.

  1. Ctrl + v 로 VISUAL BLOCK 진입
  2. G 로 맨 밑까지(또는 j 로 원하는 범위까지) 블록 확장
  3. I 로 문자 삽입 / x 로 문자 제거
  4. Esc 두 번으로 전 줄에 적용

여러 줄 주석 처리


  1. V 로 해당 줄 선택
  2. 5j 로 아래 5줄 더 선택
  3. gc 로 주석 처리/해제

References