vim의 커서 이동 키


일반적인 텍스트 에디터와 마찬가지로 vim에서도 화살표 키를 눌러 커서를 이동할 수 있다. 그렇지만 vim은 명령 모드에서는 h, j, k, l 키들을 화살표 키처럼 사용할 수 있다


소문자 k =

소문자 h =

소문자 l =

소문자 j =


hjkl 과 화살표를 단순하게 매칭하면 낯설기 때문에 이 키들을 아래처럼 시계방향으로 그려보면 조금 편하게 익숙해진다.


      k()

()h          l()

       j()


화살표 키는 명령 모드와 편집 모드에서 전부 사용할 수는 있지만 hjkl은 명령 모드에서만 사용된다. 그럼, 화살표 키를 쓰는 것이 편하고 더 낫지 않을까?

 

아쉽지만, vim을 공부하다 보면 hjkl과 결합된 단축키가 많이 등장한다. 또, vim에서는 대부분의 명령어 앞에 숫자를 붙여서 동일한 명령을 수회 반복할 수 있는데 이렇게 숫자를 결합해서 쓸 경우에도 hjkl 이 더 유리하다. 마지막으로, hjkl 에 익숙해지면 손이 키보드의 중심에서 벗어나지 않아 빠르고 효율적이 되기 대문에 결국 hjkl에 익숙해지는 것이 좋다.

 

다음의 명령어에서 [n]은 숫자를 의미하며 명령 모드에서 10k, 5l, 3j, 8h 와 같이 키를 누르면 된다.


[n]k 위로 n, 숫자 생략할 경우 1행 이동

[n]l 오른쪽으로 n, 숫자 생략할 경우 1칸 이동

[n]j 아래쪽으로 n, 숫자 생략할 경우 1행 이동

[n]h 왼쪽으로 n, 숫자 생략할 경우 1칸 이동


※ 앞으로 [ ] 대괄호로 감싼 부분은 생략 가능한 옵션을 표시할 때 사용한다. 



Anki 파일


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



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 파일입니다. 참고하시기 바랍니다. 



vim 실행하기


vim실행하고자 할 때는 프롬프트에서 vim 이라고 입력하면 된다. 특정 파일을 열면서 실행하고 싶다면 vim [열고 싶은 파일 이름] 형식으로 입력하면 된다


$ vim vim 실행

$ vim test.txt  vim이 test.txt 파일을 열면서 실행



vim 종료하기


vim종료하고 싶다면 명령 모드에서 :q 또는 :quit 라고 입력하면 된다. 그러면 명령 라인에 :q 또는 :quit 명령어가 보이게 되고 [Enter] 키를 눌러 입력하면 종료된다. (:q 로 기억하자)


:q


vim을 종료할 때 아무런 변경 사항이 없다면 아무런 문제 없이 종료되겠지만, 변경 사항이 있다면 저장이 되지 않았다는 내용의 에러 메시지가 나오면서 종료가 되지 않는다. 이 경우 저장하지 않고 종료하려면 느낌표(!)q 뒤에 붙여주면 된다. 


:q!


느낌표(!)vim에서 명령을 강제로 실행하라는 의미이다.



vim 파일 저장하기


강제 종료는 부득이한 상황에 하는 것이고 대부분의 경우 제대로 저장을 하고 종료해야 한다. 윈도우즈에서의 저장은 Save지만 vim 계열은 디스크에 쓴다라는 의미에서 Write 라고 한다. 따라서 명령어는 :write 혹은 :w 이다. (:w 로 기억하자)


:w  → 원래 파일 이름으로 저장

:w test.txt  → test.txt라는 이름으로 저장

:w > file.txt → file.txt 파일에 덧붙여 저장


저장하고 종료가 같이 이루어지는 경우가 많다. 그래서 저장 명령인 w 와 종료 명령인 q를 합쳐서 :wq 로 명령하는 경우가 많다. 혹은 명령 모드에서 ZZ 키를 눌러 바로 저장하고 종료할 수 있다. 


:wq → 원래 파일 이름으로 저장하고 종료

:wq test.txt  → test.txt라는 이름으로 저장하고 종료

ZZ → 원래 파일 이름으로 저장하고 종료(명령라인 모드 명령이 아님, 명령 모드에서 대문자 ZZ)



vim 파일 불러오기


마지막으로 vim에서 원하는 파일을 열고 싶을 때:e [파일명] 형식으로 원하는 파일을 불러온다.


:e file.txt file.txt 파일을 불러옴

 


