2012-03-29 30 views
5

Tôi đang sử dụng c-support trong Vim. Một trong những tính năng của nó là tự động comment expansion.Tạm thời vô hiệu hóa plugin vim mà không cần khởi chạy lại

Khi tôi dán mã vào Vim từ trình chỉnh sửa bên ngoài, các nhận xét được mở rộng (mang lại cho tôi nhận xét kép và làm lộn xộn dán - xem ví dụ bên dưới). Tôi muốn có thể tắt plugin, dán, sau đó bật lại plugin, mà không cần khởi chạy lại Vim. Tôi không chắc chắn nếu điều này là có thể.

Các SO câu hỏi here, herehere tất cả các mô tả phương pháp để vô hiệu hóa các plugin, nhưng tất cả đều yêu cầu tôi để đóng Vim, gây rối với .vimrc tôi hoặc tương tự, và khởi chạy lại; nếu tôi phải đóng Vim, tôi cũng có thể cat file1 >> myfile; vim myfile, sau đó thay đổi các dòng bên trong, điều này sẽ nhanh chóng.

Có thể tắt plugin trong khi chạy vim mà không cần chạy lại, tốt nhất là theo cách cho phép tôi ánh xạ khóa nóng toggle-plugin (do đó, tìm nguồn cung ứng ~/.vimrc là không sao, đó là điều chỉnh được cho phím nóng [Tôi tưởng tượng, thiên đường chưa thử))?


messed up comments:


/* 
* * Authors: 
* * A Name 
* * 
*  * Copyright: 
*  * A Name, 2012 
*  */ 

EDIT:. Hóa ra bạn có thể :set paste, :set nopaste (trong đó, trích dẫn :help paste, sẽ "tránh hiệu ứng bất ngờ [trong khi dán]" (
Tuy nhiên, tôi vẫn tò mò liệu bạn có thể vô hiệu hóa/bật plugin theo câu hỏi gốc hay không, vì vậy tôi sẽ để lại câu hỏi mở.

+2

Bạn đã thử ': set paste' * trước khi dán * và': đặt nopaste' * sau khi dán *? – romainl

+0

Không. Tôi không biết điều đó tồn tại - điều đó giúp ích rất nhiều. :) – simont

Trả lời

1

Không có cách chung để làm điều này mà không sửa đổi nguồn plugin. Một số bổ sung (giống như tất cả của tôi) có thể thêm tính năng này (tôi có "dỡ bỏ" tính năng trong khuôn khổ của tôi, nhưng sử dụng nó chủ yếu để cập nhật mà không cần khởi động lại vim, không phải tạm thời vô hiệu hóa một cái gì đó). Những gì bạn có thể làm là thêm lời gọi hàm vào mỗi tệp plugin có nguồn gốc sẽ lưu trạng thái vim hiện tại và cũng có thể làm điều này sau khi plugin được tải (do sự tồn tại của finish, throw, try | <code with some error> bạn không thể thêm ở cuối plugin), có khả năng trên các sự kiện VimEnter, FileTypeSyntax. Sau đó, bạn cần phải có một chức năng đó sẽ trở lại thay đổi làm cho các plugin và một định nghĩa s:Execute chức năng trong mỗi plugin, như thế này:

function s:Execute_I_do_not_expect_function_with_this_suffix_to_be_defined_by_the_plugin_so_I_add_it_to_avoid_name_collisions(s) 
    execute a:s 
endfunction 

. Điều này là cần thiết để thực thi một dòng mã trong ngữ cảnh của tập lệnh có nguồn gốc.Bằng cách “nhà nước” mà cần phải được lưu ý tôi là

  1. Mappings
  2. Commands
  3. Dấu hiệu
  4. Chức năng
  5. Menus
  6. kiện (autocommands)
  7. Cú pháp (có khả năng được sản phẩm nào trước khi plugin chạy)
  8. Tùy chọn
  9. Một số biến số toàn cầu, bộ đệm, tab và cửa sổ
  10. // Biến cục bộ tập lệnh. Mặc dù nó đơn giản ở đây: khi bắt đầu phạm vi kịch bản lệnh script-local trống và tất cả những gì bạn cần là để trống nó khi vô hiệu hóa.

Đối với mỗi mục, bạn có thể hoàn nguyên các thay đổi được thực hiện bởi plugin, nhưng không dễ để viết mã. Và sự hiện diện của đối số <script> đối với ánh xạ không phân biệt được với sự hiện diện của nore, mặc dù chúng có hành vi khác nhau.

Nếu bạn muốn viết, đừng quên thực tế là nếu tập lệnh được cấp nguồn, mã của bạn sẽ được khởi chạy lại.

Ngoài ra, hãy lưu ý sự kiện SourcePre. Nó sẽ giúp bổ sung tự động các dòng của bạn vào tất cả các plugin.

Đừng quên rằng có nhiều nơi có thể được sửa đổi và không thể lưu và phục hồi một cách dễ dàng hoặc ở tất cả: hệ thống tập tin, trạng thái phiên dịch, mở đệm Plugin vv

5

Insert ": set dán" sau đó dán mã của bạn. Sau khi chèn: đặt unpaste

+2

nopaste thay vì unpaste – gayavat

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