vi의 조금 편리한 기능들

사실은 조금 더 강력한 기능이랄까.

반복

  • . – (dot) 구두점은 마지막으로 실행한 명령을 다시 한 번 더 실행해준다. 명령의 반복은 다음과 같이 볼 수 있다.
  • {숫자} {명령} – 명령 앞에 숫자를 붙이면 그 숫자만큼 반복하게 된다. 이동할 때 3 w라고 하면 세 단어를 이동하는 데 이것이 사실은 거의 모든 명령에도 적용될 수 있다.
2dd     # 현재 줄을 포함하여 2줄을 삭제한다.
3p      # 잘라낸 2줄을 3번 붙인다.
100iDescription <ESC>  # 'Description '을 100번 삽입한다.
.       # 위의 것을 1번 더 즉 100번 더 쓴다.
3p      # 100번 쓰는 것을 3번 하니 300번을 더 쓴다.

특정 지점으로 이동

w로 다음 단어의 첫 글자로 이동하거나, e로 단어의 끝으로 이동하는 것 외에 몇 가지 추가적인 이동 명령. 역시 이동 명령은 ‘선택’하는 액션과 동일하게 동작하므로 살펴보면 도움이 된다.

  • f a – 다음에 나타나는 ‘a’로 이동. 3 f a는 다음에 나타내는 a 중 3번째로 이동. 대문자는 역 방향.
  • t a – 다음에 나타나는 ‘a’의 바로 앞으로 이동. 대문자는 역방향.
  • % – 괄호 (대/중/소)에서 입력하면 그에 상응하는 괄호로 이동함. 코드에서 괄호를 안 닫거나 하는 부분을 찾기가 아주 편리하다.
  • ] ) – 다음번 닫는 괄호로 이동한다. 여는 괄호로 이동은 ](. 다른 괄호 종류에 대해서도 동일하게 적용됨
  • ( , ) – 이전/다음 문장
  • {, } – 이전/다음 문단

Visual Mode

비주얼 모드는 텍스트의 일부 구간을 선택하는데 시각적으로 선택된 텍스트를 반전시켜 어떤 텍스트가 선택되는지를 눈으로 보여준다. 비주얼 모드와 비슷하게 비주얼 블록 모드가 있는데 이는 화면상에 사각형 영역으로 (행전체가 선택되지 않게) 선택할 수 있다. (일부 좋은 기능들이 많은 텍스트 편집기들이 이런 기능을 지원하고는 있음)

  • v i – 따옴표로 둘러싼 영역을 모두 선택
  • v a – 따옴표로 둘러싼 영역을 따옴표를 포함하여 선택
  • v – 비주얼 모드 시작. 비주얼 모드를 시작하면 현재 위치로부터 커서를 옮기는 만큼 색상이 반전되며 선택된다. 선택된 내용에 대해 d 나 y 로 오려두기/복사하기를 할 수 있다.
  •  ^v – (Ctrl + v)비주얼 블록 모드. 비주얼 블록 모드는 행 단위가아닌 열 단위로 선택하게 한다.
  • I, A – i, a 의 대문자. 비주얼 블록 모드로 선택한 여러 행에 걸친 위치에 같은 내용을 삽입한다. 예를 들어 1행부터 40행까지의 내용을 “// “으로 주석처리하고자 한다면 다음과 같이한다. (아래 [^v]는 control+v를 말하며 공백은 스페이스바를 입력했음을 의미한다.)
g g 0 ^v 3 9 j I// ESC
  • gg – 1번행으로 간다.
  • 0 – 맨 왼쪽으로 간다
  • [^v] – 비주얼 블록 모드 시작
  • 39j – 39행 아래로 이동하여 40행까지 첫번째 열을 모두 선택
  • I – multiple insert mode 시작
  • //  – “// ” 입력
  • [ESC] – 삽입모드 종료. 40행까지 모두 주석처리가 된다.
  • <,>  – 비주얼 모드에서 선택된 라인들에 대해 좌/우 방향으로 들여쓰기, 내어쓰기를 적용
  • = – 비주얼 모드에서 선택된 라인들에 대해 자동 들여쓰기 (정말 쿨함)

자동완성

insert mode에서 입력중에 ^p를 누르면 이전에 입력한 적 있는 단어 중에서 비슷한 단어를 자동완성해주는 기능이 있다.

창 분할

  • :split – 창을 상/하 분할한다. (분할된 공간에는 새 파일을 만들 수 있다.)
  • :vsplit – 창을 좌/우 분할한다.
  • ^w ^w – 분할된 창 사이를 이동할 수 있다.
  • ^w _ – 현재 창을 최대화 (분할된 공간을 최대화함)
  • ^w | – 현재 창을 최대화 (세로 분할인 경우)
  • :tabnew – 새로운 탭을 만든다.
  • g t – 다른 탭으로 이동한다.