我使用vim和vim-golang插件。這個插件附帶a function called :Fmt,它使用gofmt這個命令行可執行文件「重新格式化」源代碼。vim - 保存時自動格式化golang源代碼
我想在每次保存文件時調用:Fmt函數,因此它會不斷重新格式化。我認爲這應該用autocmd指令完成。但我有兩個疑問:
- 我找不到執行該功能的方法。我嘗試在autocmd行的末尾寫入Fmt和:Fmt,但它似乎不起作用。我想我錯過了一些東西,比如「打電話」。
- 我只想在保存文件類型爲'go'的文件時發生這種情況。我不知道如何結合這兩個條件 - 我可以根據文件類型激活變量,並且我可以做一些小事,例如刪除尾隨空格,只要保存文件,但是分開。
所以這是我到目前爲止有:
" I can set variables for go like this
autocmd FileType go setlocal noexpandtab shiftwidth=4 tabstop=4 softtabstop=4 nolist
" I can clean trailing spaces(conserving cursor position) on save like this
autocmd BufWritePre * kz|:%s/\s\+$//e|'z
" None of these worked:
autocmd BufWritePre,FileType go Fmt
autocmd BufWritePre,FileType go :Fmt
哇,令人難以置信的廣泛的答案,非常感謝!我結束了使用第二個選項 - 我不打算重置文件類型。謝謝! – kikito
如果你需要'Fmt'命令的普通輸出(我總是看到'X lines filtered'),你可能需要添加'silent': 'autocmd FileType go autocmd BufWritePre silent Fmt' –
djd
它已經在'vim -gocode'插件https://github.com/Blackrush/vim-gocode/blob/master/ftplugin/go/fmt.vim#L20 –