Vim을 C/C++ IDE로써 사용하기

truecolor의 이미지

죄송합니다. 검색도 많이 하기 전에 이런 질문을 올려서. 그러나 어디서 부터 시작을 하는 것이 삽질을 줄이는지 막막해서 여쭤 봅니다.

현재 저는 십만 라인이 넘는 큰 C++ 소스를 분석하고 여기서 작업을 해야합니다. VC++에 매우 익숙해서 기본적인 코딩/디버깅은 전혀 문제 없습니다. 오직 문제는 리눅스 환경에서의 도구 다루는 법입니다. 예를 들어, 디버깅을 할 때도 머리 속으로는 이렇게 해야하는지를 알지만 일일이 gdb에서 print를 하자니 답답하고 너무 시간이 걸리더라구요. 그래서 Eclipse Europa 최신 버전을 사용하니 그래도 쓸만합니다. 그래도 시간이 나면 vim 혹은 emacs에 익숙해지려고 합니다.

옆에 vim을 아주 잘 다루는 친구에게 물어보니, vim만 가지고도 다 할 수 있다고 자꾸 그러는데 정확하게 C/C++ IDE로서 vim을 쓰려면 어떤 설정을 해줘야하는지 좀 막막합니다. 기본적인 칼라링, 인덴테이션 이외에 IDE로서 제가 원하는 기능은 아래와 같습니다. 참고로 gvim을 쓸 마음은 없습니다.

1. 코드 폴딩 기능
- 소스가 크고 #ifdef가 많으니 폴딩 기능은 필수입니다. Inactive된 코드들을 가려주거나 색깔만 다르게 해줘도 가독성이 크게 늘어납니다.

2. Auto completion 및 소스 인텔리센스
- ctags를 쓰면 definition등을 찾아가줍니다만, 이걸 어떻게 자동화 시킬 방법이 없을까요? Vim으로 오픈한 소스는 파일 하나 단위인데, 수백개의 파일이 하나의 프로젝트 형식으로 되어있습니다. 이런 상황에서도 ctags가 항상 업데이트가 되면서 인텔리센스가 제대로 작동하게 할 수 없을까요?

3. 컴파일 오류 시 바로 소스 코드로 맞춰주기
- 어떤 기능인지 잘 아실 것 같습니다. 컴파일을 바로 실행시키고 VC++과 같이 F4를 누르면 에러가 난 지점으로 커서를 옮겨주는 것입니다.

4. 디버깅 IDE
- 과연 vim에서 gdb를 실행시켜 현재 디버깅 중인 소스 파일과 위치를 손쉽게 볼 수 있을까요?

질문이 너무 많아 죄송합니다. 어디서부터 시작하면 좋을까요? 참고 글이라도 좋은 것이 있으면 부탁드리겠습니다. 깔려있는 vim 버전은 7.1이군요.
감사합니다.

galien의 이미지

저보다 고수분들이 답변을 이 밑으로 줄줄이 달아주시겠지만,

1. 폴딩기능
- 뭐 찾아보면 자동으로 범위를 지정해서 해주는 플러그인이 있겠지만,2000줄 미만의 소스만 짜는 임베디드 쪽의 업무를 하다보니 그냥 비주얼라인으로 범위 지정한 다음에 :fold 명령 정도 밖에 쓰지 않습니다 저는. 다른 분들이 답변 해 주시겠지용

2. ctags...
- ctags -R --fields=+S 로 태그를 만든 다음에, 소스에서 콘트롤+N(P)등으로 함수를 자동완성하고 괄호를 연 다음에 탭키를 누릅니다.

3/4는 사용하지 않아 잘 모르겠습니다만, 다른 분들 답변이 궁금해서 제가 아는 부분에만 미리 답변을 답니다.

imyejin의 이미지

1. :help folding 하셔서 도움말을 보셔야 -_-;;

2. 쩜 찍으면 나오는 그런 오토 컴플리션은 기본적으로 제공되지는 않고 별로도 플러그인을 깔면 되기는 합니다만, 기본적으로 vim 에서는 Ctrl-P 나 Ctrl-N 을 누르시면 auto completion 이 되는데, C 의 경우에는 인클루드한 헤더를 뒤져서 오토 컴플리션 리스트를 보여줍니다. 예를 들어 stdio.h 를 인클루드하고 pr 까지 타이핑한 후 Ctrl-P를 누르면 pr로 시작하는 단어들 목록이 죽 뜹니다. 멤버함수만 찾아준다든지 하는 언어의 문법에 적합한 걸 찾아주는 정도까지는 아니라도 앞에 몇 글자만 맞게 치면 Ctrl-P 를 눌러서 찾아 넣는 것 정도는 아주 유용합니다. 그런 추가 기능은 별도 플러그인이 필요하니 vim 홈페이지에서 검색해 보세요.

3. copen 이 바로 그 기능입니다.