Anki 파일


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


004 vim의 실행과 종료 및 파일 불러오기와 저장.apkg


vim에서 기준이 되는 모드는 명령(command) 모드이다. vim은 명령 모드에서 단축키로 빠르게 대부분의 일을 처리하지만 단축키로는 복잡한 명령을 내리는데 한계가 있기 때문에 복잡한 명령을 내릴 방법이 별도의 방법이 필요하다. 그 방법으로 vim명령 라인에 복잡한 명령을 직접 입력하는 방식을 선택했다.


명령 모드에서 콜론(:), 슬래쉬(/), 물음표(?) 키를 누르면 아래의 명령 라인에 명령어를 입력할 수 있게 된다아래의 사진은 명령 모드에서 콜론(:) 키를 누른 것으로 가장 하단에 콜론(:)이 입력되는 것을 확인할 수 있다. 이후에 눌려지는 키는 계속 그 줄에 입력이 되므로 명령 라인에 명령어를 입력할 수 있는 상태가 된다. 콜론(:)이 입력된 행(Row)을 명령 라인이라고 부른다. 명령 라인을 사용할 수 있는 상태를 명령라인 모드, Ex 모드 등으로 부르기도 한다.

 



앞서 본 vim  종료 명령도 이 명령 라인에 :q!를 입력한 것이다. 


:q!


슬래쉬(/) 키나 물음표(?) 키를 누르면 콜론(:)키와 마찬가지로 명령 라인에 슬래쉬(/) 키나 물음표(?) 키가 입력되면서 명령 라인을 사용할 수 있는 상태가 된다. 


슬래쉬(/) 키나 물음표(?) 키를 누른 후 찾으려는 패턴을 입력하면 패턴이 나오는 곳으로 커서가 이동하는데 슬래쉬(/) 키는 정방향(문서의 아래 방향) 탐색, 물음표(?) 키는 역방향(문서의 위 방향) 탐색이다슬래쉬(/) 키와 물음표(?)에 의한 탐색은 후에 패턴을 지정하는 정규 표현식(Regular Expression)과 함께 다시 논의하기로 한다.

 

명령 라인은 대부분 콜론(:) 키를 이용하여 vim 설정 명령, 파일 관련 명령편집기 명령 등 다양하고 복잡한 명령을 입력하는데 사용한다. 

 

명령 라인에서 다시 명령 모드로 돌아오려면 Esc 키를 누르면 된다. 물론, 명령어를 명령 라인에 입력하고 Enter를 치면 명령을 실행하고 명령 모드로 돌아온다.


팁: Esc 키는 키보드에서 조금 누르기 힘든 위치에 있다. 그래서 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다. , Ctrl 키를 누른 상태에서 [ 키를 누른다.)



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


003 명령 라인(명령줄).apkg


vim이 좋다는 사실에 동의하지만, 시간도 부족하고 그걸 다시 익히는 지난한 과정을 생각하면 선뜻 손이 가지 않는 사람들이 많을 것이다. 


바쁘게 사는 현대인들 중에 vim을 붙잡고 단축키를 외울 여유가 있는 사람이 얼마나 되겠는가?


그런데, 약간 오해가 있는 것 같다.


vim일반적인 텍스트 에디터처럼 글을 작성하고 편집하는 수준에 오르는데는 그리 많은 시간이 필요하지 않다


이 부분에서는 마치 vim의 모든 단축키를 외우고 이를 활용할 수 있어야만 vim이 사용가능하다는 식의 오해가 있는 것 같다. 


물론, 수많은 단축키와 명령어들을 알면 알수록 vim을 보다 빠르고 효율적인 작업이 가능하다. 


하지만 그런 단축키와 명령어들을 모른다고 해서 보통 사람들이 처음 텍스트 에디터를 더듬거리면서 조작하는 초보적인 수준의 에디터 사용이 불가능한 것은 아니다. 


이런 초보적인 수준의 vim 사용이 가능해지는데 도움을 주는 것이 바로 vim 튜토리얼이다. 


보통, vim을 설치하면 vimtutor라는 프로그램이 같이 설치되는데, 바로 이 vimtutorvim튜토리얼이다. 


프롬프트에서 다음과 같이 명령어를 작성하고 [Enter]를 친다.


$ vimtutor


그러면 다음과 같은 화면이 나온다. 




vim 튜토리얼은 어떤 키를 누르고 어떤 행위를 할 것이지 하나하나 친절하게 가르쳐주고 있어서 그대로 읽고 따라하다 보면 25~30분 정도 후 vim일반적인 텍스트 에디터 수준으로 사용할 수 있게 된다


