Vim and Ctags 팁과 요령
방금 Vim (또는 gVim)과 함께 Ctags (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
나 정의로 이동하거나 여러 정의가있는 경우 선택할 정의 목록을 제공합니다.
내가 가장 많이 사용하는 명령은 C-]이며 커서 아래의 함수 정의로 이동합니다. 더 자주 전화를 걸기 위해 더 자주 사용할 수 있습니다. 그 후 Co는 한 수준으로 돌아올 것이고, Ci는 다시 더 깊어집니다.
태그 목록 플러그인이 필수 아이템 인 것을 발견했습니다 . 별도의 창에 알고있는 모든 태그 (열린 파일)가 나열되며 더 큰 파일을 쉽게 탐색 할 수 있습니다.
나는 주로 파이썬 개발에 사용하지만 C / C ++에만 더 좋을 수 있습니다.
내 실험 플러그인 에서 태그 조작을 캡슐화했습니다 .
vim의 C ++ 개발과 관련하여 이미 대답 했습니다 . 자신의 스위트와 다른 플러그인을 사용합니다.
나는 큰 C ++ 프로젝트를 지원하기 위해 2 년 동안 내 vim 플러그인을 조정 해왔다. 당신은 그들을 볼 수 있습니다.
그들은 ctags와 cscsope를 사용합니다.
http://www.vim.org/scripts/script.php?script_id=1638
http://www.vim.org/scripts/script.php?script_id=2507
내 .gvimrc 파일에 다음을 넣습니다. gvim이 시작될 때 언제든지 트리에서 태그 파일을 검색합니다.
function SetTags()
let curdir = getcwd()
while !filereadable("tags") && getcwd() != "/"
cd ..
endwhile
if filereadable("tags")
execute "set tags=" . getcwd() . "/tags"
endif
execute "cd " . curdir
endfunction
call SetTags()
그런 다음 소스 트리 맨 위에있는 다음과 같은 스크립트를 사용하여 태그 파일을 주기적으로 재생성합니다.
#!/bin/bash
find . -regex ".*\.\(c\|h\|hpp\|cc\|cpp\)" -print | ctags --totals --recurse --extra="+qf" --fields="+i" -L -
나는 macos에서 vim을 사용하고 원래 ctags는 잘 작동하지 않으므로 최신 버전을 다운로드하고 구성하여 설치하십시오. ctgas를 / usr / local / bin / ctags에 설치합니다 (원본을 유지하기 위해)
"taglist
let Tlist_Ctags_Cmd = "/usr/local/bin/ctags"
let Tlist_WinWidth = 50
map <leader>ta :TlistToggle<cr>
map <leader>bta :!/usr/local/bin/ctags -R .<CR>
set tags=tags;/
map <M-j> <C-]>
map <M-k> <C-T>
set tags+=./tags;/
cscope에서 작동 하도록 위의 SetTags () 검색 기능을 수정했습니다 (동등한 대체해야 함 ). 작동하는 것 같습니다!
"cscope file-searching alternative
function SetCscope()
let curdir = getcwd()
while !filereadable("cscope.out") && getcwd() != "/"
cd ..
endwhile
if filereadable("cscope.out")
execute "cs add " . getcwd() . "/cscope.out"
endif
execute "cd " . curdir
endfunction
call SetCscope()
위의 SetCscope () 함수에 대한 또 다른 반복. "cscope.out"이 다음 디렉토리에 있지 않고 cscope pre-path가 일치하도록 설정합니다.
function s:FindFile(file)
let curdir = getcwd()
let found = curdir
while !filereadable(a:file) && found != "/"
cd ..
let found = getcwd()
endwhile
execute "cd " . curdir
return found
endfunction
if has('cscope')
let $CSCOPE_DIR=s:FindFile("cscope.out")
let $CSCOPE_DB=$CSCOPE_DIR."/cscope.out"
if filereadable($CSCOPE_DB)
cscope add $CSCOPE_DB $CSCOPE_DIR
endif
command -nargs=0 Cscope !cscope -ub -R &
endif
참고 URL : https://stackoverflow.com/questions/563616/vim-and-ctags-tips-and-tricks
'development' 카테고리의 다른 글
HTML을 사용하여 문서의 모든 인쇄 페이지에 머리글과 바닥 글을 인쇄하는 방법은 무엇입니까? (0) | 2020.02.13 |
---|---|
java.util.Date vs. java.sql.Date (0) | 2020.02.13 |
compileSdkVersion과 targetSdkVersion의 차이점은 무엇입니까? (0) | 2020.02.13 |
푸시 된 후 커밋을 스쿼시하는 방법은 무엇입니까? (0) | 2020.02.13 |
배열의 길이를 어떻게 찾습니까? (0) | 2020.02.13 |