[vim] Vim and Ctags 팁과 요령 [닫기]

방금 Ctags를 설치했습니다 (오히려 또는 GVIM) 내 빔과 (C ++ 개발에 도움), 좋아하는 명령, 매크로, 바로 가기, 그것과 함께 이동 도움말을 찾을 싶습니다 …

최고의 무기고를 공유하십시오. Vim 개발에서 C ++에 권장하는 다른 Vim 애드온은 무엇입니까?

EDIT 어떤 다른 추가에 당신이 Ctags는와 함께 사용해야합니까?

EDIT2 태그와 함께 사용하는 gVim의 버전은 무엇입니까? 차이가 있습니까?

EDIT3 대규모 프로젝트와 소규모 프로젝트 모두에서 프로그래밍 경험을 향상시키는 방법은 무엇입니까?



답변

Ctrl+ ]– 정의에 이동
Ctrl+ T정의에서 점프 다시 -.
Ctrl+ W Ctrl+ ]-수평 분할에서 정의를 엽니 다

vimrc에이 줄을 추가하십시오
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

Ctrl+ \-새 탭 에서 정의 열기
Alt+ ]-수직 분할에서 정의 열기

태그가 생성 된 후 다음 키를 사용하여 기능에 태그를 지정하고 태그를 지정할 수 있습니다.

Ctrl+ Left MouseClick– 정의로 이동
Ctrl+ Right MouseClick정의에서 점프 다시 –


답변

항상 내 .vimrc에 들어가는 한 줄 :

set tags=./tags;/

이것은 현재 디렉토리에서 “태그”를 찾고, 트리가 발견 될 때까지 루트쪽으로 트리를 작동시킵니다. IOW, 소스 트리의 루트가 아닌 소스 트리의 어느 곳에 나있을 수 있습니다.


답변

C 개발을위한 또 다른 유용한 플러그인은 cscope입니다.
Ctags를 사용하여 정의로 이동할 수있는 것처럼 Cscope는 호출로 이동합니다. 함수로 합니다.

~ / bin / 디렉토리에 cscope가 있으면 .vimrc에 다음을 추가하고 g ^]를 사용하여 호출 함수로 이동하십시오 (: help cscope 참조).

if has("cscope")
    set csprg=~/bin/cscope
    set csto=0
    set cst
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
        " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
endif

거의 잊어 버렸습니다 … ctags와 마찬가지로 데이터베이스를 생성하고 주기적으로 업데이트해야합니다. 다음 스크립트를 사용합니다

select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files

여기서 ‘select_files’는 Makefile에서 C 및 헤더 파일 목록을 추출하는 또 다른 스크립트입니다. 이 방법으로 프로젝트에서 실제로 사용하는 파일 만 인덱싱합니다.


답변

ctags 조회에 디렉토리를 추가 할 수 있습니다. 예를 들어, Qt4 용으로 작성된 ctags 색인이 있고 내 .vimrc에 있습니다.

set tags+=/usr/local/share/ctags/qt4


답변

위의 모든 …

code_complete : 함수 매개 변수 완료, 코드 스 니펫 등

taglist.vim : 소스 코드 브라우저 (C / C ++, java, perl, python, tcl, sql, php 등 지원)


답변

ALT- 왼쪽 및 ALT- 오른쪽을 사용하여 태그 스택을 팝 / 푸시합니다.

" Alt-right/left to navigate forward/backward in the tags stack
map <M-Left> <C-T>
map <M-Right> <C-]>

당신이 사용하는 경우 hjkl운동 당신은 매핑 할 수 <M-h><M-l>대신.


답변

동일한 이름의 여러 정의

<C-w>g<C-]> 분할에서 정의를 열고 :tjump 나 정의로 이동하거나 여러 정의가있는 경우 선택할 정의 목록을 제공합니다.