본인도 vim을 사용하면서 처음 한번은 포기했는데, 이미 익숙한 방식과 vim의 방식이 서로 혼동되면서 불편해졌기 때문이다. 그리고 단순히 단축키를 외우는 것 만으로는 vim에 익숙해지는 것이 매우 어려웠다. 


하지만 vimtutor를 통해 실습을 하면서 몸에 익게되면서 어느 정도 사용이 가능해지게 되면서 조금 편안해지게 되었다. 


역시, 뭐든지 우선 몸이 익숙해지는 과정이 반드시 필요한 것 같다.

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


프로그래밍을 익히려고 하면 필수적으로 익혀야할 유틸리티(utility)들이 있다. 


텍스트 에디터도 그 중 하나다. 


시중에 나와있는 무료 텍스트 에디터들을 몇 가지 추천받아 사용해보았다. 


메모장, gedit, Atom, Notepad++, vi 또는 vim(이하 그냥 vim이라고 하겠다) 등을 사용해보았고 어떤 것이 가장 좋은지 고민에 고민을 거듭했다.


가장 쓰기 편한 것은 Notepad++와 Atom이었고 메모장과 geidt는 너무 기본적인 에디터였다.


그리고 vim은 정말 쓰기 어려운 최악의 에디터였다.


그렇다면 Notepad++와 Atom이 가장 합리적인 선택일 것이다.


그럼에도 vim을 써야겠다고 판단한 것은 과거의 경험 때문이다.


나는 군대에서 한글을 배웠고 당시 한글은 단축키를 쓰는 부류와 마우스를 쓰는 부류로 나뉘어져 있었다. 


그리고 마우스를 쓰는 경우보다 단축키를 잘 쓰는 경우가 생산성이 훨씬 좋았고 프로그램에 대한 일체감이 무척 뛰어났다.


즉, 문서 편집이 거의 생각의 속도로 이루어지고, 스스로가 한글 워드프로세서가 된 느낌을 받았었다. 


당연히, 문서 관련 일에 대한 심리적 부담도 상당히 적고 생산성도 뛰어날 수밖에 없었다. 


그래서 당시 나의 사수는 한글을 가르치면서 내가 마우스에 손을 대지 못하게 옆에서 감독했다.


이런 경험에 비추어 볼 때, 모든 것을 키보드 위에서 작업하는 것이 쉬운 일은 아니지만 숙련되기만 한다면 그 이득이 이루 말할 수 없을 것이 분명하다는 확신이 들었다. 


그리고 그런 점에서 vim이 가장 충실했기 때문에 결국, vim을 익혀야겠다는 결론에 도달했다.


나의 이런 생각을 뒷받침해주는 것이 사람들이 보여주는 vim에 대한 높은 충성도다.


vim을 싫어하는 사람들도 많은 것 같지만 제대로 사용해본 사람들은 vim에서 벗어나지 못하는 까닭이 무엇일까?


단지, 전통적으로 사용되어온 텍스트 에디터라서 사람들이 충성한다는 생각은 들지 않는다. 


오히려 vim에서 느낀 생각의 속도로 편집되는 높은 일체감과 생산성을 다른 텍스트 에디터에서는 맛보기 어렵기 때문이 아닐까?



이외에도 다양한 OS에서 사용할 수 있다는 범용성과, 임베디드 부터 웹까지 모든 작업에 이용할 수 있다는 장점도 있다.



이러저러한 정황을 볼 때 vim을 익힌다면 손해는 보지 않을 것이고 반드시 이득라는 점은 거의 확신할 수 있다. 


그렇다면 마지막 남은 문제는 과연 제대로 숙달할 수 있을 것인가 하는 점이다. 


vim은 결국 숙달할 수 없다면 최악의 텍스트 에디터일 것이기 때문이다. 


예전 같으면 숙달하기 어렵다는 점 때문에 결국, 포기할테지만 다행히도 숙달은 vim을 익히기 위한 튜토리얼Anki의 도움을 받으면 큰 무리없이 숙달할 수 있을 것으로 보인다.



그리고 마지막으로 vim을 쓴다고 하면 어째서인지 조금 멋있어 보였다는 것이 내 결정에 상당한 영향을 미쳤다는 점도 첨언하는 바이다. 


그럼 오늘부터 vim을 한번 내 것으로 만들어보자. 

+ Recent posts