Vim을 이해하려면 vim에 존재하는 여러 가지 모드(Mode)를 이해해야 합니다.
이러한 모드가 vim의 가장 큰 특징이라고 할 수 있습니다. 여러 모드들로 인해 강력한 기능을 수행할 수 있지만 vim을 배우려는 사람들에게 진입장벽이 되는 것도 사실입니다.
때문에 vim의 러닝커브(Learning curve)는 다른 에디터에 비해 남다를 수 밖에 없는데요.
이를 재밌게 표현한 그림이 있어서 소개해드립니다.
조금 과장되긴 했지만 그만큼 vim과 emacs가 강력하지만 익숙하게 다루는 게 힘들다는 것을 잘 표현하고 있네요.
사실 저도 vim을 처음 실행했을 때 바로 문서 편집이 안되서 당황했던 기억이 납니다.
그럼 이제부터 vim의 모드에 대해 간략하게 설명드리겠습니다.
vim에는 굉장히 다양한 모드가 있는데요, 이 중에서 오늘 소개해드릴 일반 모드, 입력 모드, 명령라인 모드, 비주얼 모드만 이해해도 vim을 사용하는 데에는 크게 지장이 없습니다.
1. 모드 종류
1.1 일반 모드 (Normal Mode)
일반 모드는 키 입력을 통해 vim에 명령을 내리는 모드입니다.
커서를 이동하거나 삭제, 복사, 붙여넣기 등의 작업을 수행할 수 있습니다. 보통의 에디터는 처음 실행하면 편집이 가능한 상태로 실행이 되지만 vim은 일반 모드로 실행이 되기 때문에 바로 편집이 불가능합니다.
이러한 점 때문에 vim을 처음 접하는 사람들을 당황하게 만들곤 합니다.
1.2 입력 모드 (Insert Mode)
입력 모드는 실제로 문서를 편집하기 위한 모드입니다.
입력 모드에서 키보드로 타이핑 하면 화면에 글자들이 출력되면서 편집되는 것을 볼 수 있습니다.
다른 일반적인 에디터의 기본 모드와 같다고 보시면 됩니다.
1.3 명령라인 모드 (Command-line Mode)
명령라인 모드는 명령 입력으로 여러 가지 일을 수행할 수 있는 모드입니다.
vim의 설정을 바꾼다거나 다른 파일을 열 수도 있고 저장도 할 수 있습니다.
편집중인 문서 내에서 특정 패턴으로 검색을 하거나 외부 명령을 수행도 가능합니다.
vim의 종료 또한 명령라인 모드에서 q 명령어를 입력하는 것인데요. 이러한 vim의 종료 방법을 몰라 2년째 vim을 사용중이라는 풍자 트윗이 화제가 되기도 했습니다.
1.4 비주얼 모드 (Visual Mode)
vim에서 대부분의 명령을 수행할 때에는 범위를 지정할 수 있습니다.
문서 전체를 지정하거나 특정 행 또는 특정 행으로부터 N개의 행 등 다양한 방법으로 범위를 지정할 수 있습니다.
이런 방법은 범위를 지정할 때 범위의 시작과 끝을 명시해줘야 하는 불편함이 있기 때문에 비주얼 모드가 탄생하게 되었습니다.
비주얼 모드에서는 마치 마우스로 드래그 해서 범위를 지정하듯이 커서 이동을 통해 블록 단위로 범위를 지정할 수 있습니다.
2. 모드 전환
vim의 모드 전환은 위 그림 처럼 일반 모드에서 특정 키를 입력 했을 때 이루어집니다.
입력 모드로의 전환은 i, a, o, s 키 등으로 할 수 있습니다. 키 입력에 따라 커서 위치가 달라지니 직접 한번 해보세요. linux 기반의 대부분의 동작이 대소문자를 가리듯이 vim도 대소문자에 따라 동작이 달라지니 주의하시기 바랍니다.
2.1 입력 모드로 전환
world에서 'w' 문자 위에 현재 커서가 있을 때 입력모드 진입 시의 위치를 표시했습니다. 보시다시피 대소문자가 구별되어 전혀 다른 동작을 하는 것을 알 수 있습니다. o(소문자), O(대문자) 키 입력시에는 빈 행이 생성되고 커서가 이동된다는 점 참고해주세요.
s(소문자) 키는 현재 커서의 글자 하나를 지우고 그 위치부터 입력 모드가 시작되고,
S(대문자) 키는 현재 커서가 위치한 행을 지우고 입력 모드가 시작됩니다.
R(대문자) 키는 다른 에디터에서 수정 모드와 같이 이후 입력 되는 글자들이 덮어쓰게 됩니다.
2.2 명령행 모드로 전환
명령행 모드로 진입할 때는 일반 모드에서 : 키를 입력 하면 되는데요. 화면 하단에 : 문자와 함께 명령을 입력받는 Prompt 가 표시됩니다.
/, ? 키는 특정 패턴을 검색할 때 사용하는데 /키는 정방향, ? 키는 역방향 탐색입니다.
2.3 비주얼 모드로 전환
비주얼 모드로의 전환은 v 또는 V 키를 통해 가능합니다.
v(소문자)는 현재 커서를 시작으로 블록을 지정할 수 있습니다.
V(대문자)는 현재 커서가 위치한 행부터 행 단위로 블록을 지정할 수 있습니다.
그리고 vim은 열단위 블록 지정을 지원합니다. ctrl + v 키 or ctrk + q (윈도우 환경에서는 ctrl + v 가 붙여넣기 동작이므로 ctrl + q 를 사용하시면 됩니다)를 누르면 현재 커서를 기준으로 열(Column)단위로 블록을 지정할 수 있습니다.
2.3 일반 모드로 전환
일반 모드로의 전환은 ESC키를 눌러서 전환합니다.
입력 모드, 명령행 모드, 비주얼 모드 등의 모드들은 서로 간에 전환이 불가능합니다.
예를들어 입력 모드에서 명령행 모드로 전환하려면 반드시 ESC 키를 눌러 일반 모드로 전환한 후에 전환이 가능합니다.
'프로그래밍 > Vim' 카테고리의 다른 글
[Vim] 이전 명령어 반복 수행 (1) | 2017.03.13 |
---|---|
[Vim] 복사(Copy), 붙여넣기(Paste), 삭제(Delete), 실행취소(Undo) (1) | 2017.03.06 |
[Vim] 커서 이동 (0) | 2017.02.23 |
[Vim] 파일 열기, 저장, 종료 (1) | 2016.12.02 |
[Vim] 소개 (vim의 역사 및 장점) (1) | 2016.11.24 |