함수 호출로 점프하는 방법?


14

태그 파일을 생성 한 후 exuberant-ctags함수 호출에서 선언으로 건너 뛸 수 있습니다 <C-]>. 매우 편리합니다.

내 질문은 다른 방법으로 어떻게해야합니까? 커서가 함수 정의에있을 때 함수가 호출 된 행으로 어떻게 이동할 수 있습니까?

ctags로 생성 된 파일을 볼 때 호출이 아닌 정의 위치와 관련된 정보 만 볼 수 있습니다. 그렇지 않으면 Vim을 현명한 해결 방법으로 사용하거나 무언가를 사용해야한다는 것을 의미합니까? 그 외에 exuberant-ctags?


Ack 또는 Ag도 작동하며 이러한 명령 줄 도구의 플러그인 래퍼를 매우 쉽게 찾을 수 있습니다. 예 : github.com/mileszs/ack.vimgithub.com/rking/ag.vim
dash-tom-bang

답변:


11

로 함수 호출로 이동할 수 없습니다 ctags. C / C ++ 및 Java cscope에는가 있으며 Vim과 잘 통합됩니다 (참조 :help cscope). 다른 언어의 경우 cscope호환 데이터베이스 를 생성 / 내보내기위한 도구를 찾을 수 있습니다 ( hscopeHaskell 및 starscopeRuby, Go 및 JavaScript의 경우 fi ). 당신은 또한 사용할 수 cscopeGNU 글로벌 지적함으로써, 데이터베이스 cscopeprggtags-cscope.

참고 사항 : Engrish,; )를 때때로 사용하여 혼란스럽게하지 않으면 아마도 대신 범용 태그 를 사용하고 싶을 것입니다 exuberant-ctags. 후자는 몇 년 동안 업데이트되지 않았습니다. 전자는 적극적으로 관리되는 포크입니다.


cscope는 C / C ++ 및 Java 이외의 다른 언어를 지원합니까?
edi9999

@ edi9999 cscope자체는 C / C ++, Lex 및 Yacc를 지원합니다. Java에 대한 지원은 약간 유용합니다. 유틸리티 global를 통해 GNU에서 (구식) PHP 및 JavaScript에 대한 지원을받을 수 있습니다 gtags-cscope. 위에서 말했듯이 cscope호환 가능한 데이터베이스를 내보낼 수있는 다른 인덱서가 있습니다 .
사토 카츠라

8

ctags로는 그렇게 할 수 없습니다.

cscope (자체 도움말 섹션이 있음 :help cscope) 또는 global 과 같은보다 강력한 대안을 사용해보십시오 .


cscope는 C / C ++ 및 Java 이외의 다른 언어를 지원합니까?
edi9999

예, 최소한 PHP와 JavaScript입니다.
romainl

1
@romainl Nope는 cscope자체적으로 PHP 나 JavaScript를 지원하지 않습니다. 그러나 GNU global에서 PHP 및 JavaScript 파일을 인덱싱 한 다음 gtags-cscope을 사용하여 결과 gtags파일 을 사용하십시오 cscope.
Sato Katsura

@SatoKatsura, cscope 는 JavaScript (및 CSS)를 지원합니다 .
romainl

2
@romainl 빠른 실험을 기반으로 추측하는 대신 cscope출처 를 살펴 보는 것이 좋습니다. cscope다소 편안한 C 파서가 있습니다. 그것이 전부이며 모든 것이 전부입니다. 이 구문 분석기를 사용하면 "support"의 적절한 값을 위해 많은 언어를 "지원"합니다. 구조체는 C와 비슷하거나 적게 보이는 한 인식됩니다. 그렇기 때문에 fi Java 클래스와 최신 PHP 구문이 인식되지 않습니다. fi를 starscope 와 비교 하면 실제로 새 언어를 추가 할 수 있습니다.
Sato Katsura

8

Vim의 grep 명령을 사용 하여 프로젝트의 모든 파일을 검색 할 수 있습니다 .

:grep! "\<<cword>\>" . -r
:copen

이것을 키 바인드에 넣자 :

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

대규모의 익숙하지 않은 코드베이스를 탐색 할 때이 프로젝트 전체에서 하나의 키를 사용하여 검색 할 수 있습니다.

\<그리고 \>당신이 부분 일치를하지 않도록, 단어의 시작과 끝을 나타내는 정규 표현식 시퀀스입니다. -wgrep 하는 옵션이 다른 방법 일 수도 있습니다.

그러나 이것은 비 지능적 검색 이므로 관련 단어에 같은 단어가 표시되면 오 탐지를 생성 할 수 있습니다.


사실, 대신 grep.vim 플러그인수정 된 버전을 사용합니다. 이것은 사용하기에 약간 더 친숙합니다.

  • 검색 패턴과 grep 명령 줄을 편집 할 수 있으므로 ( src/ lib/대신 대신 특정 폴더를 대상으로 지정할 수 있음 .) 변경 사항을 기억합니다.
  • Google의 csearch에 대한 지원을 추가 했습니다 . 매번 파일을 스캔하는 대신 단어 색인을 작성하므로 grep보다 훨씬 빠릅니다. 특히 csearch는 약간 다른 정규 표현식 표준을 \b사용 하므로 \<및 대신에 사용해야합니다 \>.

구성하고 이와 같은 일부 표준 파일을 제외 합니다 .

빠른 액세스를 위해 두 개의 키 바인드를 만듭니다 . F3명령 줄을 편집하고 F4추가 키 입력없이 이전에 구성된 명령 줄을 사용하겠습니다 . 메커니즘은 매우 추악하고 정리를 사용할 수는 있지만 나에게 도움이되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.