Emacs支持gomodifytags

受到《Go 終極指南:編寫(xiě)一個(gè) Go 工具》的啟發(fā),萌生了把 gomodifytags 封裝成emacs-plugin的想法, 然后經(jīng)過(guò)兩周的努力,誕生了emacs-go-tag。 emacs-go-tag 實(shí)現(xiàn)了兩個(gè)命令: go-tag-add 添加結(jié)構(gòu)體字段tag, go-tag-remove 刪除結(jié)構(gòu)體字段tag。

安裝依賴(lài)

emacs-go-tag 有兩個(gè)依賴(lài)項(xiàng), gomodifytagsgo-mode.el,若使用emacs做Go開(kāi)發(fā) go-mode.el 應(yīng)該已經(jīng)在使用了。 gomodifytags安裝如下:

go get -u github.com/fatih/gomodifytags

安裝

目前emacs-go-tag已發(fā)布到了MELPA上,可使用如下命令安裝:
M-x package-install [RET] go-tag [RET]
若是沒(méi)發(fā)現(xiàn)go-tag,你需要使用如下命令來(lái)刷新,然后在使用上面的命令進(jìn)行安裝:
M-x package-refresh-contents [RET]

配置

目前 gomodifytags 支持三種轉(zhuǎn)換如下:

  • snakecase: BaseDomain -> base_domain
  • camelcase: BaseDomain -> baseDomain
  • lispcase: BaseDomain -> base-domain

默認(rèn)使用 snakecase , 若你準(zhǔn)備使用 camelcase, 可配置如下:

(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))

使用說(shuō)明

若是你有使用 vim-go 的 GoAddTagsGoRemoveTags 命令的經(jīng)驗(yàn), 那么你會(huì)很快上手 emacs-go-tag, 因?yàn)閮烧叩男袨橥耆恢拢ㄈ粲胁煌?,?qǐng)反饋)。

go-tag-add

:[range] go-tag-add [key],[option] [key1],[option] …
為結(jié)構(gòu)體字段添加tag。如果在一個(gè)結(jié)構(gòu)中調(diào)用,會(huì)自動(dòng)添加json字段tag。 若在結(jié)構(gòu)體之外調(diào)用,或者文件格式不正確,則會(huì)給出錯(cuò)誤消息。

如果給出 [range] ,則只有選定的字段將被改變。

默認(rèn)的json可以通過(guò)提供一個(gè)或多個(gè) [key] 參數(shù)來(lái)改變。 添加xml和db的例子是:
:go-tag-add xml db

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

也可以定義一個(gè)常數(shù)值而不是默認(rèn)的基于字段的值。 例如,以下命令將添加`valid:"1"`到所有字段。
:go-tag-add valid=1

go-tag-remove

:[range] go-tag-add [key],[option] [key1],[option] …
移除結(jié)構(gòu)字段的字段標(biāo)記。 如果在一個(gè)結(jié)構(gòu)中調(diào)用,它會(huì)自動(dòng)刪除所有的字段tag。 如果在結(jié)構(gòu)體定義之外調(diào)用,或者文件格式不正確,則會(huì)給出錯(cuò)誤消息。

如果給出 [range] ,則只有選定的字段將被改變。

如果給出 [key] ,則只會(huì)刪除這些key相關(guān)的tag。 如下只刪除json相關(guān)的tag:
:go-tag-remove json

如果 [option][key] 一同傳遞,則只會(huì)刪除 option 。 例如,下面命令只會(huì)從包含json的字段中刪除omitempty選項(xiàng):
:go-tag-remove json,omitempty

最后

感謝 GoCN每日新聞 的每日推送,讓我得以讀到 《Go 終極指南:編寫(xiě)一個(gè) Go 工具》, 然后得以完成這個(gè)emacs-plugin。 項(xiàng)目地址:https://github.com/brantou/emacs-go-tag, 歡迎大家來(lái)使用和來(lái)提問(wèn)題,若是你覺(jué)得對(duì)你有幫助, 就給顆星 吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容