Làm thế nào để xem một plugin đang hoạt động


15

Làm cách nào để xác định xem một plugin filetype (chẳng hạn như vim-latexsuite) đã được cài đặt và kích hoạt khi tôi mở tệp thích hợp chưa? Một trình soạn thảo phổ biến khác sẽ chỉ ra rằng "chế độ nhỏ" có liên quan đang hoạt động. Vim tương đương là gì?

Câu trả lời:


20

Làm cách nào để xác định xem một plugin filetype (như vim-latexsuite) đã được cài đặt chưa

Bạn có thể sử dụng :scriptnamesdanh sách tất cả các tập tin có nguồn gốc.

Một tùy chọn khác là kiểm tra biến cho biết liệu plugin đã được tải hay chưa recommended practice to allow the user to disable the loading of a given plugin.. Bạn thường có thể tìm thấy g:loaded_...biến trong <plugin_name>/pluginthư mục. Đối với các plugin bạn đã đề cập, bạn có thể sử dụng echo exists("loaded_libList").

và kích hoạt khi tôi mở tập tin thích hợp?

Nếu nó là một plugin filetype, nó sẽ được kích hoạt tự động khi 'filetype'tùy chọn được đặt. Bạn có thể kiểm tra xem tùy chọn này có đúng với bộ đệm hiện tại không:

:set filetype?

Một trình soạn thảo phổ biến khác sẽ chỉ ra rằng "chế độ nhỏ" có liên quan đang hoạt động. Vim tương đương là gì?

Bạn có thể tùy chỉnh dòng trạng thái của mình để hiển thị chỉ báo như vậy, bằng cách sử dụng plugin hoặc trực tiếp thông qua các tùy chọn, như được giải thích trong :help 'statusline'và tại vi-improved.org .


6

Các plugin Vim không đi kèm với bất kỳ dấu hiệu kích hoạt nào và trong một thiết lập phù hợp, điều này là không cần thiết.

Bạn có thể nhanh chóng kiểm tra xem một plugin có hoạt động hay không bằng cách truy vấn các tác dụng phụ của nó, điển hình là ánh xạ. Vì vậy, ví dụ, tôi biết rằng ánh xạ NERDCommenter bắt đầu bằng <Leader>c, vì vậy một truy vấn để kích hoạt nó sẽ là :nmap <Leader>c. Nếu ánh xạ được liệt kê, plugin đang hoạt động. Điều tương tự có thể đạt được cho các lệnh tùy chỉnh và :autocmdtrong nhóm của plugin. Hầu hết các plugin cũng xác định một biến bảo vệ bao gồm g:loaded_pluginnamecó thể được kiểm tra.

Điều tương tự cũng áp dụng cho các plugin filetype (và tất cả các hiệu ứng sau đó sẽ nằm trong phạm vi bộ đệm). Yếu tố quan trọng nhất trong việc xác định các plugin đang hoạt động là sự phát hiện chính xác của filetype. Bạn có thể truy vấn thông qua :setlocal filetype?, hoặc thậm chí đặt điều này vào 'statusline'thông qua %y/ %Yitem.


6

Trong trường hợp cụ thể đó, tôi chỉ chơi với :scriptnames. Chúng tôi không thể sử dụng biến toàn cục để kiểm tra xem plugin ft đã được tải chưa - LaTeXSuite có thể có plugin không, tôi không nhớ, điều chắc chắn là có nhiều tập lệnh ftplugin. Nhiều ftplug sử dụng b:did_ftplugin(ít nhất là được vận chuyển với Vim), nhưng cách tiếp cận này chắc chắn không mở rộng: do đó, không phải tất cả các ftplug đều sử dụng biến vô nghĩa này và chúng tôi không thể kiểm tra tên biến chung để biết liệu một ftplugin đã cho có đã được tải - ví dụ, đối với C một mình tôi có 22 ftplugins, chắc chắn họ không sử dụng cùng một bộ bảo vệ chống tái sinh.

Vì vậy :scriptname. Than ôi :scriptnamecho rất nhiều kết quả không có thứ tự, cho mắt người của chúng ta. May mắn thay execute()(một chức năng rất gần đây), và filter()đến để giải cứu. Trong trường hợp đó, tôi sẽ tìm các kịch bản vim liên quan đến latex với

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

Ngoài ra nếu bạn đang sử dụng trình quản lý plugin, có khả năng trình quản lý plugin đang sử dụng 'runtimepath'tùy chọn. Bạn có thể hiển thị giá trị của nó với :echo &rtp. Bạn thậm chí có thể lọc giá trị của nó với:

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(Điều này sẽ cho bạn biết liệu trình quản lý plugin của bạn đã kích hoạt plugin của bạn chưa, LaTeX-suite trong trường hợp của bạn. Điều này sẽ không cho bạn biết liệu các ftplugins liên quan đã được tải đúng chưa. :scriptnameSẽ cung cấp cho bạn thông tin này.)


3

Nếu bạn kích hoạt các plugin filetype bằng autocommands, bạn có thể đặt verbose = 9 để Vim lặp lại autocommands khi nó thực thi chúng:

:set verbose=9

3

Một cách là thực hiện tìm kiếm regex trên runtimepath:

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

Nếu bạn đang sử dụng vim-plug , đây là phương pháp mục đích chung để kiểm tra:

function! PlugLoaded(name)
    return (
        \ has_key(g:plugs, a:name) &&
        \ isdirectory(g:plugs[a:name].dir) &&
        \ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction

Sử dụng:

if PlugLoaded('MY-PLUGIN')
    " ...
endif

Thế là chưa đủ. Ngoài ra, nó chỉ chăm sóc các plugin được cài đặt với trình quản lý plugin. Trong mọi trường hợp, nó không quan tâm đến các tập lệnh ftplugin được gửi trong các plugin, đó là câu hỏi của OP.
Luc Hermitte

0

Nếu bạn sử dụng vim-plug , nó sẽ đặt một biến được gọi là plugsliệt kê tất cả các plugin đã tải của bạn và một số thông tin về chúng. Tôi đã tự giải quyết câu hỏi của bạn khi tôi cần kiểm tra xem tôi đang chạy YCM hay coc.nvim. Bạn có thể xem nếu một plugin được tải bằng cách chạy has_key(plugs, "name"), ví dụ:

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

Lưu ý: điều này chỉ hiển thị nếu nó hiện được liệt kê trong của bạn vimrc, và không, ví dụ, nếu bạn đã đặt nó thành tải lười biếng, vì vậy

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

vẫn sẽ in nó khi khởi động, mặc dù nerdtreechưa được tải.

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.