vim 모드 전환


앞에서 vim의 모드에 대하여 간단한 포스팅을 올린 바 있다. 그 내용은 명령(command) 모드편집(insert) 모드가 있다는 것이다. 


대부분의 작업은 명령 모드에서 이루어진다. 편집 모드는 글자를 입력하는 역할만 하고, 편집, 수정, 삭제, 각종 명령 등 모두 명령 모드에서 이루어진다. 따라서 vim에서의 작업은 명령 모드와 편집 모드의 끊임없는 전환의 형태로 이루어지고 이것에 익숙해져야 한다. 



편집 모드 → 명령 모드


편집 모드에서 명령 모드로 전환하는 키는 Esc 키다. 그런데 Esc 키가 키보드에서 누르기 어려운 위치에 있으므로 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다Ctrl 키를 누른 상태에서 [ 키를 누른다.)


편집 모드에서 Esc 키, <Ctrl+[> 키를 누르면 명령 모드로 전환



명령 모드 → 편집 모드


명령 모드에서 편집 모드로 전환할 때는 필요에 따라 사용할 수 있는 다양한 방식이 있다. 

아래의 사례들은 모두 명령 모드에서 누르는 단축키다. 커서의 위치에 주목해서 살펴보자.


i i(insert)는 현재 커서 위치에서 편집 모드로 전환한다.

I have a dream! i를 누른다.

I have a dream! → 커서의 위치는 바뀌지 않고 편집 모드로 변경


a a(append)는 현재 커서 위치 다음 칸에 첨가되고 편집 모드로 전환

I have a dream! a를 누른다. 

I have a dream! → 커서가 한칸 오른쪽으로 이동해서 편집 모드로 전환


A 현재 커서가 위치한 행의 끝에서 첨가되고, 편집 모드로 전환

I have a dream! A를 누른다.

I have a dream!  → 현재 행의 끝으로 이동해서 첨가


I I는 현재 행의 맨 앞으로 커서가 이동해서 편집 모드로 전환

I have a dream! I를 누른다.

I have a dream! → 현재 행의 맨 처음으로 이동해서 끼워넣기


s 커서가 위치한 글자를 지우고 편집모드로 전환

I have a dream! s를 누른다.

I have a drem→ 커서가 위치한 글자가 지워짐


o o(open line)는 커서가 있는 행 아래에 새로운 행을 만들어 커서를 위치시킨 후 편집 모드로 전환

 

아래의 상황에서 o 키를 누른다.

 

I have a dream!

I want to be an excellent programmer.

 

원래 커서가 있던 행의 아래에 새로운 행이 생기고 커서의 위치가 새로운 행의 처음으로 이동한다. 편집 모드로 전환된다.

 

I have a dream!

   

I want to be an excellent programmer.


O 커서가 있는 행 위에 새로운 행을 만들어 커서를 위치시킨 후 편집 모드로 전환

 

아래의 상황에서 O 키를 누른다.

 

I have a dream!

I want to be an excellent programmer.

 

원래 커서가 있던 행의 위에 새로운 행이 생기고 커서의 위치가 새로운 행의 처음으로 이동한다. 편집 모드로 전환된다.

 

I have a dream!

   

I want to be an excellent programmer.


cc 커서가 위치한 행이 지워지면서 편집 모드로 전환

다음과 같은 상황에서 cc를 누르면 그 행의 내용이 전부 지워지면서 편집모드로 전환

I have a dream!

I want to be an excellent programmer.

 

I have a dream!

                → 기존의 있던 내용이 전부 지워지고 커서가 처음으로 이동되면서 편집모드로 전환


r 명령 모드에서 한 글자만 바꿀 때 사용한다. 한 번 글자키를 눌러 변경하면 다시 명령 모드로 돌아와 입력이 되지 않는다.

 

want → 명령 모드에서 r을 누르고 c를 누르면

cant → 기존의 w자가 c자로 변함



R → 명령 모드에서 R키를 누르면 바꾸기 모드가 되면서 원래 있던 글자를 덮어 쓰면서 입력된다

 


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



vi는 1976년에 태어난 에디터이다. 


마우스는 아직 만들어지지 않았고 모든 것을 키보드 위의 자판만을 이용해서 에디터를 조작해야 하는 시절이었다. 


그런데 키보드의 자판은 대부분 글자를 입력하는데 사용되어야 하니 자판을 타이핑 외 다른 조작에 사용하려면 별도의 명령 모드(command mode)를 만들 수밖에 없다.


그래서 vi명령(command) 모드와 타이핑으로 글자를 입력하는 편집(insert)모드를 갖고 있는 것이고 오늘날까지 이어져  vim도 동일한 모드를 갖고 있게 된 것이다.


우선, vim을 실행해보자. vim이 설치되어 있다면 다음과 같이 명령하여 실행한다. 


$ vim


다음과 같은 화면이 보인다. 




이 화면에서 여러 키를 눌러보면 자판이 입력되지 않는다는 것을 알 수 있을 것이다. 


왜냐하면 현재, vim명령 모드이기 때문이다. 


타이핑을 하고 싶다면 키보드에서 i 키를 눌러 편집 모드로 들어간다.


'끼워넣기' 또는 'insert' 표시가 나타나면 편집 모드에 들어온 것이다. 


이 상태에서 "Hello everyone!  :D" 라고 타이핑 한 것이 아래의 화면이다. 



타이핑이 끝나면 [Esc] 키를 눌러 다시 명령 모드로 돌아온다.


이제 vim을 종료해야 한다. 명령 모드에서 다음과 같이 :q!를 입력한다.


:q!



그러면 화면 하단의 가장 마지막 줄에 동일한 명령어가 입력되는 것을 확인할 수 있다. 


이 상태에서 [enter]를 눌러 명령어를 입력하면 vim이 종료된다.



vim명령 모드표준으로 채용하고 있다. 왜냐하면 실제로 vim을 사용해보면 커서의 이동같은 사소한 행위부터 다른 파일을 병합하고 셸 명령을 실행시키는 일까지 대부분의 작업이 명령 모드에서 이루어지기 때문이다. 오히려 타이핑으로 글자를 입력하는 작업은 생각외로 많지 않다. 그래서 모든 작업을 명령 모드에서 수행하다가 필요할 때마다 잠깐씩 편집 모드로 들어가서 입력하고 다시 명령모드로 돌아와서 작업하는 식으로 일이 이루어지는 경우가 많다. 아마도 이런 모드 전환을 하는 방식에서 vim을 처음 사용하는 사람들이 크게 이질감을 느끼고 익히기를 포기하는 경우가 많이 발생한다. 


나중에라도 간단하게 기억을 환기시키기 위하여 Anki 파일을 만들었으니 이용하고 싶으신 분은 다운로드 하시면 됩니다. 


001 vim의 모드.apkg


+ Recent posts