受到《Go 終極指南:編寫一個 Go 工具》的啓發,萌生了把 gomodifytags 封裝成emacs-plugin的想法, 而後通過兩週的努力,誕生了emacs-go-tag。 emacs-go-tag
實現了兩個命令: go-tag-add
添加結構體字段tag, go-tag-remove
刪除結構體字段tag。git
emacs-go-tag
有兩個依賴項, gomodifytags
和 go-mode.el,若使用emacs作Go開發 go-mode.el
應該已經在使用了。 gomodifytags安裝以下:github
go get -u github.com/fatih/gomodifytags
目前emacs-go-tag已發佈到了MELPA上,可以使用以下命令安裝: M-x package-install [RET] go-tag [RET]
如果沒發現go-tag,你須要使用以下命令來刷新,而後在使用上面的命令進行安裝: M-x package-refresh-contents [RET]
json
目前 gomodifytags
支持三種轉換以下:vim
默認使用 snakecase
, 若你準備使用 camelcase
, 可配置以下:dom
(setq go-tag-args (list "-transform" "camelcase"))
快捷鍵配置示例:工具
(with-eval-after-load 'go-mode (define-key go-mode-map (kbd "C-c t") #'go-tag-add) (define-key go-mode-map (kbd "C-c T") #'go-tag-remove))
如果你有使用 vim-go 的 GoAddTags
和 GoRemoveTags
命令的經驗, 那麼你會很快上手 emacs-go-tag
, 由於二者的行爲徹底一致(如有不一樣,請反饋)。spa
:[range] go-tag-add [key],[option] [key1],[option] …
爲結構體字段添加tag。若是在一個結構中調用,會自動添加json字段tag。 若在結構體以外調用,或者文件格式不正確,則會給出錯誤消息。code
若是給出 [range]
,則只有選定的字段將被改變。orm
默認的json能夠經過提供一個或多個 [key]
參數來改變。 添加xml和db的例子是::go-tag-add xml db
xml
若提供了 [option]
也提供了,會在添加tag時,一同添加 option
, 或者修改已存在的tag。 以下: :go-tag-add json,omitempty
也能夠定義一個常數值而不是默認的基於字段的值。 例如,如下命令將添加 `valid:"1"`到全部字段。 :go-tag-add valid=1
:[range] go-tag-add [key],[option] [key1],[option] …
移除結構字段的字段標記。 若是在一個結構中調用,它會自動刪除全部的字段tag。 若是在結構體定義以外調用,或者文件格式不正確,則會給出錯誤消息。
若是給出 [range]
,則只有選定的字段將被改變。
若是給出 [key]
,則只會刪除這些key相關的tag。 以下只刪除json相關的tag: :go-tag-remove json
若是 [option]
和 [key]
一同傳遞,則只會刪除 option
。 例如,下面命令只會從包含json的字段中刪除omitempty選項: :go-tag-remove json,omitempty
感謝 GoCN每日新聞
的每日推送,讓我得以讀到 《Go 終極指南:編寫一個 Go 工具》, 而後得以完成這個emacs-plugin
。 項目地址:https://github.com/brantou/em..., 歡迎你們來使用和來提問題,如果你以爲對你有幫助, 就給顆星
吧。