Emacs: Easy Setup Hundreds of Abbrevs

By Xah Lee. Date: . Last updated: .

Emacs's abbrev feature lets you type a short word and expand into a full word or code template.

For example:

Create Abbrevs

Following is the the most simple and efficient way of using abbrev.

Create a file with the following content:

;; -*- coding: utf-8; lexical-binding: t; -*-
;; sample use of abbrev

(clear-abbrev-table global-abbrev-table)

(define-abbrev-table 'global-abbrev-table
  '(

    ;; English word abbrev
    ("arg" "argument" )
    ("bc" "because" )
    ("bg" "background" )
    ("bt" "between" )

    ;; English abridged words
    ("cnt" "can't" )
    ("ddnt" "didn't" )
    ("dnt" "don't" )

    ;; phrase abbrev
    ("afaik" "as far as i know" )
    ("atm" "at the moment" )
    ("ty" "thank you" )
    ("btw" "by the way" )

    ;; computing
    ("cfg" "context-free grammar" )
    ("cs" "computer science" )

    ;; tech company
    ("gc" "Google Chrome" )
    ("macos" "macOS" )
    ("msw" "Microsoft Windows" )

    ;; programing
    ("ipa" "IP address" )
    ("jvm" "Java Virtual Machine" )
    ("rsi" "Repetitive Strain Injury" )
    ("subdir" "subdirectory" )
    ("db" "database" )

    ("evp" "environment variable" )
    ("guip" "graphical user interface" )
    ("oopp" "object oriented programing" )
    ("osp" "operating system" )

    ;; programing
    ("eq" "==" )
    ("r" "return" )
    ("utf8" "-*- coding: utf-8 -*-" )

    ;; regex
    ("rgaz" "\\([A-Za-z0-9]+\\)")
    ("rgshy" "\\(?:xx\\)")
    ("rgbracket" "\\[\\([^]]+?\\)\\]")
    ("rgcurly" "“\\([^”]+?\\)”")
    ("rgdigits" "\\([0-9]+\\)")
    ("rgdate" "\\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\\)")
    ("rgdot" "\\(.\\)")
    ("rgstr" "\\([^\"]+?\\)")
    ("rgtag" "\\([</>=\" A-Za-z0-9]+\\)")

    ;; unicode
    ("bu" "•" )
    ("catface" "😸" )
    ("hearts" "♥💓💕💙💚💛💜" )
    ("ra" "→" )

    ;;
    ))

;; define abbrev for specific major mode
;; the first part of the name should be the value of the variable major-mode of that mode
;; e.g. for go-mode, name should be go-mode-abbrev-table

(progn
  (when (boundp 'go-mode-abbrev-table)
    (clear-abbrev-table go-mode-abbrev-table))
  (define-abbrev-table 'go-mode-abbrev-table
    '(("go" "package main
import \"fmt\"
func main() {
        fmt.Println(\"3\")
}")

      ("p" "fmt.Printf(\"%v\\n\", hh▮)")
      ("pl" "fmt.Println(hh▮)")
      ("r" "return")
      ("st" "string")
      ("eq" "==")
      ("v" "var x = 3")
      ("df" "x := 3")
      ("c" "const x = 3")
      ("f" "func ff(x int) int {
    return nil
}")
      ("if" "if 4 { 3 }")
      ("ie" " if err != nil { panic(err) }")
      ("ei" "else if x > 0 { 3 }")
      ("else" "else { 3 }")
      ("for" "for i := 0; i < 4; i++ { i }")
      ("fr" "for k, v := range xxx {
▮
    }
"))))

(set-default 'abbrev-mode t)

(setq save-abbrevs nil)

name the file my-abbrev.el

Save the file at

~/.emacs.d/lisp/my-abbrev.el

Create the directory if it doesn't exist.

put this in your Emacs Init File:

(load "~/.emacs.d/lisp/my-abbrev.el")

Now, when you type btw followed by a space or punctuation, it'll become “by the way”.

Edit Abbrev

To edit the abbrev, just open the file, add/remove a line, then Alt+x eval-buffer. It works right away.

Add the abbrev file to Emacs: Bookmark , so it's fast to open.

Prevent Abbrev Expansion

To stop abbrev from expansion, press Ctrl+q before typing space or punctuation.

Allowed Abbrev Characters

Emacs, insert unicode, emoji, math symbols

Emacs, using abbrev mode