不重启情况下暂时禁用vim插件

5
我在使用Vim中的c-support插件。它的一个功能是自动注释扩展
当我从外部编辑器粘贴代码到Vim中时,注释会被扩展(这会导致我看到重复的注释并且粘贴出现问题-请参见下面的示例)。我想能够在不重新启动Vim的情况下禁用插件,粘贴代码,然后重新启用它。我不确定是否可能实现。

这里这里, 这里这里的所有SO问题都描述了禁用插件的方法,但它们都要求我关闭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
你是否尝试在粘贴之前使用:set paste,在粘贴后使用:set nopaste - romainl
不,我不知道那个存在 - 那对我很有帮助。 :) - simont
2个回答

5

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


1

没有通用的方法可以在不修改插件源代码的情况下实现这一点。一些插件(比如我的所有插件)可以添加此功能(我在我的框架中有“卸载”功能,但主要用于更新而不是临时禁用某些内容)。您可以确保做的事情是在每个已加载的插件文件中添加一个函数调用,该函数将保存当前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. // 脚本本地变量。虽然在这里很简单:在脚本本地范围开始时为空,当禁用时只需将其清空。

对于每个项目,可以撤销插件所做的更改,但编码并不容易。而且,映射的<script>参数的存在与nore的存在是无法区分的,尽管它们具有不同的行为。

如果你想编写它,请不要忘记一个事实,即如果脚本被重新加载,你的代码将被重新启动。

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

不要忘记,还有更多的地方可以进行修改,但不能轻易或根本无法保存和恢复:文件系统、解释器状态、打开的插件缓冲区等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接