7 tools for working with Python in Emacs (and Ubuntu)
I've been meaning to blog about this for some time, so I suppose now
is as good an opportunity as any. This is going to be a very "stream
of consciousness"-esque posting, so bear with me. Some of these are
things that have radically changed the way I use emacs. Others are
minor changes that I like. Feel free to pick and choose from them.
specific. But I feel that they will be useful to most Python
programmers who use emacs. I should also note that (like most emacs users), most of these things
are tricks that I've picked up from various sources along the way. If
you wrote something that I put in here, thanks!
Ropemacs
Ropemacs is among the tools I love the most and hate the most. Whenit works, it opens up a new world of automated refactorings for you.
But it seems to be a bit buggy at times. That said, setting it up is
really easy. Firstly, you need to have ropemacs installed. This is
pretty easy:
sudo apt-get install python-ropemacsAfter that, just a couple of lines of elisp in your .emacs file and
you're good to go!
(require 'pymacs) (pymacs-load "ropemacs" "rope-") (setq ropemacs-enable-autoimport t)
Anything
Anything is almost like Quicksilver for emacs. To begin, you need todownload anything.el and anything-config. I also use
anything-match-plugin. Then you just need the following lines of elisp:
(require 'anything-config) (require 'anything-match-plugin) (global-set-key "\C-ca" 'anything) (global-set-key "\C-ce" 'anything-for-files)Then, prepare to spend a lot less time searching for files!
Line number mode
When you're pair programming, nothing is more helpful than being ableto direct people to a certain line of code. This lets you spend less
time saying "hey, see that over there? It's about 3 lines up. No,
too far! go down another two lines." Installing this is really easy.
You just need linum.el and two lines of elisp:
(require 'linum) (global-linum-mode 1)
Flymake through pyflakes
In case you miss the automatic error highlighting of the Visual Studioworld, you should realize that emacs has a similar system built-in.
It's called flymake. And you can make it work with Python as well. I
personally prefer to use pyflakes for this. All that's needed is
pyflakes:
sudo apt-get install pyflakes...and some elisp:
(when (load "flymake" t)
(defun flymake-pyflakes-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "pyflakes" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
Uniquify
How many __init__.py buffers do you have open at this moment? Ifyou're using emacs for Python programming, probably a lot. This is
where emacs's uniquify functionality is useful. It gives you a more
useful name for your buffers other than just appending a number at the
end. I have mine use the reverse of the directory. For instance, if
I have foo/__init__.py and bar/__init__.py open, they will be named
__init__.py/foo and __init__.py/bar respectively. You just need this in your .emacs:
(setq uniquify-buffer-name-style 'reverse) (setq uniquify-separator "/") (setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified (setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers (or Gnus mail buffers)
python-mode
To be totally honest with you, I haven't used the built-in emacs modefor python. I just installed python-mode because I was told it was
better. What I can tell you is that there is an occasional plugin
that requires python-mode. Installing it is easy. Just install
python-mode:
sudo apt-get install python-modeAnd add some elisp:
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
Pylookup
Pylookup is useful for those moments when you find yourself askingsomething like "Is join in os or os.path?" Unfortunately, the setup
can be complex, but well worth it. There are instructions here.
3 comments
Nov 04, 2009
John said...
I use a similar setup for my python development. I just use pylint with flymake instead of pyflakes. And I also use yasnippet,ecb and autocomplete. Thanks for sharing.
Jason Baker said...
@John - How well does pylint work with flymake? I've had good luck with pyflakes, but there are a couple of times where it crashes and it gets *really* annoying...
Nov 04, 2009
Brandon Craig Rhodes said...
Neat! I always seem to learn something from a post like this — so, right now, I'm trying out uniquify for the very first time and it's great! This will make __init__.py files much easier to find. :-)Thanks for sitting down to write up the tools that you've been using.




