Vim 防止在autocmd中卸载缓冲区

Vim 防止在autocmd中卸载缓冲区,vim,autocmd,Vim,Autocmd,我正在编写一个BufUnloadautocmd,我希望有条件地防止缓冲区从autocmd中实际卸载或关闭。有办法做到这一点吗 例如,我想使用autocmd将缓冲区的内容用作mercurial的提交消息,autocmd执行以下操作: autocmd BufUnload <buffer> !hg ci -l logfile autocmd BufUnload!hgci-l日志文件 因此,如果提交失败(hg命令返回非零错误代码),我想让缓冲区保持打开和不变。我认为这是不可能的(至少我无

我正在编写一个
BufUnload
autocmd
,我希望有条件地防止缓冲区从autocmd中实际卸载或关闭。有办法做到这一点吗

例如,我想使用autocmd将缓冲区的内容用作mercurial的提交消息,autocmd执行以下操作:

autocmd BufUnload <buffer> !hg ci -l logfile
autocmd BufUnload!hgci-l日志文件

因此,如果提交失败(
hg
命令返回非零错误代码),我想让缓冲区保持打开和不变。

我认为这是不可能的(至少我无法实现这一点,即使
:在
BufUnload
上抛出异常),但没有任何东西阻止你重新编辑同一个文件(假设它被正确地持久化)立即再次。您可以通过
扩展(')从autocmd中获取文件规范。这可能有助于您实现目标。

我认为这是不可能的(至少我无法实现这一点,即使
:在
BufUnload上抛出异常,但没有任何东西阻止您重新编译:
立即再次编辑相同的文件(假设它已正确持久化)。您可以通过
展开(')从autocmd中获取文件规范。这可能有助于实现您的目标。

我认为这是不可能的(至少我无法做到这一点,即使当
:在
BufUnload
上抛出异常时也是如此),但没有任何东西可以阻止您立即重新编辑相同的文件(假设它被正确保存)。您可以通过
展开从autocmd中获取filespec(“。可能会帮助您实现目标。

我认为这是不可能的(至少我无法实现这一点,即使
:在
BufUnload
上引发异常),但没有任何东西阻止您重新编辑同一个文件(假设该文件已正确持久化)再次。您可以通过
expand(')从autocmd中获取文件规范。这可能有助于您实现目标。

我建议将此消息保存在变量中。在aurum中(VCS插件↔Vim集成)有以下逻辑编码:当清除或写入带有提交消息的缓冲区时(触发实际提交并清除),我保存三个变量:

  • 提交消息
  • 当前提交十六进制(您可以使用
    hglog-r.
    查看它)
  • 当前存储库根目录
  • 。然后,当再次提交某个内容时,使用以下逻辑:如果当前存储库根与保存的根相同,并且当前提交十六进制也相同,则从变量中获取提交消息并初始化缓冲区

    以下行为的原因:

  • 如果提交失败,我希望恢复提交消息(与您的相同)
  • 如果我做了
    hg rollback
    ,编辑了一些内容并想再次提交,我想恢复提交消息
  • 如果我关闭提交缓冲区,因为我记得我想编码更多的更改,我想
  • 如果我没有执行上述任何操作,我不希望看到旧的提交消息

  • 保存当前提交十六进制是为了区分前三种情况和最后一种情况。

    我建议将此消息保存在一个变量中↔Vim集成)有以下逻辑编码:当清除或写入带有提交消息的缓冲区时(触发实际提交并清除),我保存三个变量:

  • 提交消息
  • 当前提交十六进制(您可以使用
    hglog-r.
    查看它)
  • 当前存储库根目录
  • 。然后,当再次提交某个内容时,使用以下逻辑:如果当前存储库根与保存的根相同,并且当前提交十六进制也相同,则从变量中获取提交消息并初始化缓冲区

    以下行为的原因:

  • 如果提交失败,我希望恢复提交消息(与您的相同)
  • 如果我做了
    hg rollback
    ,编辑了一些内容并想再次提交,我想恢复提交消息
  • 如果我关闭提交缓冲区,因为我记得我想编码更多的更改,我想
  • 如果我没有执行上述任何操作,我不希望看到旧的提交消息

  • 保存当前提交十六进制是为了区分前三种情况和最后一种情况。

    我建议将此消息保存在一个变量中↔Vim集成)有以下逻辑编码:当清除或写入带有提交消息的缓冲区时(触发实际提交并清除),我保存三个变量:

  • 提交消息
  • 当前提交十六进制(您可以使用
    hglog-r.
    查看它)
  • 当前存储库根目录
  • 。然后,当再次提交某个内容时,使用以下逻辑:如果当前存储库根与保存的根相同,并且当前提交十六进制也相同,则从变量中获取提交消息并初始化缓冲区

    以下行为的原因:

  • 如果提交失败,我希望恢复提交消息(与您的相同)
  • 如果我做了
    hg rollback
    ,编辑了一些内容并想再次提交,我想恢复提交消息
  • 如果我关闭提交缓冲区,因为我记得我想编码更多的更改,我想
  • 如果我没有执行上述任何操作,我不希望看到旧的提交消息

  • 保存当前提交十六进制是为了区分前三种情况和最后一种情况。

    我建议将此消息保存在一个变量中↔Vim集成)有以下逻辑编码:当清除或写入带有提交消息的缓冲区时(触发实际提交并清除),我保存三个变量:

  • 提交消息
  • 当前提交十六进制(您可以使用
    hglog-r.
    查看它)
  • 当前存储库根目录
  • .那么当你做某事的时候