暂时禁用vim插件而不重新启动

时间:2012-03-29 19:28:15

标签: vim

我在Vim中使用c-support。其中一个功能是自动comment expansion

当我从外部编辑器将代码粘贴到Vim中时,注释会被扩展(这会给我带来双重评论并混淆粘贴 - 例如见下文)。我希望能够禁用插件,粘贴,然后重新启用它,不用重新启动Vim。我不确定这是否可行。

SO问题hereherehere都描述了禁用插件的方法,但它们都要求我关闭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,将“避免意外影响[粘贴]”。(请参阅评论)。<登记/> 但是,我仍然很好奇你是否可以根据原始问题禁用/启用插件,所以我将保持问题开放。

2 个答案:

答案 0 :(得分:5)

插入“:设置粘贴”然后粘贴您的代码。插入之后:set unpaste

答案 1 :(得分:1)

没有修改插件源就没有通用的方法。一些插件(像我的所有插件)可以添加此功能(我的框架中有“卸载”功能,但主要用于更新而不重新启动vim,而不是暂时禁用某些功能)。你绝对可以做的是为每个源插件文件添加一个函数调用,它将保存当前的vim状态,也可以在加载插件后执行此操作(由于存在finishthrowtry | <code with some error>您不能在插件末尾添加此功能),可能会在VimEnterFileTypeSyntax事件中添加。然后你需要有一个函数来恢复对插件所做的更改以及每个插件中的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

。这是在源脚本的上下文中执行一行代码所必需的。需要保存的“状态”我的意思是

  1. 映射
  2. 命令
  3. 标志
  4. 功能
  5. 菜单
  6. 事件(自动命令)
  7. 语法(在插件运行之前可能为空)
  8. 选项
  9. 一些vim,所有全局,缓冲区,制表符和窗口变量
  10. //脚本局部变量。虽然这里很简单:在脚本脚本的开头 - 本地范围是空的,你只需要在禁用时将其清空。
  11. 对于每个项目,可以还原插件所做的更改,但编码并不容易。并且<script>对映射的存在与nore的存在无法区分,尽管它们具有不同的行为。

    如果你想写它,不要忘记如果资源是脚本,你的代码将重新启动。

    另外,请注意SourcePre事件。它将有助于自动将线条添加到所有插件中。

    不要忘记有更多地方可以修改,无法轻松保存和恢复:文件系统,解释器状态,打开的插件缓冲区等。