screencast: vim 사용의 예

Tags:

피보나치 수열 구하기 프로그램 작성

예전부터 해보고 싶었던 것인데.. vim을 쓰는 실제 모습을 녹화해서 보여드리는 것입니다. 그래서 한번 해봤습니다. 사실 옆에서 서로 보면서 서로 가르쳐주면 제일 좋은데, 그런기회는 정말 흔치 않죠. vim이나 emacs를 쓰는 옛날 사람(?)들이 흔한 것도 아니고 요즘시대에요;; 이것이 제가 생각한 해결책인 셈입니다.

동영상에서 제일 마지막에 한 일은 .vimrc 를 수정해서 f5누르면 g++ 로 app.cpp와 fib.cpp를 컴파일 하게 했습니다. 큰 프로그램을 짤때는 Makefile을 쓰지만 이 경우엔 안썼습니다. 다음 vim 들어가서 컴파일 했고 ./a.out 실행했습니다. 마지막에 너무 빨리 닫아버렸는데 (에러도 하나 만들었어야하는데요;) 다시 하기 느무 귀찮네요 ㅎㅎ

제가 누른 키들은 다음과 같습니다.
1. F2: 저장
2. F5: 컴파일
3. F6: ./a.out 실행
4. F9: 현재 창 닫기
5. ^W^A: fib.hpp 가 있던 상태에서 창을 가로로 나누며 fib.cpp열기
6. Tlist: 우측에 태그리스트 윈도우 띄우기
7. _i: #include< 로 자동변환
8. _u: using namespace std로 자동 변환
9. _c: 제일 처음에 Fib 클래스 만들때 골격 채우기에 사용
10. _o: cout << 로 자동변환

질문 환영. emacs에서 vim으로 옮겨가는 방법에 대한 질문 환영 ㅋㅋ 더 나은 방법에 대한 제안 환영입니다. 특히 emacs 를 쓰는 유저로서 “쳇, vim 이란게 그정도야?” 하고 생각되시면 보여주세요, 당신의 스킬을!

이런 자료에 대한 늘 나오는 질문에 대한 답변: 녹화는 windows encoder로 했습니다.

Comments

