gocode based autocompletion working for Go in GNU Emacs
The existing guides and documentation for this are terrible and
incomplete for someone who is not already experienced with GNU Emacs
Lisp packages (which describes me), so here is what worked for me. I'm
going to assume that your
$HOME/go and that
is on your
- get gocode itself:
go get github.com/nsf/gocode
To work in GNU Emacs,
gocodeneeds an auto-completion package; it recommends auto-complete, so that's what I decided to use. If you have that already you're done, but I didn't. At this point you might be tempted to go to the auto-complete website and try to follow directions from there, but you actually don't want to do this because there's an easier way to install it.
- The easiest way to install auto-complete and its prerequisites
is through MELPA, which is an additional package
repo for Emacs Lisp packages on top of the default ELPA. To enable MELPA, you need to add a stanza
.emacsfollowing its getting started guide, generally:
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (package-initialize)
- make sure you have a
$HOME/.emacs.ddirectory. You probably do.
- (re)start Emacs and run M-x list-packages. Navigate to
auto-completeand get it installed. If you're running GNU Emacs in X, you can just click on its name and then on the [Install] button; if you're running in a terminal window, navigating to each thing and then hitting Return on it does the same. This will install
auto-completeand its prerequisite package
popup, the latter of which is not mentioned on the auto-complete site.
It's possible to install auto-complete manually, directly from the site or more accurately from the github repo's release page. Do it from MELPA instead; it's easier and less annoying. If you install manually you'll have to use MELPA to install
- Set up the
.emacsstanza for gocode:
(add-to-list 'load-path "~/go/src/github.com/nsf/gocode/emacs") (require 'go-autocomplete) (require 'auto-complete-config) (ac-config-default)
This deliberately uses the go-autocomplete.el from
gocode's Go package (and uses it in place), instead of one you might get through eg MELPA. I like this because it means that if (and when) I update
gocode, I automatically get the correct and latest version of its Emacs Lisp as well.
Restarting GNU Emacs should then get you autocompletion when writing Go code. You may or may not like how it works and want to keep it; I haven't made up my mind yet. Its usage in X appears to be pretty intuitive but I haven't fully sorted out how it works in text mode (the major way seems to be hitting TAB to cycle through possible auto-completions it offers you).
(Plenty of people seem to like it, though, and I decided I wanted to play with the feature since I've never used a smart IDE-like environment before.)
See also Package management in Emacs: The Good, the Bad, and the Ugly and Emacs: How to Install Packages Using ELPA, MELPA, Marmalade. There are probably other resources too; my Emacs inexperience is showing here.
(As usual, I've written this because if I ever need it again I'll hate myself for not having written it down, especially since the directions here are the result of a whole bunch of missteps and earlier inferior attempts. The whole messy situation led to a Twitter rant.)