[질문] source insight ---> vim or emacs? (조심스럽게 물어봅니다....)

minonnet의 이미지

현재 저의 상황을 얘기하고 그에 맞는 에디터(vim or emacs)를 하나 선택해서 배워보려고 합니다.
조언을 구합니다....(에디터 논쟁은 아닙니다. 여전히 이 문제는 조심스럽습니다...)
바꾸려는 목적은 윈도우 종속적인 개발환경을 조금이라도 벗어나고 싶어서 입니다.
그리고 될수있는 한, 코딩하는 동안 마우스를 만지고 싶지 않아서 입니다.

-----------------------------------------------------------------------------------------
현재 제가 개발하는 환경을 간략히 적으면 다음과 같습니다.
1. 운영체제 : Windows XP sp3
2. 컨트롤러 : ARM7TDMI 코어
3. 컴파일러 : ARM Developer Suite v1.2에 있는 것.
4. 사용하는 에디터 : source insight ( --> 이 것을 vim or emacs 로 바꾸고 싶습니다.)

--------------------------------------------------------------------------------------
대체되어질 수 있는 조건은 첫째로 다음의 사항들을 만족해야 합니다.
1. 함수(or 변수)등의 목록들의 브라우징.
2. 함수(or 변수)들이 어떻게 어떤방식으로 사용 되었는지 tree구조(or 기타구조)로 볼 수 있어야 합니다.
3. 위의 2.사항에서 하나의 함수(or 변수)를 선택했을 때, 그 곳으로 빠르게 점프할 수 있어야 합니다.

--------------------------------------------------------------------------------------
위의 조건들을 만족시켜주기 위해서 vim or emacs에서 어떻게 설정해줘야 하는지 알고 싶습니다.
그리고 코딩하는 할 때, 설정해 주면 좋은 기능들도 더불어서 알고 싶습니다.
추가적으로 다른 분들의 에디터의 기본적인 셋팅을 어떻게 하고 사용하는지도 알고 싶습니다.

------------------------------
모두 즐거운 하루 되세요...^.^
아~자~~!

uosarang의 이미지

vim으로 ctags, cscope, Taglist 등을 쓰면 원하시는만큼 되려나요

머리를 굴려라! 그래야 먹고 산다.

molla의 이미지

즉 기본적으로 접근하는 방식이 다릅니다.
따라서 Source Insight 에 익숙한 분이 vim 이나 emacs 쪽에 적응하시려면 꽤 많은 노력이 필요하실듯 하네요. ^^

일단.
1. 함수나 변수 목록
볼 일이 있나요? 제 경우는 unix 에서 vim/emacs로 C program만을 짜 와서 그런지 함수나 변수 목록을 볼 필요를 느꼈던 적이 별로 없네요. 보통 vim이나 emacs 의 경우는 함수 단위로 커서를 옮길 수 있기 때문에, 그 기능을 이용하여 브라우징을 합니다. 사람에 따라서는 folding 을 이용하는 분도 있을 수 있겠군요.
vim 의 경우는 이전에 함수 목록을 별도의 file 로 뽑아놓고 함수 목록을 브라우징 하거나 tree 모양으로 볼 수 있게 하는 plugin 이 있어서 한번 써 봤습니다만, 자동으로 update되질 않아 (매번 목록을 수동으로 다시 뽑고 다시 vim을 실행해야 해서) 남의 code를 분석하는데엔 좋을 지 몰라도 자기가 개발하면서 사용하기엔 부적합해서 사용하지 않았던 기억이 있습니다. (그 plugin 의 이름도 잘 기억이 안 나는군요. -.-;)

