5

Emacs支持gomodifytags

 2 years ago
source link: https://brantou.github.io/2017/12/05/emacs-go-tag/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Emacs支持gomodifytags

发表于 2017-12-05

| 分类于 emacs-plugin

|

|

受到《Go 终极指南:编写一个 Go 工具》的启发,萌生了把 gomodifytags 封装成emacs-plugin的想法, 然后经过两周的努力,诞生了emacs-go-tagemacs-go-tag 实现了两个命令: go-tag-add 添加结构体字段tag, go-tag-remove 删除结构体字段tag。

1 安装依赖

emacs-go-tag 有两个依赖项, gomodifytagsgo-mode.el,若使用emacs做Go开发 go-mode.el 应该已经在使用了。 gomodifytags安装如下:

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]

目前 gomodifytags 支持三种转换如下:

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

默认使用 snakecase , 若你准备使用 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))

4 使用说明

若是你有使用 vim-go 的 GoAddTagsGoRemoveTags 命令的经验, 那么你会很快上手 emacs-go-tag, 因为两者的行为完全一致(若有不同,请反馈)。

4.1 go-tag-add

:[range] go-tag-add [key],[option] [key1],[option] … 为结构体字段添加tag。如果在一个结构中调用,会自动添加json字段tag。 若在结构体之外调用,或者文件格式不正确,则会给出错误消息。

如果给出 [range] ,则只有选定的字段将被改变。

默认的json可以通过提供一个或多个 [key] 参数来改变。 添加xml和db的例子是: :go-tag-add xml db

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

也可以定义一个常数值而不是默认的基于字段的值。 例如,以下命令将添加`valid:“1”`到所有字段。 :go-tag-add valid=1

<img src="” />

4.2 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

<img src="” />

感谢 GoCN每日新闻 的每日推送,让我得以读到 《Go 终极指南:编写一个 Go 工具》, 然后我才得以写出这个emacs-plugin。 这里给出项目地址:https://github.com/brantou/emacs-go-tag, 欢迎大家来使用和来提问题,若是你觉得对你有帮助, 就给颗星 吧。

Last Updated 2017-12-08 Fri 12:31.
Render by hexo-renderer-org with Emacs 25.3.2 (Org mode 8.2.10)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK