2004년 봄 SI회사에 처음 취직을 했다. 이제 그동안 연마했던 내 플그램 실력을 발휘할 수 있다니 기대도 있으면서 두렵기도 했다. 아직 파견은 못 나가고 본사에서 잡일을 하며 대기를 했다. 당시 나에게 SI 사이트는 하나의 무림 강호였고 SI 사이트에서 일하는 개발자들은 무림의 고수들이었으며, 무림의 고수들이 쓰는 노트북은 고수들만이 쓰는 멋진 무기였다. 지금에 와서는 어이없지만 나는 SI에 대한 동경을 가진 순진한 IT개발자 지망생이었다.

어느날 우리 회사 무림의 고수 선배가 그 험난한 SI를 마치고 잠시 본사로 귀환했다. 나에게 그 선배는 존경과 동경의 대상이었다. 특히 그 선배가 쓰던 은빛 노트북은 왜 그리 빛나보였을까. 내가 쓰던 중고 데스크탑이 일반 병사의 구식 창이라면 그 선배의 은빛 노트북은 삼국지 관우의 청룡언월도~ 처럼 빛나 보였다.

어느날 선배에게 내가 유지보수중인 복잡한 쿼리 하나에 대한 질문을 했다. 선배는 어느 새까만 창과 함께 그 쿼리를 불러들였다. 까만 화면에 빨간 커서가 인상적이었다. 해커들이 나오는 영화에서 종종 보던 그..화면이었다.

사용자 삽입 이미지
[뭔가 해커스러운 향기가 묻어나는 vim 편집화면]

그리고 이어진 놀라운 장면.. 선배가 마우스는 저기 멀리 던져놓고 키보드만 두드리는데 빨간 커서가 동에 번쩍 서에 번쩍 위로 갔다 아래로 갔다 정신없이 움직이더니 문자열이 사라졌다가 다른 곳에 나타나기도 하고 정렬안된 문자열이 키보드의 다다닥~ 소리와 함께 완벽하게 정렬되는.. 정신없으면서 신기한 장면이 연출되는 것이다. 그랬더니 지저분하고 정렬안된 쿼리 문자열이 깔끔하게 이발을 마친 사람의 머리처럼 산뜻하게 정리되어 있었다.

나는 넋놓고 바라보면서 경이로움과 함께 큰 충격을 받았다. “선배님..이게..뭐에요~?” “이거 vi란다…” “아 맞다..근데 vi는 리눅스용 아닌가요?” “윈도우에도 gvim을 설치하면 쓸수 있지..나는 오직 이 vim만 쓰고 있단다~”

나는 결심했다. 그래 이거야..나도 vim을 쓰는거야..내가 vim을 쓰는 것은 내가 프로그래밍에 열광하는 이유와 비슷했다. 뭔가 해커스럽고..뭔가 고수적인 분위기를 풍기는 그런 느낌..vim은 그런 멋진 느낌을 가져다 줄 수 있는 멋진 놈이었다. 당시 어린 IT개발자 지망생 나는 vim에 완전히 꽂혔다.

특히 선배의 다음 한마디가 인상적이었다. “SI 사이트에 나갈 때 주의할 것은 절대 겸손한 척, 모르는 모습을 보이면 안된다는 것이지, SI 사이트는 약육강식의 강호와도 같아서 몰라도 무조건 아는 것처럼 보이게 하는 것이 중요해~ 이런점에서 vim은 중요한 역할을 한단다. vim을 쓰면 못해도 잘하는 것처럼 보이는 효과를 가져다주지..너라면 EditPlus 쓰는 개발자와 vim쓰는 개발자 중 누가 더 잘하는 것 처럼 보이겠냐~”

그렇다. vim 을 써야 되는 이유는 충분했다. 열심히 vim을 연습하기 시작했다. 그러나 vim은 어려웠다. 기존의 에디터 다루는 방식하고는 너무도 틀려서 익숙하기 까지 많은 시간이 걸렸다. 마치 직립보행하던 인간이 물구나무 서서 걷는 법을 연습하는 것과 비슷했다. vim 조작하는 법에 익숙하기 까지 많은 시간이 걸렸다.