2. 함수나 변수들이 사용되었는지 볼 수 있는 방법.
역시나 한눈에 척 하고 볼 수 있는 방법은, 그런 기능을 제공하는 plugin 을 찾아 설치해야 할 것입니다. (만 저는 그런 것을 사용하질 않아서 어떤 plugin 이 있는지는 잘 모르겠군요. ^^a)
보통 vim/emacs 사용자들은 cscope 라는 툴을 많이 사용합니다. cscope 은 source file 을 분석하여 함수들에 대한 call graph정보를 저장해 줍니다. 그럼 vim/emacs 에서 cscope 를 사용하도록 설정을 하고, 만들어둔 file 을 지정해 줍니다. 그런 뒤엔 source 를 작성 or 보다가 원하는 함수가 있으면 해당 함수가 어디서 작성되었는지, 어디에서 사용되고 있는지 등을 간단한 키조작만으로 볼 수 있습니다.
즉 source insight 처럼 그래프로 멋지게 call graph를 보여주진 않습니다만, source 를 보다가 이 함수가 어디서 어떻게 만들어졌는지를, 또는 이 함수를 어디에서 사용하고 있는지 (부르는 쪽은 여럿일 수 있는데 이들 모두를 나열해 주고 골라서 볼 수 있습니다.) 볼 수 있습니다.

3. 2번과 비슷합니다. cscope 로 원하시는 것을 해결하실 수 있습니다. (좀 더 간단한(?) 방법으론, vim/emacs 에서 자체적으로 제공(?)하는 tags 기능을 사용하실 수도 있습니다. 이는 ctags 라는 명령으로 tags file 을 생성한 뒤, 에디터에서 원하는 함수에서 간단한 키조작으로(vim은 Ctrl+], emacs는 Meta+.) 해당 함수로 jump하거나, 돌아올(vim은 Ctrl+t, emacs는 Meta+*) 수 있습니다.

뭐 좀 더 자세한 설명을 원하신다면, 해당 editor 를 사용하시면서 cscope나 기타 plugin 에 대해서 찾아보시고 공부하시면 될 듯 합니다.

기본적으로 GUI tool 들은 사용자가 접근하기 쉽고 간단히 다양한 기능을 사용할 수 있게 해 주는 반면, 제공하는 기능 외의 기능은 사용하기 매우 힘들거나 불가능합니다. 또한 대부분의 경우 마우스 사용 빈도가 매우 높아 손이 많이 이동해야 하고, 화면이 난잡(?)한 경우도 많지요.
반면에 vim 이나 emacs 쪽은 처음 사용하는데에 매우 불친절합니다. 뭔가 사용하기 쉽지 않고, 내가 제대로 사용하고 있지 못하다는 느낌을 많이 받습니다. ^^; 반면 사용할수록 자신이 원하는대로 바꿔나갈 수 있고, 손이 키보드에서 움직이지 않고도 모든 기능을 사용할 수 있다는 장점이 있습니다.

뭐 그렇다 쳐도 점점 emacs나 vim을 사용하는 사람보다는 각종 GUI tool 을 사용하는 사람이 늘어나는듯 해서 조금 아쉽긴 합니다. ^^a

minonnet의 이미지

vim에서 ctag와 Taglist는 설정해서 써 봤습니다...
으~음... 나름대로 좋은데요....
그런데 cscope는 어떻게 설정해 줘야 할지... 모르겠네요...
어떤 문서들을 보면 되는지?
또는 어떻게 하면 되는지 알려주시면 안 될까요~~? ^^;;

-------------------------------------
모두 즐거운 하루 되세요....^^
아~자~~!

molla의 이미지

ctags 와 큰 차이 없습니다.

http://wiki.kldp.org/wiki.php/VimCscopeTutorial
를 보시면 쉽게 하실 수 있을 것입니다.

cscope 는 다만 ctags 처럼 기본으로 단축키가 bind 되어 있지 않습니다. 따라서 macro로 만들어놓은 것을 사용하면 됩니다. 저 문서에 보면 2번에 있는 cscope_maps.vim 이 binding 입니다. key binding 이 맘에 안 들면 해당 script 를 수정하시거나 다른 script (vim 홈페이지의 script 쪽에서 cscope으로 찾으면 여러개가 나옵니다.) 를 사용하시면 됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.