关于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

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

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

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

搭建emacs的go编程语言环境的更多相关文章

  1. 搭建一套Java开发环境以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载JDK. https://www.oracle.com/tech ...

  2. 在Ubuntu下搭建ASP.NET 5开发环境

    在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...

  3. 搭建 AngularJS+Ionic+Cordova 开发环境并运行一个demo

    目前的手机APP有三类:原生APP,WebAPP,HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Cordova就是一个中间件,让我们把WebAPP打包成Hybrid ...

  4. Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试

    Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...

  5. ubuntu上用eclipse搭建java、python开发环境

    上一篇文章讲到如何在windwos上用eclipse搭建java.python开发环境,这一讲将关注如何在ubuntu上实现搭建,本人使用虚拟机安装的ubuntu系统,系统版本为:14.04 lts ...

  6. go语言环境搭建+sublime text3(windows环境下)

    感觉有点坑,整了一下午~搞定 go语言环境搭建+sublime text3(windows环境下) 1.安装sublime text3 2.安装go语言程序包 3.测试go语言是否安装成功     键 ...

  7. react-native —— 在Windows下搭建React Native Android开发环境

    在Windows下搭建React Native Android开发环境 前段时间在开发者头条收藏了 @天地之灵_邓鋆 分享的<在Windows下搭建React Native Android开发环 ...

  8. windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

    windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境   http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...

  9. 极其简单的搭建eclipse的android开发环境

    这篇博客是关于如何搭建eclipse的android开发环境, 与网上的其他博客不同,我的方法比他们简单的多,所 以推荐给大家. 搭建eclipse的android开发环境步骤: 1.配置JDK(Ja ...

随机推荐

  1. MySql安装与MySQL添加用户、删除用户与授权

    1.安装MySql       目前MySQL有两种形式的文件,一个是msi格式,一个是zip格式的.msi格式的直接点击setup.exe就好,按照步骤进行.但是很多人下了zip格式的解压发现没有s ...

  2. linux编程之内存映射

    一.概述                                                   内存映射是在调用进程的虚拟地址空间创建一个新的内存映射. 内存映射分为2种: 1.文件映射 ...

  3. 用FineReport做的共建共享填报系统

    一.应用背景 随着信息技术的不断发展,快速开发出适合用户业务需求发展的填报报表是势在必然的,因此在不断的研究和分析下针对这一业务特点制作了此报表系统,以使不同开发商之间共建共享数据进行填报和统计分析的 ...

  4. Windows Azure文件共享服务--File Service

    部署在Windows Azure上的虚拟机之间如何共享文件?例如:Web Server A和Web Server B组成负载均衡集群,两个服务器需要一个共享目录来存储用户上传的文件.通常,大家可能首先 ...

  5. simple-spring-memcached缓存搭建

    项目中使用的缓存经常是知道使用,没有试过搭建起它.刚好这次自己的毕业可以用来搭建缓存.其他不多说了,直接看操作吧.首先在pom.xml中依赖simple-spring-memcached的架包. &l ...

  6. BFC 小结

    最近对一些基础知识进行了整理,下面是针对 BFC 的一些整理以及本人对 BFC 的一些理解. 1. 首先,什么是 BFC 呢? BFC,Block formatting context,直译为&quo ...

  7. [Top-Down Approach]My First C/S Program [Python]

    These days I was learning from Computer Networking --A Top-Down Approach by Kurose Ross. I modified ...

  8. 【温故而知新-Javascript】使用地理定位

    地理定位(Geolocation)API让我们可以获取用户当前地理位置的信息(或者至少是正在运行浏览器的系统的位置).它不是HTML5规范的一部分,但经常被归组到与HTML5相关的新功能中. 1. 使 ...

  9. 炮(棋盘DP)

    一直以为自己写的就是状态压缩,结果写完才知道是个棋盘dp 首先看一下题目 嗯,象棋 ,还是只有炮的象棋 对于方案数有几种,我第一个考虑是dfs,但是超时稳稳的,所以果断放弃 然后记得以前有过和这个题差 ...

  10. Google类VR设备知识

    前言 本文所指的google类vr设备是指: 谷歌的Cardboard.三星Gear VR.暴风魔镜等这样的手机VR盒子,而并不是HTC Vive这类. 人眼立体感知能力 人的左右眼看到的东西是有差别 ...