gpt4 book ai didi

vim - Golang Formatter 和 Vim - 如何销毁历史记录?

转载 作者:IT王子 更新时间:2023-10-29 01:27:21 27 4
gpt4 key购买 nike

Go (Golang) 编程语言自带一个工具,叫做 go fmt .它是一个代码格式化程序,可以自动格式化您的代码(对齐、字母排序、制表符、间距、惯用语......)。真的很棒。

所以我发现了这个在 Vim 中使用它的小自动命令,每次缓冲区都保存到文件中。 au FileType go au BufWritePre <buffer> Fmtfmt 是 Go vim 插件自带的函数。

这真的很棒,但是有 1 个问题。每次格式化程序写入缓冲区时,它都会在撤消/重做历史记录中创建一个跳转。这在尝试撤消/重做更改时变得非常痛苦,因为每第二次更改都是格式化程序(使光标跳转到第 1 行)。

所以我想知道,在触发 Fmt 之后,是否有任何方法可以丢弃撤消/重做历史记录中的最新更改? ?

编辑:好的,到目前为止我有: au FileType go au BufWritePre <buffer> undojoin | Fmt但还不是一切都好。根据:h undojoin , undo 后不允许undojoin。果然,当我尝试 :w 时它会引发错误撤消后。

那么我如何实现类似这样的伪代码:

if lastAction != undo then
au FileType go au BufWritePre <buffer> undojoin | Fmt
end

如果我弄清楚了最后一点,我想我就有了解决方案。

最佳答案

我认为这几乎完成了,完成了您的要求,但我看到它正在删除一个撤消点(我认为这在 undojoin 中是预期的):

function! GoFmt()
try
exe "undojoin"
exe "Fmt"
catch
endtry
endfunction
au FileType go au BufWritePre <buffer> call GoFmt()

编辑

根据 MattyW 的回答,我想到了另一种选择:

au FileType go au BufWritePre <buffer> %!gofmt

:%!<some command>在缓冲区上执行一个 shell 命令,所以我在将它写入文件之前执行它。而且,它会将光标放在文件顶部...

关于vim - Golang Formatter 和 Vim - 如何销毁历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com