2009-11-17 29 views
8

Tôi muốn có thể khởi động vim trong thư mục con tùy ý trong dự án của mình và tìm kiếm thư mục gốc của dự án cho tệp tags và sau đó tìm kiếm trong thư mục không liên quan bên ngoài cây dự án.Lời khuyên cho việc thiết lập đường dẫn tìm kiếm phức hợp CTAGS

Ví dụ chúng ta hãy nói rằng tôi có như sau:

~/projects/foo/bar/baz.c 
~/projects/foo/tags 
~/some/arbitrary/path/tags 

Tôi muốn mở baz.c từ bên trong bar thư mục con, có nó tìm lên để tìm foo/tags và sau đó để tìm kiếm some/arbitrary/path/tags nếu biểu tượng không được tìm thấy trong foo/tags.

Bây giờ tôi biết tôi có thể làm:

set tags=./tags,tags; 

để hoàn thành nhiệm vụ đầu tiên. Nó rõ ràng là dấu chấm phẩy cho vim tìm kiếm tới gốc. Tuy nhiên không ai trong số các công việc sau đây:

set tags=./tags,tags,~/some/arbitrary/path/tags; 
set tags=./tags,tags;~/some/arbitrary/path/tags 

Người đầu tiên tìm thấy chỉ là biểu tượng từ ~/some/arbitrary/path/tags trong khi cái thứ hai chỉ tìm thấy các biểu tượng trong tập tin thẻ ở thư mục gốc của dự án.

Bất kỳ ai biết cách thực hiện việc này? Tôi đang trên Linux mua đường.

+0

Hmm, tôi không nghĩ rằng simicolon là đúng. Bạn có chắc là bạn đang ở trong thư mục hiện tại bạn nghĩ bạn đang ở? Hãy thử: pwd từ bên trong vim. Tôi đã sử dụng nhiều thẻ được phân cách bằng dấu phẩy trong nhiều năm với cả đường dẫn tương đối và tuyệt đối. – Benj

Trả lời

5

tôi sử dụng:

set tags=~/.tags 
set tags+=~/.vim/tags/cpp 
set tags+=~/src/git/gitsrc/tags 
" and so on... 

Đối với cách tạo thẻ trong rễ một dự án đặc biệt của:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

Tôi thích thiết lập này từ C++ code completion vim tip.

+1

Tách lệnh thiết lập thành nhiều dòng đã giải quyết được sự cố cho tôi. Tôi đã kết thúc bằng 'set tags = tags;' trong '.vimrc' và sau đó gõ': set tags + = ~/some/arbitrary/path/tags' từ trong vim. –

0

thay thế dấu ngã bằng đường dẫn đến nhà bạn.

+0

Xin lỗi, không hoạt động. Tôi đã thử cả hai thẻ 'set tags =./Tags, tags,/home/myuser/some/arbitrary/path/tags;' và 'bộ thẻ =./Tags, tags;/home/myuser/some/arbitrary/path/tags' –

+0

bạn thử nghiệm nó như thế nào? Chính xác những gì đang xảy ra? Tôi đã tạo một tệp thẻ trong thư mục lập trình của tôi, đã chỉnh sửa .vimrc của tôi để bao gồm đường dẫn đó trong "set tags", sử dụng dấu ngã làm điểm bắt đầu. Sau đó, tôi tạo một tệp giả, test.c, trong thư mục chính của tôi (vì vậy, không có trong thư mục có tệp thẻ), đã viết tên của hàm sẽ được liệt kê trong tệp thẻ và nhấn "ctrl-] "với con trỏ trên hàm. Đã cho tôi đúng nơi nó được cho là. – Derek

+0

Tôi đặt đường dẫn tìm kiếm theo cách thủ công bên trong vim. Tôi thử nghiệm bằng cách tìm hai biểu tượng, một biểu tượng từ một tệp riêng biệt trong cùng một dự án có tệp thẻ là một vài thư mục trong thư mục gốc của dự án và sau đó tìm biểu tượng từ tệp thẻ bên ngoài trên đường dẫn tùy ý. Tùy thuộc vào phiên bản của đường dẫn tôi sử dụng, tôi tìm thấy một biểu tượng, hoặc một biểu tượng khác, nhưng không bao giờ cả hai. –

0

Tùy chọn "thẻ đặt" đầu tiên của bạn hoạt động đối với tôi trong Linux. (Như trong, tôi đã thực hiện nó trước đây, và tôi chỉ tái tạo nó để chắc chắn.) Bạn có thể có nhiều đường dẫn khác nhau trong tùy chọn thẻ của bạn, cả tuyệt đối và tương đối. Tuy nhiên, trong phần thứ hai, bạn có một dấu chấm phẩy ở giữa danh sách, đó là không chính xác. Trong thực tế, bạn không cần bất kỳ dấu chấm phẩy nào. Tôi cũng sẽ thay thế ~ bằng con đường tuyệt đối đến nhà của bạn, chỉ trong trường hợp, và loại bỏ các dấu chấm phẩy tất cả cùng nhau. Chỉ cần có dấu phẩy giữa mỗi đường dẫn.

Ồ, và để tìm kiếm thư mục cho tệp thẻ, bạn cần "../tags", không phải "./tags". Một dấu chấm duy nhất có nghĩa là thư mục hiện tại, hai dấu chấm có nghĩa là một thư mục từ vị trí hiện tại của bạn.

+0

Bạn có thể đăng chính xác cách bạn tạo lại nó vì tôi không thể làm cho nó hoạt động được. –

+0

Bạn có đang mở tệp từ gốc của dự án hoặc từ thư mục con không? Tôi đang mở tập tin từ bên trong một thư mục con trong dự án, không phải là thư mục gốc của dự án. –

+0

Đây là những gì tôi có: đặt thẻ =./TAGS,./Tags, thẻ, TAGS, ~/programming/mandelbrot/main/tags trong đó thư mục cuối cùng là đường dẫn tuyệt đối. Như tôi đã đề cập ở trên, nó sẽ không tìm kiếm trong bất kỳ thư mục cha, vì tôi không sử dụng ../tags. – Derek

0

Tệp thẻ có luôn nằm trong thư mục/dự án không? Nếu vậy, bạn không cần phải "tìm kiếm" để tìm tệp thẻ. Chỉ cần cứng mã đường dẫn đến cả hai tập tin như thế này:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags 

Nếu không, bạn có thể thử một cái gì đó như thế này:

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags 

Tôi đã không cố gắng này, do đó bạn có thể phải thử nghiệm với nó. Có một số điều kiện để nó hoạt động. Xem: giúp tìm kiếm tệp.

0

Cú pháp dòng duy nhất cho thẻ thiết lập nên là:

set tags=./tags,tags;,~/some/arbitrary/path/tags 

Dấu phẩy đã mất tích sau khi "thẻ;"

Các vấn đề liên quan