Tạo ctags cho các biến bash?


7

Khi tôi chạy ctags cho một dự án được viết bằng bash, các thẻ cho các hàm được tạo, nhưng không phải cho các biến.
ví dụ nếu tôi chạyctags --list-kinds=sh

chức năng f

So với nếu tôi chạy danh sách cho ngôn ngữ "c" thì nhiều loại thẻ được thêm vào.
Có thể tạo thẻ cho các biến bash? hoặc có ai biết một regex tùy chỉnh có thể được thêm vào ~/.ctagsđể kích hoạt tính năng này không?


Có thể dẫn đến câu trả lời: stackoverflow.com/q/11740202/1600630
Cometsong

@Cometsong cảm ơn nhưng ngay cả khi bạn nhận được ctags để nhận ra filetype, ctags loại thẻ duy nhất có khả năng tạo ra các tệp shell - theo mặc định - là các hàm. về cơ bản một quy tắc regex cần phải được viết. các quy tắc khá dễ viết, khiến tôi cho rằng (có thể sai) có một số vấn đề mà những người khác chưa thể giải quyết và do đó chưa có quy tắc regex nào.
the_velour_fog

Câu trả lời:


4

dựa trên lời nhắc từ @Cometsong, tôi đã thêm biểu thức regex bên dưới và thêm vào ~/.ctags

--regex-sh=/^[ \t]*(local)?[ \t]*([A-Za-z0-9_-]+)=/\2/v,variable,variables/

Cho đến nay nó dường như đang làm việc khá độc đáo


3

Một regex có thể được xây dựng để tìm các khai báo biến như [A-z]…=[A-z0-9]

Một cách khác để sử dụng biến để bao gồm một \$ở phía trước

Ví dụ .ctags dành riêng cho yaml của riêng tôi là:

--regex-c=/^( YAML langdef config )/\1/k,t/
--langdef=yaml
--langmap=yaml:.yml.yaml
--regex-yaml=/^[ \t]*-[ \t]*.*:[ \t]*(.+)/\1/k,tasks/
--languages=+yaml

Tất nhiên, sửa đổi cho bash-isms.

--regex-sh=/^.*[ \t]*([A-Za-z][A-Za-z0-9_]*)=[".]*/\1/k,tasks/
--languages=+sh

cảm ơn, tại sao bạn lại xóa regex của bạn? Tôi nghĩ rằng nó cần một điểm ^cộng cần có khả năng nắm bắt các chuỗi bên trong dấu ngoặc kép ở phía bên phải của =ví dụfoo="hello world"
the_velour_fog

Xem chỉnh sửa ví dụ (hiện chưa được kiểm tra).
Cometsong
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.