티스토리 뷰


조금씩 cscope대신 global을 써보고 있다.


global을 cmd에서 그 자체만으로 사용할 수 있기도 하지만 아무래도 주 활용은 역시 vim으로 여기저기 찾아다닐 수 있도록 하는 네비게이션 목적-

global 공식 페이지에 이런 저런 내용이 잘 정리되어 있기 때문에 그냥 그대로 따라해 본다.

vim+global의 공식 페이지는 : https://www.gnu.org/software/global/globaldoc_toc.html#Vim-editor

거기 있는 내용을 그대로+약간 추가해서 번역해 봄-





3.5.2 사용을 위한 준비 사항


vim에서 global을 사용할 때는 gtags를 주 명령어로 사용하게 된다.

먼저 global을 설치한 디렉토리에서 gtags.vim을 vim plugin 디렉토리에 복사해 준다


$ cp <global installed directory>/share/gtags/gtags.vim ~/.vim/plugin



3.5.3 활용

- 특정 함수의 정의부로 이동하고 싶다면


:Gtags func_name


vim은 global(1)을 실행해서 결과물을 파싱하고 quickfix창에 이를 보여준다.

검색 결과가 여러 개일 경우 첫 번째 검색된 사항을 보여준다. 예를 들어


:Gtags set_binfmt



여러 개의 엔트리가 있을 경우, 이동 관련 명령은 :


:cn    다음 엔트리로

:cp    이전 엔트리로

:ccN    N 번째 엔트리로

:cl    모든 엔트리를 보여주기


quickfix 창에 관련한 도움말은 :


:h quickfix


엔트리 이동에 관련된 추천 키맵은 :


map <C-n> :cn<CR>

map <C-p> :cp<CR>


흔히 사용되는 키맵이라 나도 이렇게 적용해서 사용하고 있다.



- 주어진 함수를 참조하는 부분을 찾고 싶다면 '-r' 옵션을 사용한다. set_binfmt를 참조하는 부분을 확인하고 싶다면


:Gtags -r set_binfmt



위와 같이 set_binfmt는 8군데에서 참조된다. 각 항목 간의 이동은 :cn :cp를 사용하며, 나는 키맵을 해두었으니 ctrl+n, ctrl+p를 사용



- GTAGS 목록에 정의되지 않은 심볼이 있는 곳으로 이동하려면 :


:Gtags -s symbol_name


grep을 돌리는 건지 어떻게 찾는 것인지는 모르겠지만, 검색어에 맞는 결과가 없다면

Error: Line which matches to <symbol_name> not found.

라는 오류 메시지를 출력한다. 실행해 봤을 때 결과가 나오지 않아서 맞게 이해한 것인지 알 수 없다.



- 문자열을 활용하여 검색 결과를 얻고 싶다면 '-g' 옵션을 사용한다. 예를 들어 아래의 검색 결과는


:Gtags -g int argc



vim내에서 grep을 간편히 사용할 수 있는 방법이기 때문에 활용도가 높은 부분이다. 비슷한 용례로는


:Gtags -g "root"    -> "root" 그대로를 검색한다. root를 검색하는 것이 아님

:Gtags -ge -C       -> -C를 검색한다. Gtags에 인자로 - 등을 넘기기 위해서 -e 옵션을 같이 사용해야 한다.



- 특정 파일에 존재하는 태그의 목록을 확인하고 싶다면 '-f' 옵션을 사용한다.


:Gtags -f getdelays.c



현재 보여지고 있는 파일 자체의 태그 목록을 보고 싶다면 %옵션을 사용한다


:Gtags -f %



- GTAGS에 POSIX 정규표현식을 인자로 줄 수 있다.


:Gtags ^put_            -> put_ 으로 시작하는 태그 엔트리를 보여준다

:Gtags -g fseek(.*SEEK_SET)        -> 앞은 상관없고 마지막 인자로 SEEK_SET을 받는 fseek 함수의 태그를 보여준다.



함수 이름은 같지만 인자의 형태가 다른 경우 특정 패턴 검색에 유용히 사용할 수 있는 기능이다.

쉘과 같이 이름을 타이핑 도중 탭을 누르면 자동 완성이 되는 그런 부분.

입력 중 CTRL-D를 누르면 지금까지 타이핑해둔 문자열이 있는 모든 태그를 보여준다.



- 패턴 검색. -P 옵션은 인자로 주어진 패턴을 가진 파일들을 quickfix창에 보여준다.

파일 자체에 대한 패턴이므로 경로, 파일 명등이 인자가 된다.


:Gtags -P /drivers/            -> drivers 디렉토리 아래를 검색한다.

:Gtags -P \.h$              -> 모든 헤더 파일을 검색한다.

:Gtags -P init                    -> 경로에 init이 들어간 파일들을 검색한다


사용해보면 실상 첫 번째와 세 번째 용례는 차이를 모르겠다



- 몇 가지를 제외한 global(1)의 모든 옵션을 vim에서 Gtags와 조합해 사용할 수 있다. 제외되는 옵션은

-c -n -p -q -u -v


:Gtags -gi paTtern        -> i 옵션의 흔한 용례대로, 대소문자 구분없이 pattern이 들어간 문자열을 보여준다.

:Gtags -POi make        -> make를 패턴으로 파일을 검색한다. Makefile은 검색 결과로 나타나지만 makeit.c는 해당되지 않는다.


관련된 상세한 옵션은 https://www.gnu.org/software/global/globaldoc_toc.html#global  참조



- 정의와 참조를 왔다갔다 할 수 있도록 하는 명령어


: GtagsCursor


뭔가 거창한 것 같지만 그냥 tags+cscope를 사용할 때 CTRL+] 와 CTRL+t 의 의미이다.

다만 global에서는 GtagsCursor만을 사용하며, 참조부에서는 정의부로, 정의부에서는 참조부로 이동한다.

그냥 CTRL+] 와 CTRL+t


빈번히 사용되기 때문에 역시 키맵해서 사용하는 것을 권장 : map <C-\>^] :GtagsCursor<CR>






실제 페이지에서는 짧은 내용이 더 있지만 딱히 사용될 부분은 아니라 생략-

일단은 언제나 quickfix창이 따라다니기 때문에 검색 결과들을 확인하며 쓰기 좋다.

조금만 더 쓰다보면 cscope는 완전히 대체될 듯한 느낌-



댓글