지금에 와서는 그리 고수처럼 보일 필요성도 못 느끼고, SI라면 고개를 절래절래 흔들며 싫어하는 이래도 흥~ 저래도 흥~ 하는 심드렁한 중급 개발자가 되었지만 여전히 vim은 멋진 해커가 되고 싶은 나의 꿈이 담긴 멋진 도구로 계속 쓰이고 있다.

요즘의 나는 이클립스를 메인 에디터 툴로 다루면서 vim을 복잡한 텍스트 편집용으로 쓰고 있다. 이번 글에서는 내가 주로 사용하는 vim의 메크로 기능을 이용한 한방 편집~ 과 IBM developerWorks의 vi 관련 유익한 기사를 소개한다.


나는 생활의 달인이란 프로를 좋아한다. 한분야에 일가를 이룬 달인들이 펼치는 놀라운 기술의 향연에 열광한다. 문득 개발자가 생활의 달인에 나가면 어떤 종목으로 나갈까~란 엉뚱한 생각을 한적이 있다. 사실 개발자로 달인은 뛰어난 두뇌의 소유자로 복잡다단한 분야의 설계를 잘하는 사람이거나 복잡다단한 알고리즘을 한방에 깔끔하게 구현하는 사람일 것이다. 그런데 생활의 달인처럼 좀더 기능적인 점을 강조한다면 소스 편집을 빨리 하는 개발자를 달인이라고 억지로 끼워맞출수 있을 것이다.

생활의 달인을 보면 일반인과 생활의 달인이 얼마나 빨리 하나 대결하는 모습이 나온다.

자 그럼 우리 개발자들도 미션을 내보자~! 우리의 미션은..

private String id;
private String password;
private String loginType;
private String telephone;
private String handphone;
private String addr1;
private String addr2;
private String email;
private String fax;
private String company;

의 변수 텍스트를 로그 찍어보게,

System.out.println("id ["+id+"]");
System.out.println("password ["+password+"]");
System.out.println("loginType ["+loginType+"]");
System.out.println("telephone ["+telephone+"]");
System.out.println("handphone ["+handphone+"]");
System.out.println("addr1 ["+addr1+"]");
System.out.println("addr2 ["+addr2+"]");
System.out.println("email ["+email+"]");
System.out.println("fax ["+fax+"]");
System.out.println("company ["+company+"]");

로 바꿔야 한다. 누가 얼마나 더 빨리 바꿀 수 있을 것인가. 한명은 일반 에디터로, 한명은 vim으로 시간 체크 해보겠다..자..준비..시작~!

[일반 에디터는 복사/붙여넣기 끝에 1분 20초에 끝남]

[vim은 vim의 메크로를 이용하여 순식간에 30초 이전에 끝냄]

결과 vim의 일방적인 승리다. 그럼 어떻게 vim이 빨리 편집을 끝낼수 있었을까. 그것은 vim의 메크로 기능을 이용했기 때문이다. 그럼 과정을 분석해보자.

1. private String id;
를 System.out.println("id ["+id+"]");
로 바꾸기 전에 일단 qa키를 눌러서 메크로를 걸어놓는다.
qa: a키에 메크로 레코딩

2. private String을 2dw로지운다.
2dw : 2개의 w(문자를) d(지운다.)
결과 : id;

