如何让 vim 仅在修改缓冲区后才写入文件?

如何让 vim 仅在修改缓冲区后才写入文件?

我有这个函数,只有在 vim 中修改了我的 .zshrc 时,它才会获取它,但我最近重新安装了 Windows 和 WSL,然后使用旧的 .zshrc 和 .vimrc 来恢复我的设置,但这个特定函数无法像以前那样工作前:

function zshrc () {
    local original_ctime="$(zstat +ctime -- ~/.zshrc)" 2>/dev/null
    vim ~/.zshrc || return
    [[ -n $original_ctime ]] || return
    if [[ $original_ctime != "$(zstat +ctime -- ~/.zshrc 2>/dev/null)" ]]
    then
        source ~/.zshrc
    fi
}

该函数应该检查文件创建时间是否已更改。看这里

在我重新安装 WSL 之前,我可以zshrc使用(不进行任何更改)运行并保存 vim 缓冲区:wq,然后 vim 不会覆盖原始文件,因此它不会source ~/.zshrc,如果我进行更改,则只有 vim 会覆盖原始文件,因此函数将source ~/.zshrc.我假设 vim 中的一些默认设置可能已更改,那么我怎样才能恢复该特定行为呢?

我知道我可以退出 vim 来:q!得到这个,但是当我快速编辑不同的文件时,我会:wq不假思索地使用它,然后它再次获取 .zshrc 而不进行任何更改。

答案1

ZZ 养成执行(即Shift+ ZShift+ )的习惯Z。如果缓冲区已被修改,则这样做:wq。如果缓冲区没有被修改,它将直接退出而不保存。

相关内容