66

I know how to display line numbers (and columns) in the mode-line, but I'd like emacs to display the line numbers for all the lines on the left-hand side. I've seen this done in vim and other text editors. How do I do this for emacs?

Malabarba
  • 22,878
  • 6
  • 78
  • 163
programking
  • 7,064
  • 9
  • 41
  • 62

8 Answers8

88

For Emacs version >= 26 you should use display-line-numbers-mode or global-display-line-numbers-mode.

You can run the command with M-xdisplay-line-numbers-modeRET or M-xglobal-display-line-numbers-modeRET to try it.

Another good idea is to use (add-hook 'prog-mode-hook 'display-line-numbers-mode) in your init.el to automatically enable that mode in all programming modes.

See EmacsWiki

bignose
  • 627
  • 3
  • 15
Maciej Goszczycki
  • 1,777
  • 13
  • 18
22

M-x linum-mode will do the trick. If you wish to effect this for all buffers, then M-x global-linum-mode will do this.

Eric Brown
  • 3,212
  • 4
  • 16
  • 20
  • Do you know a way I can make this permanent? – programking Sep 25 '14 at 22:09
  • 2
    (per the suggestion of nispio and mgoszcz2) addition of `(global-linum-mode)` to your .emacs.d/init.el file will make it permanent. I find global-linum-mode to be a bit excessive, and mgoszcz2's suggestion for enabling it only in certain modes is a good one. – Eric Brown Sep 25 '14 at 22:24
17

If you are using Emacs 26 or newer, you can use display-line-numbers-mode.

from etc/NEWS.26:

** Emacs now supports optional display of line numbers in the buffer. This is similar to what 'linum-mode' provides, but much faster and doesn't usurp the display margin for the line numbers. Customize the buffer-local variable 'display-line-numbers' to activate this optional display. Alternatively, you can use the 'display-line-numbers-mode' minor mode or the global 'global-display-line-numbers-mode'. When using these modes, customize 'display-line-numbers-type' with the same value as you would use with 'display-line-numbers'.

Yasushi Shoji
  • 2,151
  • 15
  • 35
  • 3
    I like it so much, but my muscle memory still goes `M-x linum-mode` - so I did `(advice-add 'linum-mode :override 'display-line-numbers-mode)`. – Christian Herenz Jun 21 '21 at 22:10
8

nlinum-mode is another option. It has the same interface as linum-mode, so you can use the same hooks, but it uses a different technology to be more performant. Quote from nlinum.el:

;; This is like linum-mode, but uses jit-lock to be (hopefully) more efficient.

You can install it via GNU Elpa via the usual list-packages.

http://elpa.gnu.org/packages/nlinum.html

fgeller
  • 181
  • 3
4

Certainly linum-mode is a good choice. If you don't always want to see line numbers, like me, you can use this trick from the excellent What the .emacs.d!? blog.

This temporarily enables linum-mode when you run goto-line.

Here's the code from his blog:

(global-set-key [remap goto-line] 'goto-line-with-feedback)

(defun goto-line-with-feedback ()   "Show line numbers temporarily, while prompting for the line number input"   (interactive)   (unwind-protect
      (progn
        (linum-mode 1)
        (goto-line (read-number "Goto line: ")))
    (linum-mode -1)))
Mr. Wacky
  • 151
  • 3
1

This is what my teacher tells us to set line-display-mode always on. Add this in your .emacs file.

(add-hook 'c++-mode-hook 'display-line-numbers-mode)
(add-hook 'c-mode-hook 'display-line-numbers-mode)
(setq linum-format "%3d ")

OTTO: Professor William Knottenbelt

Fengyi Li
  • 11
  • 2
1

Press M-x and type just linum (or even linu will work), then press Enter to automatically execute linum-mode. No need to type the longer linum-mode.

Also, usually you just want to go to one chosen line of interest because of an error message. Then press M-x, type goto-line, press Enter and type the line of choice.

questionto42
  • 147
  • 6
1

A better way may be is to use prog-mode as a whole instead of doing for all programming language.

(add-hook 'prog-mode-hook 'display-line-numbers-mode)

Though it doesn't work for mode other than programming langauges. But it is what i need.

Rajanboy
  • 113
  • 5