Vim - 当修改缓冲区被写入时执行命令

4

大家好,这篇文章涉及到it技术相关内容。

我正在尝试在使用:w命令写入缓冲区时执行一条命令。但是只有当我更改了缓冲区的内容时,才应该执行该命令。

我认为可能会像下面这样:

autocmd BufWritePost * if modified | echo 'execute command' | endif

我该如何做到这一点?

编辑:

我找到了解决方案。

autocmd BufWritePre * if &modified | echo 'execute command' | endif

显然,在其前面加上'&',我才能写出modified。


顺便提一下,echo 'execute command'会打印出一些东西,但接下来的echo,类似于bla bla bla written,很快就会出现。由于这个原因,消息不会被看到。命令仍然会被执行。 - DasOhmoff San
1个回答

2
如您已经发现,您可以检查缓冲区本地的'modified'标志。对于语法,选项名称前需要添加&
另外,如果您使用:update命令而不是:write,则只有在实际更改时缓冲区才会被持久化(并触发自动命令);对于未更改的缓冲区,此命令将不起作用。
许多用户都有类似于以下的映射:
nnoremap <C-S>      :<C-U>update<CR>
vnoremap <C-S>      :<C-U>update<CR>gv
inoremap <C-S>      <C-O>:update<CR>

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