zoukankan      html  css  js  c++  java
  • 搭建emacs的go编程语言环境

    关于emacs就不说明了,直接切入主题。关于我的emacs配置,可以直接参考GitHub上的lienhua34/myemacs-conf

    go-mode

    安装

    关于go-mode的安装,可以直接参考GitHub。从github上下载go-mode.el或go-mode-autoloads.el文件到你本地的某个目录下,然后在~/.emacs文件中输入下面内容:

    (add-to-list 'load-path "/path/to/your/dir")
    (require 'go-mode-autoloads)

    如果想要用好go-mode的特新,得先确保你本机环境安装了godef工具。如果没有,则运行下面命令(当然你首先也要确保你本机有go环境,并且设置了GOPATH环境变量):

    go get github.com/rogpeppe/godef

    下面对go-mode提供的特性进行一下说明。

    go-mode特性简单说明

    1 函数签名处理

    go-mode提供了对函数签名的处理方法,其支持匿名函数,不过也可以很方便的跳过你命函数。go-mode提供了如下的函数签名处理(括号里是默认快捷键):

    • go-goto-arguments(C-c C-f a):跳转到函数参数列表处;
    • go-goto-docstring(C-c C-f d):跳转到函数的docstring处,如果当前函数没有docstring,其会自动创建一个;
    • go-goto-function(C-c C-f f):跳转到关键字func处;
    • go-goto-function-name(C-c C-f n):跳转到函数名处;
    • go-goto-return-values(C-c C-f r):跳转到函数返回值处;
    • go-goto-method-receiver(C-c C-f m):跳转到函数的receiver处,如果当前函数没有,则会自动创建一堆括号。

    在上述方法或者快捷键之前加上C-u的前缀,则可以跳过匿名函数。

    2 格式化代码

    go语言自身提供了gofmt工具用于格式go语言的代码。emacs的go-mode借助gofmt工具来实现对正在编写的代码进行格式化。其提供了两种方式:

    • 运行gofmt函数:M-x gofmt
    • 添加一个保存前的hook,在保存文件前自动调用gofmt进行格式化。

    在~/.emacs配置文件中添加下面代码设置保存前的hook,

    (add-hook 'before-save-hook 'gofmt-before-save)

    这样,在保存go语言代码文件时回自动调用gofmt对代码内容进行格式化对齐。

    3 查看文档说明

    go-mode结合godoc工具提供了查看包或者某个标识符的docstring说明,

    • M-x godoc:查看包的文档说明,会提示你输入包名称
    • M-x godoc-at-point:查看当前光标所在位置的标识符的docstring说明

    4 import的管理

    go-mode提供了三个对import进行管理的方法:

    • go-goto-imports(C-c C-f i):跳转到文件的import处;
    • go-import-add(C-c C-a):添加新package的import;如果快捷键加上C-u前缀会提示要import的package的别称;
    • go-remove-unused-imports:删除或者注释掉没有用到的import。

    go-remove-unused-imports方法默认没有绑定快捷键,在~/.emacs文件中下面代码将该方法绑定到快捷键“C-c C-r”了。

    (add-hook 'go-mode-hook (lambda()
                             (local-set-key (kbd "C-c C-r") 'go-remove-unused-imports)))

    5 代码浏览

    go-mode提供了标准的一些代码浏览操作快捷键,例如:

    • beginning-of-defun(C-M-a):光标快速移动到函数定义开头;
    • end-of-defun(C-M-e):光标快速移动到函数定义末尾;
    • mark-defun(C-M-h):快速标记当前函数的整个内容;
    • narrow-to-defun(C-x n d):只查看当前函数的内容;

    另外,go-mode结合godef工具提供了如下三个功能:

    • godef-describe(C-c C-d):查看当前光标所在处的标识符的说明(什么类型或者其docstring说明);
    • godef-jump(C-c C-j):跳转到光标所在处的标识符的定义处(在当前窗口);
    • godef-jump-other-window(C-x 4 C-c C-j):跳转到当前光标所在处的标识符的定义处,在新窗口打开。

    go-mode提供的这种跳转也可以跳转到go语言的标准库,如下所示,将光标移动到左边缓冲区的md5Inst.Sum()的Sum标识符上,然后按快捷键C-x 4 C-c C-j便在右边打开关于Sum()函数的定义,

    goflymake

    如果不清楚flymake的,请查看GNU flymake(很少,也很简单,几分钟看懂)。

    goflymake则是Doug MacEachern为go语言写的flymake-mode,它是针对go语言代码执行on-the-fly语法检查的minor-mode。

    安装

    参考github,先运行下面命令安装goflymake:

    go get -u github.com/dougm/goflymake

    然后在~/.emacs配置文件中添加一下下面配置,

    (add-to-list 'load-path "~/gocode/src/github.com/dougm/goflymake")
    (require 'go-flymake)

    其执行检查的三个时间点是,

    • 缓冲区加载后;
    • 换行时;
    • 超过0.5s之前修改的内容。

    使用

    goflymake提供的方法有:

    • flymake-mode:关闭或打开goflymake模式;
    • flymake-start-syntax-check:执行语法检查;
    • flymake-stop-all-syntax-checks:停止所有语法检查;
    • flymake-goto-next-error(C-c C-e n):跳到下一个错误点;
    • flymake-goto-prev-error(C-c C-e p):跳到前一个错误点;
    • flymake-popup-current-error-menu(C-c C-e m):以popup的方式展示当前错误点的说明。

    默认情况下,这些方法都没有绑定快捷键,在~/.emacs配置文件添加了下面的快捷键绑定。

    (add-hook 'flymake-mode-hook
          (lambda()
            (local-set-key (kbd "C-c C-e n") 'flymake-goto-next-error)))
    (add-hook 'flymake-mode-hook
          (lambda()
            (local-set-key (kbd "C-c C-e p") 'flymake-goto-prev-error)))
    (add-hook 'flymake-mode-hook
          (lambda()
            (local-set-key (kbd "C-c C-e m") 'flymake-popup-current-error-menu)))

    效果图如下(左图是goflymake检查出来的结果,红色语句便是有问题的地方;右图是光标移动到第一个错误点,按下快捷键C-c C-e m后显示的错误menu):

    推送门:

    gocode+auto-complete搭建emacs的go语言自动补全功能

     参考列表:

     http://dominik.honnef.co/posts/2013/03/emacs-go-1/

    https://github.com/dominikh/go-mode.el

    https://github.com/dougm/goflymake

    *******************

    ***欢迎转载,不过请注明出处哦***

    *******************

  • 相关阅读:
    jQuery .css("width")和.width()的区别
    用jquery写一个滑动TAB 例子
    D
    4 Values whose Sum is 0
    Hibernate学习之hql 与sql
    BigDecimal进行精确运算
    Date类与SimpleDateFormat类中parse()方法和format()方法
    单例模式下的懒汉和饿汉模式
    Java中Date类型详解
    Spring @Column的注解详解
  • 原文地址:https://www.cnblogs.com/lienhua34/p/5838166.html
Copyright © 2011-2022 走看看