【问题标题】:Vim Buffer has been modified [duplicate]Vim 缓冲区已被修改 [重复]
【发布时间】:2011-04-09 18:16:58
【问题描述】:

我正在尝试在 Vim 中实现一个 AutoCmd,它需要在当前缓冲区被修改时执行。

我已阅读文档中所有可用于 AutoCmd 的事件,但找不到有助于确定缓冲区何时被修改的内容。

这并不一定意味着“写入缓冲区时”,因为我需要触发的操作需要在缓冲区被修改包括被写入时调用。

关于如何实现可以实现此目标的BufIsModified 的任何想法?

注意:不是What is a vimrc function to determine if a buffer has been modified? 的重复,因为这个问题是关于autocmd 而不仅仅是缓冲区修改检查

【问题讨论】:

  • 这很奇怪,如果先问这个问题,为什么这个问题与另一个问题重复?
  • 什么重复?如何让stackoverflow.com/q/6538779 作为autocmd 工作? (我来这里的原因..)
  • 实际解决方案: let modified = getbufvar(bufname('%'), "&mod")
  • @Robert Harvey 这不是链接问题的副本。

标签: vim buffer autocmd


【解决方案1】:

我唯一想到的就是使用CursorMovedCursorMovedI 事件。

HTH

【讨论】:

  • 在我看来这样可行,并且在事件函数中测试&modified vim 变量,如果未更改则为 0,如果自上次写入磁盘后发生更改,则为 1。跨度>
  • 您可以运行一堆 Ex 命令来完全转换缓冲区,而无需移动光标或进入插入模式。
  • 我愿意对 Ex 命令做出妥协。与 Herbert 的 cmets 相结合的答案可以满足我的要求。谢谢!
  • @intuited 您描述的情况可能被认为是罕见的,修改缓冲区的 EX 命令很可能也会导致光标移动。
猜你喜欢
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多