검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Absolutely Essential Vim/vi Commands

  vi는 고전 유닉스 텍스트 에디터 프로그램이고 Vim(Vi IMproved)은 그것을 개량한 버전입니다. 사실상 현재 (아마도)모든 리눅스에서는 vi가 Vim으로 연결되는 심볼릭 링크이기 때문에 Vim을 사용하고 있다고 할 수 있습니다. 하지만 자세하게 파고들지 않으면 둘을 사용하는 데는 별 차이가 없기 때문에 대략 'Vim = vi'로 생각하셔도 당장은 무방합니다.

vi의 3가지 모드
  vi를 처음 접하는 사람들은 상당히 당황할 수 밖에 없는 그 이유는 텍스트 에디터인데도 그냥 글자를 입력하는 방법부터 다른 에디터와 다르기 때문입니다. vi에는 Insert 모드, Command 모드, Last-line(=Ex) 모드로 총 3가지의 모드가 있습니다.

  Insert 모드는 일반적으로 볼 수 있는 텍스트 에디터의 그 상태와 같습니다. 즉, 키를 누르면 그 키가 입력됩니다. 따라서 모드 자체는 따로 설명할 것이 없습니다. 단, 다른 모드에서 이 모드로 넘어오는 방법을 알아야 입력을 할 수 있겠죠? Command 모드에서 ia를 누르면 이 모드로 전환할 수 있는데 자세한 건 잠시 후 아래에서 알아보겠습니다. 여기서 알아야 할 것은 이 모드에서 아래의 Command 모드로 가려면 Esc를 눌러야 한다는 겁니다.

  Command 모드는 각종 제어를 위한 모드로 일반적인 에디터의 커서 이동, 복사, 붙여넣기 등 입력 등 대부분의 작업을 이 모드에서 할 수 있습니다. 아래에 나오는 내용도 대부분 이 모드에서 실시합니다. vi를 실행하면 이 모드에서 시작합니다.

  Last-line 모드도 Command 모드와 비슷한데 주로 치환과 같이 여러 번 키를 눌러야 하는 작업, 저장, 줄 번호 표시 같이 문서 편집에 있어서 간접적인 작업을 하기 위해 사용합니다. Command 모드에서 :(shift + ;)를 누르면 Last-line 모드로 진입하면서 화면의 마지막 줄에 : 문자와 함께 명령어를 입력할 수 있게 됩니다. Insert 모드와 마찬가지로 Command 모드로 가려면 Esc를 눌러야 한다는 것이 중요합니다.


(1) 커서 이동
  • h - 왼쪽으로 한 칸 이동.
  • l - 오른쪽으로 한 칸 이동.
  • j - 아래로 한 줄 이동.
  • k - 위로 한 줄 이동.
  • w - 한 단어(word) 오른쪽으로 이동.
    ※ 여기서 '단어'의 종류는 숫자와 문자가 조합된 문자열, 그 외 문자의 조합으로 이뤄진 문자열로 2가지가 있다. 따라서 'o1n1e-t2w2o'라는 문장의 맨 왼쪽에서 w를 누르면 '-'에서 커서가 멈추고 다시 w를 누르면 't'에서 커서가 멈춘다. 'o1n1e---t2w2o'의 경우 커서가 첫 번째 '-' 문자에 있을 때 한 번 더 w를 누르면 커서가 다음 '-' 문자로 가는 것이 아니라 't' 문자로 간다.
  • b - 한 단어 왼쪽으로 이동.

(2) 삭제
  • x - 커서 위에 있는 문자 삭제.
  • dw - 커서부터 현재 단어 끝까지 삭제.
  • db - 커서의 왼쪽 문자부터 그 문자를 포함하고 있는 단어의 처음까지 삭제.
    ※ 예를 들어 'abc-def'라는 문자열에서 커서가 'd' 문자에 있다고 할 때 db를 누르면 '-' 문자가 삭제된다. 커서가 '-' 문자에 있다면 'abc' 문자열이 삭제된다.
  • dd - 커서가 있는 줄 삭제.
  • d$ - 커서가 있는 곳부터 그 줄 끝까지 삭제.
  • d0 또는 d^ - 커서의 왼쪽 문자부터 그 줄의 처음까지 삭제.

(3) 복사와 붙여넣기
  • v - 누른 지점부터 커서가 이동하는 곳까지 대상 범위로 지정. 일반적인 윈도우용 에디터에서 Shift를 누르고 커서를 움직이는 것과 동일한 효과.
  • V - 누른 지점부터 커서가 있는 곳까지의 모든 줄 전체를 대상 범위로 지정.
  • Crtl+v - 누른 지점부터 커서가 있는 곳까지 직사각형(칼럼)으로 대상 범위 지정.
  • y - 위에서 지정한 범위를 복사.
  • p - 복사한 내용을 커서 오른쪽에 붙여넣기.
  • P - 복사한 내용을 커서 왼쪽에 붙여넣기.

(4) 검색과 치환(치환은 Last-line 모드)
  • / - 누른 후 검색할 문자열을 입력하고 엔터를 누르면 커서 위치를 기준으로 정방향으로 해당 문자열을  검색. 이후 '/' 문자만 입력하고 엔터를 누르면 다음 검색 위치로 이동.
  • ? - 위의 /와 거의 동일하며 커서 위치를 기준으로 역방향 검색.
  • :%s/old/new/ - 문서 전체에서 'old' 문자열을 'new' 문자열로 치환. 단, 같은 줄에 2개 이상의 'old' 문자열이 있을 경우 첫 번째 문자열만 치환.
    ※ '%' 문자는 global로서 문서 전체를 의미.
  • :%s/old/new/gc - 위와 거의 동일하며 맨 뒤에 'g' 옵션(global)으로 인해 한 줄에 여러 'old' 문자열이 있어도 모두 치환 대상으로 취급한다는 것과 'c' 옵션(confirm)으로 인해 치환 전마다 치환 여부를 물어본다는 것이 다르다.
    ※ %와 g 옵션 모두 global이라는 뜻이지만 효과는 다르다.
  • :1,15s/old/new/gc - 문서 전체 대신 1번째 줄에서 15번째 줄까지만 치환 대상으로 함.

(5) 실행 취소와 재실행
  • u - 실행 취소. 윈도우의 Crtl+z와 동일.
    ※ Vim이 아닌 vi(그리고 vi 호환 모드로 실행되고 있는 Vim)는 바로 이전 명령만 실행 취소가 가능.
  • Crtl+r - 재실행. 윈도우의 Ctrl+y와 동일.

(6) 저장과 종료(모두 Last-line 모드)
  • :w - 저장.
  • :q - 종료.
  • :wq - 저장 후 종료.
  • :q! - 저장하지 않고 종료.
  • :w newfile - 'newfile'이라는 새 이름으로 저장. 원본 파일은 그대로 존재.
2010/12/04 18:10 2010/12/04 18:10