我在Vim中使用c-support。其中一个功能是自动comment expansion。
当我从外部编辑器将代码粘贴到Vim中时,注释会被扩展(这会给我带来双重评论并混淆粘贴 - 例如见下文)。我希望能够禁用插件,粘贴,然后重新启用它,不用重新启动Vim。我不确定这是否可行。
SO问题here,here和here都描述了禁用插件的方法,但它们都要求我关闭Vim,弄乱我的.vimrc
或类似的,并重新启动;如果我必须关闭Vim,我不妨cat file1 >> myfile; vim myfile
,然后在内部移动线,这将同样快。
是否可以在运行vim时禁用插件而无需重新启动,最好是以允许我映射热键toggle-plugin
的方式(因此重新获取~/.vimrc
是正常的;这是可以映射到的一个热门[我想,还没试过呢])?
搞砸了评论:
/*
* * Authors:
* * A Name
* *
* * Copyright:
* * A Name, 2012
* */
编辑:事实证明,您可以:set paste
,:set nopaste
(引用:help paste
,将“避免意外影响[粘贴]”。(请参阅评论)。<登记/>
但是,我仍然很好奇你是否可以根据原始问题禁用/启用插件,所以我将保持问题开放。
答案 0 :(得分:5)
插入“:设置粘贴”然后粘贴您的代码。插入之后:set unpaste
答案 1 :(得分:1)
没有修改插件源就没有通用的方法。一些插件(像我的所有插件)可以添加此功能(我的框架中有“卸载”功能,但主要用于更新而不重新启动vim,而不是暂时禁用某些功能)。你绝对可以做的是为每个源插件文件添加一个函数调用,它将保存当前的vim状态,也可以在加载插件后执行此操作(由于存在finish
,throw
, try | <code with some error>
您不能在插件末尾添加此功能),可能会在VimEnter
,FileType
和Syntax
事件中添加。然后你需要有一个函数来恢复对插件所做的更改以及每个插件中的s:Execute
函数定义,如下所示:
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
。这是在源脚本的上下文中执行一行代码所必需的。需要保存的“状态”我的意思是
对于每个项目,可以还原插件所做的更改,但编码并不容易。并且<script>
对映射的存在与nore
的存在无法区分,尽管它们具有不同的行为。
如果你想写它,不要忘记如果资源是脚本,你的代码将重新启动。
另外,请注意SourcePre
事件。它将有助于自动将线条添加到所有插件中。
不要忘记有更多地方可以修改,无法轻松保存和恢复:文件系统,解释器状态,打开的插件缓冲区等。