Làm thế nào để tải plugin có điều kiện


14

Tôi đang tìm kiếm câu trả lời cho vấn đề này, nhưng vẫn chưa tìm thấy gì, vì vậy nếu tôi bỏ lỡ điều gì đó rõ ràng, tôi xin lỗi. Tôi nghĩ rằng nó sẽ là một tìm kiếm nhanh trên google, vì vậy có lẽ nó phức tạp hơn tôi nghĩ.

Tôi muốn có thể tải các plugin một cách có điều kiện dựa trên loại tệp tôi đang chỉnh sửa. Ví dụ: khi chỉnh sửa python, tôi không muốn các keybindings vim-sexpcài đặt, nhưng khi làm việc trên clojure, tôi muốn plugin đó được tải.

Tôi hiện đang sử dụng neovim và mầm bệnh, nhưng nếu có một trình quản lý plugin khác thực hiện điều này cho tôi, tôi sẽ sẵn sàng chuyển đổi. Ngoài ra, nếu điều này không tồn tại, có :set syntax whateverchuyển đổi các plugin không? Bởi vì đó sẽ là siêu :)

Cảm ơn trước cho bất kỳ trợ giúp / hướng!


1
Bạn đang hỏi một câu hỏi, nhưng bạn thực sự mô tả một câu hỏi khác: nếu một plugin cài đặt các tổ hợp phím toàn cầu, hãy vô hiệu hóa chúng (đọc tài liệu của plugin về cách thực hiện) và bật lại chúng cục bộ (ví dụ sử dụng autocmds) cho các kiểu tệp bạn muốn Nếu plugin được viết tốt, bạn không đạt được quá nhiều bằng cách trì hoãn việc khởi tạo nó. Nhưng nếu bạn không vô hiệu hóa các tổ hợp phím không mong muốn được kích hoạt bởi một plugin, chúng vẫn sẽ ảnh hưởng đến bạn sau khi plugin được tải.
VanLaser

Câu trả lời:


18

Bạn có thể làm điều này với Vim-Plug. Xem phần README :

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

Tôi nghĩ bạn sẽ phải sử dụng :set filetype whateverthay vì set syntax whateverkích hoạt plugin.

(Một số trình quản lý plugin khác có thể cho phép bạn làm điều đó, xem Sự khác biệt giữa các trình quản lý plugin vim là gì? )


8

Thay vì gọi execute pathogen#infect()để tải tất cả các plugin, hãy gọi pathogen#interposecho mọi plugin, nghĩa là:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

API mầm bệnh không được ghi lại bên ngoài nguồn , nhưng nó đủ đơn giản (mặc dù tên hàm không rõ ràng và không mô tả). Bạn cũng có thể sử dụng pathogen#surround()cho các đường dẫn tuyệt đối.

Bạn có thể tải các plugin một cách có điều kiện với một cơ bản autocmd:

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

Nếu bạn thấy bạn có nhiều trường hợp như vậy, bạn thậm chí có thể chia nó thành các đường dẫn khác nhau:

  • ~/.vim/bundle/always cho các plugin bạn luôn muốn
  • ~/.vim/bundle/<filetype> cho các plugin cho một kiểu tệp cụ thể
  • Và sau đó tải nó như vậy:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

Bằng cách này, bạn không phải thêm cả đống autocmds cho mỗi filetype / plugin.

Nếu điều này không tồn tại, có :set syntax whateverchuyển đổi các plugin không? Bởi vì đó sẽ là siêu :)

  • Khi một plugin được tải, nó được tải. Một "plugin" chỉ đơn giản là một bộ sưu tập function, commandmapdefinitons. Tôi không biết bất kỳ cách đơn giản nào để "dỡ" cái này.

  • không plugins tải cho một filetype khi và chỉ khi bạn sử dụng :set filetype; Nói chung, bạn luôn muốn sử dụng :set filetypekhông :set syntax , như syntaxsẽ chỉ đặt sự làm nổi bật cú pháp, và không phải là thụt đầu dòng và các thiết lập khác (ví dụ iskeyword, formatexprvv).

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.