여기서는 외우는 것을 목표로 하기 위해, 자주 쓰이는 기능이나 상황을 적어놓자.

개행 문자 지우기

vim에서는 개행 문자를 지우는 기능이 없다. x는 현재 커서의 글자를 삭제하고 X는 현재 커서가 위치한 바로 전 글자를 삭제한다. 노멀 모드에서 커서는 항상 문자 위에만 올라갈 수 있으므로, vim에서는 개행 문자를 지울 수 있는 상황 자체가 만들어지지 않는다. 개행 문자 위에 커서를 올릴 수가 없으니까.

J키를 이용하면 현재 커서가 위치한 라인 뒤에 아래 라인을 끌어올려 붙인다. 따라서 개행 문자를 지우는 효과를 가진다. 어차피 개행 문자를 지운다는 것이 그런 의미기도 하다.

J: Join lines

그럼 J와 관련된 단축키를 정리해 보자.

  • J: 현재 라인을 바로 아래 라인과 붙인다. 바로 아래 라인에 공백이 많더라도 붙이면 공백 한 칸으로 취급하여 붙인다.
  • gJ: J와 같은 기능을 하는데, 공백 처리를 하지 않는다. 즉 공백이 많으면 많은 그대로 뒤에 붙인다.
  • vJ, vgJ: 비주얼 모드 블록을 지정한 상태에서 J를 누르면 블록 지정된 라인을 다 붙인다. g는 공백 처리 여부를 결정한다.
  • 10J, 10gJ: 10라인을 붙인다. 10라인 비주얼 블록 J와 같은 동작을 한다. g는 공백 처리 여부를 결정한다.

비주얼 블록의 한계

보통 세로 블록을 지정하기 위해서 C-v를 사용한다. 그리고 블록 모드에서도 w를 통해 한 단어를 선택할 수 있는데, 얼핏 생각해 보면 비주얼 블록 상태에서 w를 눌러 각 라인의 단어를 선택할 수 있을 것 같다. 예를 들어 매우 편리한 서브라임 텍스트에서의 세로 블록처럼 말이다. 하지만 이렇게 선택은 되지 않는데, vim에서의 visual block은 직사각형으로만 지정되기 때문이다.

따라서 vim에서는 서브라임 텍스트처럼 화려하게 세로 블록을 지정하거나 커서를 둘 수가 없다.

멀티 커서 동시편집

예를 들어 IDE에서 보통 Refactoring이라 해서, 파일 내에서 여러 단어를 찾고 이를 동시에 편집하는 기능이 있다. 서브라임 텍스트에서도 모두 찾기로 단어를 찾으면 커서가 찾은 단어 수 만큼 생겨서 바로 편집할 수 있는데, vim에서는 이것이 좀 어렵다. 그래서 정규 표현식으로 한 번에 바꾸는데, 이를 간단히 해결하기 위해서 vim-multiple-cursors 플러그인을 사용해볼 수 있다.

multiple-cursors

와 이건 진짜 편하다! vim 아무리 잘 쓴다고 하는 사람도 이건 무조건 쓸 것 같다.

특정 라인으로 이동하기

vim에서 특정 라인으로 이동하기 위해서는 :를 눌러 원하는 해당 라인의 숫자를 입력하면 이동할 수 있는데, 이렇게 하지 말고 숫자와 gg, G를 조합하자. 따라서,

  • 48G: 48라인으로 이동
  • 48gg: 48라인으로 이동

그러면 현재 커서보다 아래에 있는 라인으로 이동하려면 G를, 위로 이동하려면 gg를 사용해야 하나? 라고 생각해볼 수 있는데, 전혀 상관없다. 개인적으로는 G만 사용하는데, 왜냐 하면 타이핑을 한번 덜 해도 되기 때문이다.