2011-10-28 3 views
4

그래서 여기 내 문제가 있습니다. 나는 Vim과 함께 활발한 ctags를 얻었으며, 대부분의 경우 훌륭하게 작동합니다. 여전히 저를 괴롭히는 한 가지는 변수 이름과 같은 이름의 함수를 검색하려고 할 때마다입니다. 가끔씩 첫 번째 시도에서 올바른 태그를 얻는 경우가 있습니다. 이후에 나는 대체 태그 목록을 :tselect으로 끌어 올린 후, 함수 정의 나 변수 정의/할당 모두를위한 태그를 제공합니다. (나는 정의와 할당이 구문 상으로 구별 할 수 없도록 PHP를 사용한다.)Vim에서 특정 태그를 찾으십시오

그러나 function 및 variable에 대해 'kind'라는 값이 'f'또는 'v'인 열이 있음을 알았습니다. 나는이 분야에 대한 많은 정보를 찾지 못했지만 정확히 표준화되지 않았거나 널리 사용되지는 않았을 것으로 보인다. 내 질문은 : Vim에서 태그 결과를 "kind"로 필터링 할 수 있습니까?

이상적으로 기본값은 전체 태그 파일을 검색하는 것이지만 추가 플래그를 지정하면 특정 ('f'또는 'v') 종류 만 검색 할 수 있습니다.

이것은 종종 나올 때가 아니기 때문에 작은 문제이지만 때로는 당신을 귀찮게하는 작은 문제입니다.

+0

이 블로그 포스트는 내가 당신과 (내가) 다음과 같은 라인을 따라 유망 해 보인다. http://andrewradev.com/2011/10/15/vim-and-ctags-finding-tag-definitions/ – icc97

+0

당신은 모든 것을 구별 할 수있는 충분한 정보를 가지고있는 태그 파일을 만들 수 있습니다, 그것은 전투의 절반 밖에되지 않으며, 아무도 나머지 절반에 집중하지 않는 것 같습니다. 나머지 절반은 Vim이 태그를 찾고있는 컨텍스트를 고려하고 컨텍스트를 기반으로 특정 유형의 태그 만 자동으로 검색합니다.내가 아는 한 Vim은 자동으로 이런 일을하지 않으며, 이런 식으로 작동하도록 Vim을 설정하려고 시도한 사람은 본 적이 없다. –

답변

4

당신은 확실히 당신이 원하는 PHP-종류의 조합으로 ctag 파일을 생성 할 수 있습니다 (명령 ctags --list-kinds의 OUPUT 참조.)

당신이 노력하면 정력 기능 tagkind와 바인딩을 만들 수 있습니다 가치 판단되는 경우 명령에. tagkind 함수는 현재 tags vim 변수를 관심있는 종류의 태그 파일 만 가리키고 :tag.을 호출하도록 덮어 쓸 수 있습니다. 선택적으로 이전 버전의 tags 변수를 저장하고이 한 번의 호출 후에 복원 할 수 있습니다.

불행히도, 나는 이것 이외의 어쨌든 모르겠다. 아마도 다른 사람이 알 것입니다.

+1

흥미로운 아이디어 - 나를 위해 일합니다. 아무도 신경 쓰지 않으면 https://gist.github.com/1349053에'.vimrc' 코드 조각을 올려 놓았습니다. vimscript는별로 좋지 않지만, 저에게는 충분히 좋은 것처럼 보입니다. – Jonathan

5

--python-kinds=-i으로 파이썬 ctags를 생성하여 가져 오기 명령문 (쓸모없는 것) 용 태그를 제외합니다. 어쩌면 --php-kinds=-v으로 생성하고 태그 클래스를 완전히 삭제할 수 있습니다.

:help tag-priority을 읽을 수 있습니다. 분명히 "최고 우선 순위"태그는 하드 코딩 된 로직을 기반으로 선택됩니다.

0

fzf (fzf.vim)는 전체 프로젝트의 경우 :Tags이고 ctags를 생성하는 현재 파일 옵션의 경우 :BTags입니다.

플러그인에서 발생하는 문제 'Skip tag kinds in :BTags and :Tags'은 특정 종류의 생성 된 태그에만 사용할 수있는 다음 코드를 제공합니다. 아래에서 PHP f 종류 만 검색하도록 수정했습니다. 질문에 대한 나의 의견에 따라

command! BTagsEnhanced 
     \ call fzf#vim#buffer_tags(<q-args>, [ 
     \ printf('ctags -f - --sort=no --php-kinds=f --excmd=number --language-force=%s %s', &filetype, expand('%:S'))], {}) 

참고 Vim and Ctags: Finding Tag Definitions에 블로그 게시물을 통해 잠재적 인 빔 tagfinder.vim 플러그인이있다. 그러나 나는 그것을 시도하지 않았다.

관련 문제