티스토리 뷰
조금씩 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는 완전히 대체될 듯한 느낌-
'일하자 > Devel_env' 카테고리의 다른 글
Asrock AB350M Pro4 메모리 호환성 확인 (0) | 2021.12.14 |
---|---|
ubuntu 16.04에 wireshark 설치 (0) | 2016.12.21 |
grep 따위는 이제 저 멀리 던져도 되겠다 - ack (0) | 2015.06.19 |
gnu global : cscope를 대체할만한 소스 분석도구 (0) | 2015.04.17 |
vim 플러그인 설정 (0) | 2015.02.13 |
- Total
- Today
- Yesterday
- i30FD
- 임프레자
- 멤버부싱
- 부틸매트
- 티뷰론
- FD
- 관리
- 피팅
- 캡티바 오토크루즈
- i30썬루프
- 자전거
- 52-36
- 서브프레임부쉬
- i30
- 로라질
- WRX
- BSC300
- 멤버부쉬
- 텐프로
- 정비
- 레인보우 에어라이트
- 3.3 후륜
- 카오디오
- tcx지원문제
- 허브정비
- STI
- 컴팩다드
- 헛바퀴질
- 해피해킹
- 캡티바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |