Go(Golang)编程语言附带了一个名为的工具go fmt.它是一个代码格式化程序,可以自动格式化代码(对齐,字母排序,制表,间距,习语......).它非常棒.
所以我发现这个小自动命令在Vim中使用它,每次缓冲区都保存到文件中.
au FileType go au BufWritePre <buffer> Fmt
Fmt是Go vim插件附带的功能.
这真的很棒,但它有一个问题.每次格式化程序写入缓冲区时,它都会在撤消/重做历史记录中创建跳转.在尝试撤消/重做更改时会变得非常痛苦,因为每次第二次更改都是格式化程序(使光标跳转到第1行).
所以我想知道,有没有办法在触发后丢弃撤消/重做历史记录的最新变化Fmt?
编辑:
好的,到目前为止我有:
au FileType go au BufWritePre <buffer> undojoin | Fmt
但它还不是很好.根据:h undojoin,撤消后不允许使用undojoin.当然,当我尝试:w撤消后,它会触发错误.
那么我如何实现像这样的伪代码:
if lastAction != undo then
au FileType go au BufWritePre <buffer> undojoin | Fmt
end
Run Code Online (Sandbox Code Playgroud)
如果我弄清楚最后一点,我想我有一个解决方案.
我认为这几乎已经完成,完成了您的要求,但我看到它正在删除一个撤消点(我认为这是预期的undojoin):
function! GoFmt()
try
exe "undojoin"
exe "Fmt"
catch
endtry
endfunction
au FileType go au BufWritePre <buffer> call GoFmt()
Run Code Online (Sandbox Code Playgroud)
根据 MattyW 的回答,我想起了另一种选择:
au FileType go au BufWritePre <buffer> %!gofmt
Run Code Online (Sandbox Code Playgroud)
:%!<some command>在缓冲区上执行 shell 命令,因此我在将其写入文件之前执行此操作。而且,它会将光标放在文件顶部......
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |