Vim - 写入更改的缓冲区时执行命令

标签 vim command buffer execute

各位 Vim 用户,大家好。

当我用 :w 写一个缓冲区时,我试图执行一个命令.
但是只有当我更改了缓冲区的内容时才应该执行该命令。

我想可能是这样的事情:

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

我该怎么做?

编辑:

我找到了解决方案
autocmd BufWritePre * if &modified | echo 'execute command' | endif

显然我不能在它前面没有'&'的情况下写修改。

最佳答案

正如您已经发现的那样,您可以检查缓冲区本地 'modified'标志。对于语法,一个 &需要在选项名称前面加上。

或者,如果您使用 :update命令而不是 :write , 缓冲区只会在有实际更改的地方被持久化(并触发 autocmd );对于未更改的缓冲区,此命令是空操作。

很多用户都有类似这样的映射:

nnoremap <C-S>      :<C-U>update<CR>
vnoremap <C-S>      :<C-U>update<CR>gv
inoremap <C-S>      <C-O>:update<CR>

关于Vim - 写入更改的缓冲区时执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47004041/

相关文章:

go - Nginx version 命令不返回版本也不返回错误

linux - 如何制作脚本或程序来运行某些命令?

vim - 是否可以在 NetBeans 中使用 VI 或 VIM 键盘映射?

vim - 仅使用 Vim 和 Tabular 插件对齐最右边的列

macos - 如何在vim中映射mac命令键?

command - 使用j2ssh执行多个命令

javascript - Emacs 在缓冲区中打印 javascript 对象属性或对象轮廓

java - 缓冲写入器未写入文件

.net - HttpWebResponse 响应流的最佳缓冲区大小

Vim 开始使用 tmux