25 responses to “screencast: vim 사용의 예”

  1. Tag: »Screencast« aktuell bei del.icio.us /with Imagination: Dustin Diaz. ScreenCastsOnline. WP Tutorial: Your First WP Plugin « Mark on WordPress. MyEclipse Feature Overview. Passion is like genius; a miracle. » screencast: vim 사용의 예.

  2. 공성식 Avatar
    공성식

    아, 정말 놀랍군요.
    저도 코딩할 때 Vim을 사용합니다만, 이렇게 현란한 기능들은 사용해 본 적이 없습니다.
    매크로나 키매핑 등은 무시하고 아주 기본적인 에디팅 기능들만 사용해 왔죠.
    (최근에 탭페이지 이동용 키매핑을 사용한 게 처음이었을 정도니까요.)

    근데 민구님은 Insert 모드에서 Normal 모드로 전환할 때 어떤 키를 사용하세요?
    이게 사람들마다 조금씩 다르더라구요.
    보통은 Ctrl+[ 을 사용하라고 권하던데 저는 Ctrl+C를 사용하거든요.(기능적으로 약간 다릅니다만)
    Vim의 다른 점은 괜찮은데 이점이 약간 불편하게 느껴지더라구요.(지금이야 몸에 뱄지만서도)
    Caps Lock을 이용할까도 생각했지만 컴퓨터를 바꿀 때마다 매번 이거 지정해 주는 게 마땅치 않더라구요.

    그렇지만 늘 Emacs의 Lisp 에 대해서는 미련이 있습니다…

    동영상 잘 봤습니다.

  3. abraxsus Avatar
    abraxsus

    이녀석-_-;;;
    도사가 되어버렸구나…
    ㅠㅠ

    나도 잘하고싶어…ㅠㅠ

  4. MKSeo Avatar
    MKSeo

    @공성식: esc누릅니다;;; 이거 습관되버려서 고치기 너무 힘들어요. 그냥 살고 있습니다. 대신 esc 눌러야 하는 상황중에 몇가지는 맵핑으로 대신하죠. 예를들어 보통 저장할때 저는 f2를 누르는데 f2를 다음과 같이 맵핑합니다.

    map <f2> :w<cr>
    imap <f2> <esc>:w<cr>

    결국 어떤 모드에서도 f2누르면 저장됩니다. 저장후에는 무언가 다른 작업으로 넘어가게 되고 편집을 계속하는 일은 드물기때문에 imap 에서 다시 i를 눌러서 입력 모드로 바꿔주지는 않습니다. f5로 컴파일 f6으로 실행 f9로 창 나가기 모두다 마찬가지로 해두었습니다.

    음.. 그리고 emacs의 lisp에 대해서는.. 저도 창나누기 컴파일하기 뭐 간단한 튜토리얼만 따라하다가 포기해버린게 이막스여서요.. vim에서 제가 코딩할때는 가끔 http://www.vim.org가서 스크립트나 팁에서 rating이 높은 항목만 열어보고 괜찮은거 같으면 써보고 그렇게 하며 사용합니다. 그리구 필요한경우는 위에처럼 다 맵핑으로해요. 이걸로 특별히 불편한거 잘 모르겠습니다. 가끔 플러그인에서 마음에 안드는걸 고쳐보려고도 하는데 – 어차피 스크립트 프로그램이니 고칠 수는 있습니다 – 너무 복잡해서 잘 안하게 되더군요. 보통은 저자에게 메일을 보내서 기능 추가를 부탁합니다. ㅎㅎ

    @abraxsus: ㅋㅋㅋ 너도 그래도 vim 쫌 쓸거 같은데~ 공부 열심하 하잣!!

  5. MKSeo Avatar
    MKSeo

    아직 안 보여드린 것도 있습니다. 가령 zapping (코드 블럭 접기)하기, 파일을 닫았다가 새로 열어도 zapping내용 보존하기, 탭눌러서 zapping된 영역 열고 닫기, 루비에서 SHIFT+ENTER눌러서 { 로 열린 블럭 } 로 자동으로 닫기 (do 였으면 end로 닫아줍니다) 등. 제가 지금까지 본 emacs 사용 screenshot에서 vim으로 못하는건 못봤습니다;; (gdb연동하고 메일보내고 이런것들 말고요..)

    제가 생각하기에 emacs나 vim이나 문제는 사실 둘다 에디터에 불과하다는 것. eclipse처럼 클래스 만들고

    class Foo
    {
    public void bar()
    {
    j = 3;
    }
    }

    라고 된 상태에서 j=3에서 에러가나면 ^1눌러서 quick fix window열어서 자동으로 지역변수를 추가한다던가, extract method, encapsulate field같은 기본적인 리팩터링이 된다던가 하는 데서는 vim가지고는 안되죠;; 물론 루비, C++, C가 자바만큼 파싱이나 다루기 쉽지 않다는게 근본적인 문제겠지만.

    아마 ctags 자체도 C++의 내용을 완벽하게는 파싱 못하지 않나요? 그래서 에디터도 완벽하지 않고, cscope와 연동해서 vim을 쓴다고 해도 go to definition 같은게 한번에 제대로 안돌아가고요. 그런면에서는 답답합니다.

    그렇다고 anjuta 나 기타 IDE를 써보면 또 이녀석이 지멋대로 makefile 만드는데 그 덕에 뭔가 짜려고만 하면 컴파일하는데 수분이 걸리며 허송세월. 역시 vim처럼 하나하나 다 제어가 가능한게 편하긴 해요.

    전에 MS의 개발자가 emacs쓰는 동영상을 봤는데 VS.NET이었으면 auto completion으로 휙휙 넘어갈 내용도, 하나하나 키보드로 입력하는데 불쌍하더만요;; 한편으로는 그 수많은 API를 달달외워서 한치의 오차도 없이 한번에 프로그램을 짜내는걸 보고 경악;;

  6. 大山 Avatar

    emacs 유저로써 굳이 트집을 잡아보자면, Function key 누르려면 키보드에서 손이 좀 벗어나야 할듯 하고, vim 밖에서는 vi 키바인딩 지원이 안되지요~ ;)

    서로 조금씩은 장단점이 있겠지만, 물론 vim도 멋진 에디터인 것 같습니다. emacs 튜토리얼 몇개 더 올리고 나면, 저도 스크린캐스트에 한번 도전해봐야겠네요~ ㅎㅎ

  7. MKSeo Avatar
    MKSeo

    @大山: screencast 부터 해주세요. 튜토리얼은 많은데;;; 자체 튜토리얼마저도 있잖아요. 그보다는 emacs in action! 이런걸 보고싶어요.

    키 바인딩에 대해서는.. 저도 그게 문제라고 생각하고 답답해하는 편입니다. 제 특기가 단축키 외우기라서 대부분의 무슨 툴을 쓰더라도 단축키는 다 외우지만 (가령 파워포인트에서 그림넣기는 ALT+I, P, F 이런것도 외워요) 그래도 vim 바인딩이 아닌건 아쉬운점이죠.

  8. 이원구 Avatar

    정말 현란하시네요. ^^

    전 emacs 유저인데 따로 매크로들을 정의해서 사용하지는 않습니다. 제 환경에만 있는 키 바인딩에 익숙해지면 다른 자리에 가서 사용하기가 어렵더라고요. 그래서 처음부터 default 환경에 익숙하도록 버릇을 들였지요.

    가끔 옆자리의 동료(vi 유저)와 농담으로 니께 좋네 내께 좋네 하는데 결국 서로 안되는건 거의 없더라고요. 익숙해지면 어느게 더 좋다는게 의미는 없을 것 같아요.

    저도 한번 screencast에 도전해봐야겠네요.

  9. 쭌 Avatar

    어이 역시 민구서야~~ 잘 지내고 있지? 민도 여기 가끔 오는구만…
    민 패밀리들 대단해 ㅋㅋ

  10. 大山 Avatar

    그게 제가 요즘 좀 많이 바쁘네요, 일도 무진장 밀려있고.. –;;

    오~ 그 많은 단축키를 다 외우시다니.. 저는 암기에 워낙 잼병이라, 걍 emacs 키바인딩 하나 가지고 먹고 산다는.. 지금 여기 TextArea에서도 Alt-b, Ctrl-e 이러면서 돌아댕기고 있습니다. ㅎㅎ 그나저나 언제 스크린캐스트 만드는 법부터 좀 배워봐야 겠네요.. ;)

  11. kudak Avatar
    kudak

    정말 멋진군요!!

    한가지 궁금한게 있습니다. 나름대로 따라할려고 vi를 이것 저것 셋팅을 했는데요

    snippetsEmu plugin 를 설치한 후에 한번 태스트를 해보니 ㅎㅎ 재미있네요

    그런데 이런 셋팅을 매번 해주어야 되나요?

  12. MKSeo Avatar
    MKSeo

    @kudak: http://mkseo.pe.kr/blog/?p=647 에 보시면 제가 설정한 내용에 대해 참고해볼 수 있습니다. 현재는 .vimrc 설정을 많이 바꿨습니다;;

    매번 설정하는 문제는.. 네 매번설정해야합니다. 그래서 제 경우엔 웹에 따로 올려놨습니다. 그래서 새로 pc를 써야하면 홈디렉토리에서

    wget http://mkseo.pe.kr/archives/vim_setting.tgz && tar xvzf vim_setting.tgz

    하면 끝~ ㅎㅎ 이 tgz 파일은 항상 uptodate입니다;; 제가 쓰는 그대로 들어있어요.

  13. kudak Avatar
    kudak

    ^^ 감사합니다.

    도움이 많이 되었습니다.

    새로운 장난감이 생긴 느낌이네요.

  14. MKSeo Avatar
    MKSeo

    @kudak: 네 도움이 되셨다니 다행입니다^^ vimpire의 숫자가 자꾸 늘어야되요~ ㅎㅎ

    위에 다운로드 받는 코드는 이렇게 쓰는게 더 좋을듯.

    wget http://mkseo.pe.kr/archives/vim_setting.tgz -O – | tar xvzf –

  15. gnil Avatar
    gnil

    회사에서는 동영상이 막혀서 쭉 못봤었는데…
    굉장하군요!
    아~ 나두 잘쓰고파라~ ^^;;

  16. CN Avatar

    저는 적어도 Ruby, Lisp, Haskell에서는 emacs가 훨씬 편하다고 생각합니다. vim에서 Lisp의 괄호지옥을 효과적으로 해결할 방법이 있나요?

  17. 공성식 Avatar
    공성식

    CN:

    저는 emacs는 아주 기본밖에 모르고 주로 vim을 사용하여 ruby 코딩을 합니다만…
    emacs를 사용하면 루비 코딩에 있어서 어떤 점이 더 편한지 간단히 소개해 주실 수 있을까요?
    물론 그렇다고 에디터를 바꾸기는 어렵겠지만 왠지 좀 궁금하네요.
    그럼 좀 부탁드립니다.

  18. MKSeo Avatar
    MKSeo

    @CN: 괄호지옥은 LISP의 잘못이라고 생각하고 있었는데요;;

  19. CN Avatar

    공성식, 루비나 LISP을 emacs에서 프로그래밍하는 과정은 언제 스크린캐스트로 만들어 볼 생각입니다.

    MKSeo, 저는 리습의 능력을 유지한채 괄호를 없애는 것은 매우 힘들 것이라고 생각합니다.

  20. 공성식 Avatar
    공성식

    CN님, 스크린캐스트 기대하겠습니다. ^^

    제 생각에 괄호가 Lisp의 능력에 핵심적인 역할을 한다고 생각하지는 않습니다.
    트리구조를 표현하는 가장 단순한 방법을 찾다보니 S-Expression을 선택한 것 같습니다.
    Dylan을 비롯한 몇 가지 리스프의 변종들을 보면 괄호를 사용하지 않았더군요.
    또한 제 생각에는 루비도 리스프와 상당히 비슷하다고 생각합니다.
    다만 매크로와 s-expression이 없고 객체지향적으로 만들어졌을 뿐 리스프의 철학이 상당부분 스며들어 있습니다.
    심지어 자바스크립트도 그렇구요.

    리스프가 처음부터 s-expression이 아니라 파이썬 스타일의 방식을 따랐으면 더 인기가 있지 않았을까요?
    저는 scheme을 조금 하는데 코드를 작성할 땐 그다지 불편하게 안 느껴지는데 (물론 에디터의 도움을 받아서) 읽을 때는 정말 눈에 잘 안 들어오더라구요.
    그래서 개인적으로, 리스프는 write only 언어가 아닐까 생각합니다.

  21. MKSeo Avatar
    MKSeo

    @CN: 스크린캐스트 하시면 알려주세요. 꼭 보겠습니다. vim으로 제가 재현 못해내면 emacs로 옮기겠습니다.

  22. 공성식 Avatar
    공성식

    Emacs에서 rails 코딩하는 데모가 올라왔네요.
    참고해 보시면 좋을 것 같아요.

    http://platypope.org/yada/emacs-demo/

    저야 뭐 vim에서 현란한 기능을 사용하지 않으니 어차피 큰 감명을 받지는 않았지만,
    여하튼 웬만한 IDE 부럽지 않은 기능들을 선보이고 있네요.
    Vim에서 다 구현이 가능한 것들인가요?

  23. MKSeo Avatar
    MKSeo

    글쎄요;; 다 구현가능할지 잘 모르겠습니다. 몇가지는 될 듯해요.. 해보고 글을 올릴께요. 일단 제가 rails와 svn 등과 너무나 오래 떨어져 산나머지 ㅎㅎ 익히려면 시간이 걸려요

  24. MKSeo Avatar
    MKSeo

    참고로, 제가 알기로는 Rails와 관련된 vim 플러그인은 RProject가 있습니다. 그 외에는 모르겠습니다.

  25. 남성 Avatar

    멋진데요 ~ ㅋㅋㅋ 나도 잘 하구 싶어요 연습 해야지~

Leave a Reply

Your email address will not be published. Required fields are marked *