4. Emacs 쓰시는 분들은 이맥스가 워낙 통합환경이다 보니 방법이 확실히 있는 것으로 아는데, vim 쓰시는 분들은 보통은 따로따로 사용하는 것 같던데요. ddd 같은 gdb 의 프론트엔드를 쓰기도 하고요.

@ GUI 환경의 IDE를 원한다면 KDevelop 을 써 보시는 것은 어떤지요?

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

truecolor의 이미지

결국 저도 맨땅에 부딛혀가며 삽질 해야겠네요. 감사합니다. 참고로 GUI를 쓴다면 이클립스를 씁니다. 이클립스가 위에 언급된 기능이 다 잘 되어있습니다. 속도가 느린 것이 최악이지만 기능만 놓고 보면 VC++과 가장 근접해보이네요. KDevelop는 잠시 써봤다가 바로 포기했습니다 :)

imyejin의 이미지

그런데 이클립스 CDT 요즘은 빨라졌나요? 한 4, 5개월 전에 이클립스를 시험삼아 돌려 봤는데 작은 프로젝트도 auto completion 같은 기능 켜니가 CTD는 너무 느려서 못 쓸 지경이었는데 ... 요즘은 큰 프로젝트를 로딩해서 쓸 수 있나요?

KDevelop 도 위의 기능을 거의 다 만족하고 (folding, 자동완성, 디버거 통합) 속도는 이클립스와 비교가 안되게 빠릅니다. 하지만 KDevelop 에서는 전처리 구문 폴딩을 지원을 안하는 것 같습니다. (설정이 가능한지는 저도 모르겠습니다.)

덧: 방금 배포본에서 제공하는 이클립스 말고 Europa 를 설치해 봤는데 확실히 빨라졌네요 !!

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

체스맨의 이미지

1. 폴딩 잘 됩니다. vs 에 뒤지지 않구요.

2. ctags 자동 갱신은 makefile 에서 할 수 있습니다. 다른 방법이 있는지는 잘 모르겠군요. vs 역시 한번 빌드해줘야 자동 완성이 갱신될 겁니다.

3.잘 됩니다. 어떠한 툴의 출력도 errorformat 에 정의된 정규식에 의해 오류 리스트에 로드할 수 있습니다.

4. 디버거 연동 부분은... 잘 안된다고 생각하시는 게 좋을 것 같습니다. 하지만, 디버거와 편집기는 별개로 생각하시는 게 좋다고 봅니다. emacs 가 gdb 와 연동되긴 해도, vs 의 통합 디버거와는 연동되지 않습니다. 저는 vs 를 이용할 때도, 기존 프로젝트를 가지고 다른 분들과 협업하는 경우가 아니라면, 명령행 툴을 이용해서 컴파일까지 하고, 디버깅이 필요한 경우에만 IDE 를 띄워서 실행 파일을 여는 식으로 작업을 합니다.

그리고, 개인적인 취향이지만...

폴딩은 일정 기간 써봤는데, 오히려 불편하더군요. % 로 matching 블럭을 확인하거나, ]] 또는 [[ 로 함수 점프를 하는 등으로 작업합니다.

그리고 자동 완성 기능 등도 시도는 해봤지만, 현재는 안씁니다. 그냥 소스에 자연스럽게 익숙해지는 쪽을 택했습니다.

그래서, swodniw 님께서 필수 기능이라 생각하시는 것중에 제가 필수기능이라 생각하는 것은 3번 뿐인 것 같네요.... ^^

Orion Project : http://orionids.org

imyejin의 이미지

참고로 C/C++ 로 작업하면서 저런 기능들이 필요할 때는 csupport 라는 플러그인을 많이들 쓰더군요.

그리고 C 전처리 구문을 fold 하는 방법에 대한 것은 FAQ 에 가까운지 여기에 정리가 되어 있습니다. http://wwwx.cs.unc.edu/~jsterrel/notes/vim-c-preproc-fold.php

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

체스맨의 이미지

전처리 구문 폴드도 당연히 잘 됐습니다. 제가 임의로 정의한 블럭 시작과 끝에 대한 폴드도 할 수 있을만큼 VIM 폴딩은 유연합니다.

단지 개인적 취향이지만, 제가 일정 기간 사용을 해보니, 결과적으로 그게 가독성을 좋게해주거나, 편리함을 주지 못했었습니다. 그냥 하나의 연속적이고 일차원적인 소스 표시가 심플하고 보기 좋았을 뿐입니다. ^^

Orion Project : http://orionids.org

imyejin의 이미지

예 저도 마찬가지로 폴딩은 거의 사용하지 않는데, vim 같은 경우는 편집기 내에서 search 해서 바로 이동하는 게 마우스로 손이 안가도 되니까, 폴딩을 해서 아래 위로 스크롤하기 편하게 만들어야겠다는 생각이 그다지 강하게 들지가 않더라고요.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

rkdskd의 이미지

c/c++ 플러그인으로 나름 괜찮은것 같습니다.

http://lug.fh-swf.de/vim/vim-c/screenshots-en.html

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.