Emacs支持gomodifytags

受到《Go 終極指南:編寫一個 Go 工具》的啓發,萌生了把 gomodifytags 封裝成emacs-plugin的想法, 而後通過兩週的努力,誕生了emacs-go-tagemacs-go-tag 實現了兩個命令: go-tag-add 添加結構體字段tag, go-tag-remove 刪除結構體字段tag。git

安裝依賴

emacs-go-tag 有兩個依賴項, gomodifytagsgo-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: BaseDomain -> base_domain
  • camelcase: BaseDomain -> baseDomain
  • lispcase: BaseDomain -> base-domain

默認使用 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 的 GoAddTagsGoRemoveTags 命令的經驗, 那麼你會很快上手 emacs-go-tag, 由於二者的行爲徹底一致(如有不一樣,請反饋)。spa

go-tag-add

:[range] go-tag-add [key],[option] [key1],[option] …
爲結構體字段添加tag。若是在一個結構中調用,會自動添加json字段tag。 若在結構體以外調用,或者文件格式不正確,則會給出錯誤消息。code

若是給出 [range] ,則只有選定的字段將被改變。orm

默認的json能夠經過提供一個或多個 [key] 參數來改變。 添加xml和db的例子是:
:go-tag-add xml dbxml

若提供了 [option] 也提供了,會在添加tag時,一同添加 option , 或者修改已存在的tag。 以下:
:go-tag-add json,omitempty

也能夠定義一個常數值而不是默認的基於字段的值。 例如,如下命令將添加 `valid:"1"`到全部字段。
:go-tag-add valid=1

go-tag-remove

:[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..., 歡迎你們來使用和來提問題,如果你以爲對你有幫助, 就給顆星 吧。

相關文章
相關標籤/搜索