加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang Formatter和Vim – 如何破坏历史记录?

发布时间:2020-12-16 09:25:55 所属栏目:大数据 来源:网络整理
导读:Go(Golang)编程语言附带了一个名为go fmt的工具.它是一个代码格式化程序,可以自动格式化代码(对齐,字母排序,制表,间距,习语……).它非常棒. 所以我发现这个小自动命令在Vim中使用它,每次缓冲区都保存到文件中. au FileType go au BufWritePre buffer FMT Fmt
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,undo后不允许使用undojoin.当然,当我尝试撤消时,它会触发错误.

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

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命令,所以我在将它写入文件之前执行.但是,它会将光标置于文件的顶部……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读