2009-08-10 41 views
9

Tôi mới bắt đầu sử dụng thẻ và đánh giá rất cao công cụ nhưng cách tôi quản lý tệp thẻ của tôi hơi cồng kềnh theo ý kiến ​​của tôi và rất không linh hoạt.Phương pháp dễ nhất/tốt nhất để quản lý tệp thẻ ctags của bạn là gì?

Làm thế nào tôi hiện đang quản lý tập tin thẻ của tôi:

  1. Tôi có một khối thẻ tập tin được lưu trữ trong thư mục nhà của tôi tại ~/.vim/tags
  2. Khi tôi cập nhật các dự án mã hoặc thay đổi của tôi, tôi chạy một kịch bản mà xóa tệp thẻ cũ và tạo lại tệp thẻ nguyên khối (bạn phải thay đổi vị trí nơi thẻ ctsw thực thi khi bạn thay đổi dự án)

Có một tệp thẻ nguyên khối hoạt động s cho tôi bởi vì nó cho phép tôi chuyển đến tất cả các biểu tượng có liên quan cho dự án hiện tại tôi đang làm việc.

Một tệp thẻ nguyên khối duy nhất sẽ không hoạt động đối với một codebase lớn/lớn không? Tại sao một tệp thẻ khổng lồ không hoạt động trên một codebase lớn/lớn?

Các cách khác để quản lý tệp thẻ của bạn (hoặc tệp thẻ số nhiều) là gì?

Và tại sao phương pháp mới để quản lý tệp thẻ của bạn tốt hơn? (Có lẽ một giải pháp tốt hơn sẽ đôi khi phức tạp hơn. Vì vậy, nếu giải pháp của bạn là phức tạp hơn tôi yêu cầu bạn thêm lợi ích cho một phương pháp phức tạp hơn để quản lý file thẻ của bạn là gì.)


tái bút: Tôi đã tìm thấy một câu hỏi stackoverflow nói về ctags gọi là "vimctags-tips-and-tricks" nhưng câu hỏi này không nói về cách quản lý các tệp thẻ của bạn.

Trả lời

7

Tôi đặt tệp tags vào thư mục dự án. Điều đó giữ các thẻ riêng biệt cho từng dự án.

Đối với các mã lớn, tôi chỉ giảm tần suất mà tôi cập nhật nó. Tôi thường chỉ cập nhật nó nếu tôi cố gắng nhảy đến một từ khóa và nó không có ở đó vì một số lý do. Sau khi tất cả, mục đích là để nhanh chóng nhận được một số phần khác của mã, và nếu nó được có bằng bất cứ phương tiện, sau đó nó làm việc ngay cả khi các tập tin thẻ là lỗi thời.

+1

+1 trên phương pháp tiếp cận. Tôi cũng sử dụng cscope - và có một kịch bản shell ba lớp để tái tạo các tệp cho cả hai khi chúng trở nên cũ. –

1

Giống như Greg, tôi giữ tệp thẻ trong thư mục dự án. Sau đó, tôi sử dụng plugin project có thẻ in= để thiết lập vị trí tệp thẻ và có sử dụng đệ quy khi tạo lại tagscscope.out cho các dự án khác nhau hay không.

Tôi thường chỉ cập nhật tệp thẻ khi đã có thay đổi đáng kể vì thẻ thường sẽ đưa bạn đến đúng dòng (hoặc ít nhất gần đường thẳng) ngay cả khi đã lỗi thời. Lý do chính tôi cập nhật là nếu tôi đã thêm một enum mới, cấu trúc hoặc tương tự và tôi muốn tag syntax highlighting được cập nhật.

10

Một cách tiếp cận gần đây tôi đã trở nên thích là sử dụng VCS (Hệ thống kiểm soát phiên bản) móc để tạo tệp ctags. Tôi sử dụng git cục bộ ngay cả đối với các dự án nhỏ và như vậy, và vì vậy các ctags được cập nhật mỗi khi tôi cam kết (điều này, rõ ràng, có thể với tất cả các VCS khác ra khỏi đó).

Cá nhân tôi thích đặt tệp ctags vào mỗi thư mục của dự án, nhưng cách tiếp cận này sẽ hoạt động tốt trên toàn cầu.

EDIT: VCS hooks là các tập lệnh hoặc chương trình tự động chạy khi thực hiện một số hành động nhất định, chẳng hạn như thanh toán, cam kết, hoàn nguyên và các hoạt động khác.
Để đọc thêm tôi đề nghị các liên kết sau đây:

Móc thường có sẵn trong tất cả VCS tôi đã gặp phải và tôi chắc chắn bạn sẽ có thể tìm tài liệu cho tài khoản bạn đã chọn sử dụng.

+0

Tôi không biết "VCS hooks" là gì. Có lẽ bạn có thể xây dựng thêm một chút về VCS móc và làm thế nào nó biết để regen thẻ khi cam kết? –

+0

Tôi đã cập nhật câu trả lời và hy vọng nó cung cấp thêm thông tin ngay bây giờ. Tôi sẽ vui lòng làm rõ thêm nếu cần. – spatz

+0

phía máy khách hoặc phía máy chủ? Tôi nghĩ rằng phía khách hàng là tốt hơn cho những gì bạn muốn làm, nhưng Subversion không làm phía khách hàng. –

0

Ngoại trừ các plugin vim mà tôi chỉ có một tệp thẻ, tôi cũng có một cơ sở dữ liệu ctags cho mỗi dự án.

Điều này ngụ ý hai điều:

  1. một cách để phát hiện "dự án" và thiết lập phù hợp một vim. Có plenty plugins có thể thực hiện điều đó.
  2. một cách để có các cài đặt khác nhau cho các dự án khác nhau cùng một lúc. Đó là nơi setlocal tags=... (/ setlocal tags+=) đóng vai trò của nó.

Hầu hết các dự án lần không chia sẻ thẻ. Kết quả là, tôi hài lòng với việc phát hiện dự án hiện tại để xác định tự động nơi tôi cập nhật các thẻ và nơi tôi đọc chúng. Đây là hai trường hợp sử dụng riêng biệt, và vim chỉ xử lý (nguyên bản) cuối cùng. Các plugin xử lý trường hợp sử dụng đầu tiên cần xác định biến (bộ đệm cục bộ) để lưu trữ thông tin.

Thực tế khi lưu tệp chỉ cập nhật một cơ sở dữ liệu thẻ cụ thể, chúng tôi có thể phải tìm nạp thẻ cho một số cơ sở cùng một lúc. Đây là một trường hợp sử dụng tôi có khi tôi đang làm việc trên các thư viện/dự án phụ thuộc vào nhau: Tôi thường cần phải kiểm tra một cái gì đó trong (~ bên thứ 3) mã tôi nhập khẩu. Tôi có thể đã sử dụng tùy chọn toàn cầu &tags, nhưng tôi đã chọn (hiện tại) có các giá trị riêng biệt trong các bộ đệm riêng biệt. Một lần nữa, trường hợp sử dụng này được xử lý nhờ vào plugin vimrc cục bộ mà tôi đang sử dụng.

Về việc cập nhật cơ sở dữ liệu thẻ, nó được thực hiện trong (mà tôi đang duy trì, nhưng tồn tại những người khác có khả năng tương tự): Tôi xóa các thẻ được liên kết với tệp hiện tại từ cơ sở dữ liệu thẻ dự án được liên kết, sau đó tôi cập nhật với tùy chọn -a, ở chế độ nền. Thực sự không cần phải phân tích cú pháp dự án hoàn chỉnh mỗi lần chúng tôi lưu một tệp.

Trong trường hợp tệp dự án được cập nhật ngoài phạm vi vim, tôi vẫn có khả năng chạy thẻ trên toàn bộ dự án. Mặc dù mọi thứ đều trong suốt với các móc cam kết, tôi có thể cập nhật từ điển kiểm tra chính tả vim để không gắn cờ mã định danh là các từ sai chính tả. Tôi nghi ngờ nó sẽ tẻ nhạt hơn một chút với cách tiếp cận cam kết thuần túy.

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