3. i키를 눌러서 편집상태로 전환 후 System.out.prinln(“ 까지 입력한다.
결과 : System.out.println(“id;
                                   ^ (커서 위치)

4. 현재 커서 위치에서 오른쪽으로 한칸 더가고 yw를 입력하여 id문자열을 복사한다.
결과 : id 문자열이 복사됨

5. f; 로 커서를 ; 위치로 옮겨놓는다.
f; : 첫번째 ;문자위치까지 이동한다.
결과 : System.out.println(“id;
                                      ^ (커서 위치)

6. i버튼을 입력하여 삽입 상태로 변경하고 스페이스 [“+ 까지 입력한다.
결과 : System.out.println(“id [“+;
                                           ^(커서위치)

7 ESC 또는 Ctrl+[ 키를 눌러서 명령어 모드로 전환한다. 그리고 p키를 누른다. p키를 누르면 아까 복사하였던 id키가 붙여넣기 된다.
결과: System.out.println("id ["+id
                                            ^ (커서위치)

8. i키를 눌러서 삽입상태로 놓고 +”]”) 까지 입력한다.
결과: System.out.println("id ["+id+”]”);
                                                   ^ (커서 위치)

9. 자 여기까지 했으면 변환 완료, 다시 ESC 또는 Ctrl+[키를 눌러서 명령어모드로 전환하여 j키를 눌러서 커서 밑으로 한칸 그리고 0키를 눌러서 가장 처음 행으로 옮기자.

10. 여기까지 하면 메크로가 완성되었다. q키를 눌러서 메크로 저장 완료로 만든다.

11. 다음 9@a를 눌러서 a에 저장한 메크로를 9번 호출하자. 그러면 9번 메크로가 작동되면서 저절로
private String var; 가 저절로 System.out.println("var ["+var+"]"); 로 9번 변경될 것이다.

위의 메크로 기능이 내가 vim에서 가장많이 쓰는 기능이다. 방금 처럼 변수를 로그 찍는 방식은 자주 발생하는 일이다. 이때 vim의 메크로 기능을 쓸 수 있다면 그냥 한방 메크로로~ 편하게 작업 할 수 있다.

특히 vim에서 메크로 기능이 잘 쓰일 수 있는 것은 vim의 다양한 이동 및 편집 기능때문이다. vim에서는 2w등으로 두개의 문자를 이동하라든지, f;로 ;문자 바로 전까지 커서를 이동하라든지의 수많은 경우의 이동 상황이라도 정확하게 명령할수 있다. 편집 또한 yw로 하나의 문자열만 복사하라 든가 2dw로 두개의 문자를 지워라 든지 9p로 9번 붙여넣기 하라든가의 정확한 편집 명령도 수행할 수 있다. vim의 다양한 명령어를 조합하여 메크로를 설정하면 반복되는 다양한 편집 상황에서도 정확하고 빠르게 원하는 작업을 수행할 수있다.

나는 vim 을 자주 쓰는 개발자로 특히 vim의 메크로 편집 기능을 추천한다. 혹시 vim 초보자라면 IBM developerWorks의 vi 입문 -- 컨닝 페이퍼 이용하기를 추천한다.

vi를 하나하나 공부하면서 한방에 참고할 수 있는 하나의 컨닝페이퍼를 만드는 과정을 차곡차곡 설명하고 있다. vi의 초보자라면 북마크하여 두고두고 볼만한 기사다.

옛날 옛적에 만들어졌지만 그 누구도 그 편집 속도를 따라잡기 힘든 불멸의 고전 에디터 vim~! vim에는 다른 에디터에서 찾아 볼 수 없는 특유의 깊은 사상이 들어가 있다. 심플하면서 다양한 명령어, 그리고 이 명령어들의 조합으로 무한히 확장되는 강력한 편집기능은 마치 오랜시간 흘러도 두고두고 즐기는 테트리스처럼 세월이 흘러도 두고두고 쓰이는 실전 에디터로 우리 프로그래머/해커들 곁에 영원히 남을 것이다.

오랜 세월이 지나도 불멸의 에디터로 남아있는 vim 당신은 욕심쟁이 우후훗~ vim이여 영원하라~ (무릎팍 버전)
                                                                                  
> IBM developerWorks

developerWorks의 vi 입문 -- 컨닝 페이퍼 이용하기

신고
Posted by 산골
산골 블로그 소개 저는 하얀머리 개발자와 작가를 꿈꾸는 블로거 산골 입니다. 프로그램 개발자로서 저의 관심사는 개발자의 숨통을 트여준 아이폰 개발, 철학과 같은 깊이가 있는 객체지향 방법론입니다. 글쓰기와 수영을 좋아합니다. 블로그를 통해 관심사를 공유합니다. 제 블로그에 관심 있으시면 아래 RSS나 즐겨찾기로 편하게 구독하세요.

rss Bookmark and Share

댓글을 달아 주세요

  1. BlogIcon 2008.11.30 21:45 신고  댓글주소  수정/삭제  댓글쓰기

    전 vi로 간단한 편집정도만 하는 정도인데.. 오.. 매크로 기능을 보니 굉장히 편리하네요. 실제 작업하다보면 저렇게 작업해야 할 일이 많은데..

  2. 쿠크다스 2008.11.30 22:56 신고  댓글주소  수정/삭제  댓글쓰기

    치환기능을 이용하면 좀 더 간단하게 해결할 수 있을 것 같은데요. 백 레퍼런스라는 걸 쓰면 될 겁니다.

  3. BlogIcon 킬러앱스 2008.11.30 23:18 신고  댓글주소  수정/삭제  댓글쓰기

    저 같으면 저런 필요가 있다면 컬럼모드 기능을 이용해서 편집하겠습니다.
    ctrl+c(vim) alt+c(ultra edit) 구지 gvim뿐만 아니라 자기가 편한툴로 다양한 기능들을 목적에 맞게 쓰면 된다고 생각합니다.
    매크로 기능은 이클립스들이 좀더 편하게 가능합니다.

    • BlogIcon 산골 2008.12.21 12:05 신고  댓글주소  수정/삭제

      저는 vim이 울트라에디터등보다 뛰어나다는것을 강조하려는 것은 아니었고..vim이 단순한 복사/붙여넣기보다 빠르다는것을 강조하려고 했습니다. ^ ^
      킬러앱스님의 말씀이 정확한 지적이십니다. ^ ^

  4. BlogIcon 에드 2008.12.01 00:15 신고  댓글주소  수정/삭제  댓글쓰기

    vim의 강력한 기능들은 많이 소개가 되었죠. 제일 놀란 기능 중에 하나는 들여쓰기가 제대로 안된 소스코드를 블럭설정한 후, 키보드의 '='를 누르면 들여쓰기를 자동으로 해주는 기능입니다. 이거 처음 써보고 얼마나 놀랐던지...^^

  5. BlogIcon 골빈해커 2008.12.01 00:59 신고  댓글주소  수정/삭제  댓글쓰기

    :%s/private\ String\ \(\w\+\)/System\.out\.println\("\1\ \["\+\1\+"\]"\)/g

    (_ _);;;

  6. 배틀제이 2008.12.01 01:43 신고  댓글주소  수정/삭제  댓글쓰기

    사용된 기능은 다른 매크로기능이 있는 에디터에서도 충분히 가능한 기능입니다.
    평소에 단축키로 작업해서인지 에디트플러스로 따라해보니 10여초면 충분하네요.
    매크로 작업시 중요한건 Ctnl 키를 이용한 커서 이동이죠.

    • BlogIcon 산골 2008.12.21 12:06 신고  댓글주소  수정/삭제

      저는 vim이 울트라에디터등보다 뛰어나다는것을 강조하려는 것은 아니었고..vim이 단순한 복사/붙여넣기보다 빠르다는것을 강조하려고 했습니다. ^ ^
      밸틀제이님의 말씀도 정확한 지적이십니다. ^ ^

  7. BlogIcon daewonyoon 2008.12.01 02:34 신고  댓글주소  수정/삭제  댓글쓰기

    저라도 골빈해커님 같이 치환으로 했었겠네요. (블럭지정해서 :<> 로 시작하게) 윈도우 상에서 비주얼 스튜디오로 주로 작업하지만, 대규모의 치환같은 경우에 주로 gvim 을 불러서 작업하네요.

  8. BlogIcon object 2008.12.01 09:52 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 속도 비교가 굉장히 극과 극이네요:) 마우스로 블럭 선택하는 것도 그렇고.. 참고로 Visual Studio 에디터에서도 정규식을 이용한 치환이 지원되고 30초면 충분히 바꿀 수 있습니다. 단어 몇개를 선택하라는 것은 지원이 안되지만 ctrl+shift+방향키로 단어 단위의 선택을 순식간에 할 수 있죠. 코딩을 많이 하면 많이 할 수록 에디팅이 미치는 비율은 매우 미미해집니다.

    • BlogIcon 산골 2008.12.21 12:07 신고  댓글주소  수정/삭제

      저는 vim이 울트라에디터등보다 뛰어나다는것을 강조하려는 것은 아니었고..vim이 단순한 복사/붙여넣기보다 빠르다는것을 강조하려고 했습니다. ^ ^
      object의 말씀도 정확한 지적이십니다. ^ ^

  9. BlogIcon 붕탱구 2008.12.01 10:01 신고  댓글주소  수정/삭제  댓글쓰기

    좋은글 잘보고 갑니다..^^; 저도 vim을 즐겨쓰는터라..재밌네요,

  10. sepial 2008.12.01 17:51 신고  댓글주소  수정/삭제  댓글쓰기

    흐음.....영화 한편을 보고 가는 느낌인데..다른 분들은 다 영화속에 나오는 대사를 댓글로 치고 가시네요...에헤헤헤~~~~산골이님~ 알마님~ 안뇽안뇽~

  11. BlogIcon 러브네슬리 2008.12.03 11:59 신고  댓글주소  수정/삭제  댓글쓰기

    하수를 위한 ...vim은 없나요? ㅠㅠㅋㅋㅋ
    전 그냥 감상만 하고 간다는 ㅠㅠ

  12. 2008.12.03 16:56  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  13. BlogIcon ileshy 2008.12.04 09:09 신고  댓글주소  수정/삭제  댓글쓰기

    vim의 최대 단점은 쓰다보면, 다른 에디터를 쓸때도 ESC 나 i, j,k 등을 누르게 된다는 거죠..

  14. BlogIcon 데굴대굴 2008.12.12 17:25 신고  댓글주소  수정/삭제  댓글쓰기

    윈도우를 쓰는 사람이라면.. win+r이후 cmd, notepad의 재빠른 타이핑, 브라우저 닫을 때에는 ctrl+w 등의 적절한 콤보가 윈도우를 잘쓰는 프로로 보이게 합니다. -_-

  15. BlogIcon 2008.12.16 17:35 신고  댓글주소  수정/삭제  댓글쓰기

    이건 뭔가요~? 이제야 c++ 갓 떼고 온 저에겐 무슨 외계언어 같네요 ㅠ_ ㅠ 하하하 매크로기능이라...

  16. 김종민 2009.09.29 11:37 신고  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 잘봤습니다. vim 잘 사용하시네요 ^^
    그러나 에디트 플러스에 vim에서 하셨던 그 메크로 기능
    에플에도 있습니다. ctrl+q 로 기록하시고 그때부턴 vim 과 같습니다. 에플에는
    메크로를 10개까지 따로 저장할수도 있지요, 그걸로 다시 겨뤄보시면 시간 같을거에요 ^^
    그럼 즐플밍 되세요ㅎㅎ~~

    • BlogIcon 산골 2009.10.04 20:41 신고  댓글주소  수정/삭제

      반갑습니다. 좋은 기능 소개 감사합니다.~
      근데 vim은 w,b,등의 정형화된 다양한 이동기능이
      있어서 좀더 편하고 확실하게 메크로기능이
      가능한것 같다는 생각인데..아무래도 제가 직접
      에디트 플러스등에서 해봐야 겠습니다. ^ ^;

  17. BlogIcon Benjamin 2010.05.08 00:23 신고  댓글주소  수정/삭제  댓글쓰기

    다른 것보다, 글을 참 재미있게 잘 쓰셨네요.
    저도 vim을 아주 좋아합니다.
    그리고 글 잘쓰는 사람도 좋아합니다. ^^

    • BlogIcon 산골 2010.05.10 09:21 신고  댓글주소  수정/삭제

      지금보니 저도 재밌는것 같습니다.
      옛날의 글발이 훨씬 좋은 것 같네요. ㅠ.ㅠ
      요즘 글쓰기를 별로 안했더니..더 연습해야 겠습니당~ ㅠ.ㅠ