How to be extremely efficient in Emacs
You only need keyfreq to find frequently used commands.
The frequently used commands should be assigned efficient key bindings.
But you need exclude already optimized commands or commands which cannot be optimized before starting keyfreq.
For example, commands like next-line/previous-line/forward-char/backward-char could be excluded by tweaking variable keyfreq-excluded-commands.
The minimum keyfreq setup,
(require 'keyfreq)
(setq keyfreq-excluded-commands
'(self-insert-command
abort-recursive-edit
forward-char
backward-char
previous-line
next-line))
(keyfreq-mode 1)
(keyfreq-autosave-mode 1)
My actual keyfreq setup is more complicated.
Below is the eight month keyfreq data of my office computer,
| Times | Percentage | Command | Key |
|---|---|---|---|
| 4967 | 12.00% | evilmi-jump-items | % |
| 2892 | 6.99% | compile | , o o |
| 2178 | 5.26% | find-file-in-project-by-selected | , k k |
| 1953 | 4.72% | copy-to-x-clipboard | , a a |
| 1566 | 3.78% | paste-from-x-clipboard | , z z |
| 1227 | 2.96% | er/expand-region | , x x |
| 897 | 2.17% | evil-repeat | . |
| 866 | 2.09% | ido-find-file | , x f, C-x C-f |
| 819 | 1.98% | toggle-full-window | , f f |
| 815 | 1.97% | etags-select-find-tag-at-point | C-], , h t |
| 721 | 1.74% | back-to-previous-buffer | , b b |
| 682 | 1.65% | split-window-vertically | , x 2 |
| 539 | 1.30% | find-function | , h f, C-h C-f |
| 494 | 1.19% | counsel-recentf-goto | , r r |
| 397 | 0.96% | counsel-git-grep | , g g |
| 376 | 0.91% | delete-other-windows | , x 1, C-x 1 |
| 372 | 0.90% | evilnc-comment-or-uncomment-lines | , c i |
| 351 | 0.85% | eval-expression | , e e, M-: |
| 326 | 0.79% | evilmi-select-items | , s i |
| 320 | 0.77% | paredit-doublequote | |
| 307 | 0.74% | evil-filepath-outer-text-object | |
| 300 | 0.72% | steve-ido-choose-from-recentf | |
| 295 | 0.71% | split-window-horizontally | , x 3 |
| 283 | 0.68% | git-add-current-file | , x v a |
| 279 | 0.67% | winner-undo | , x u, , s u, C-x 4 u |
| 278 | 0.67% | describe-function | , h d, C-h f |
| 278 | 0.67% | evil-goto-mark-line | ' |
| 269 | 0.65% | ido-kill-buffer | , x k, C-x k |
| 254 | 0.61% | evil-goto-definition | g d |
| 253 | 0.61% | pop-tag-mark | M-* |
| 251 | 0.61% | git-messenger:popup-message | , x v b, C-x v p |
| 246 | 0.59% | my-goto-next-hunk | , n n |
| 237 | 0.57% | evilnc-comment-operator | , , |
| 235 | 0.57% | flyspell-goto-next-error | , f e, C-, |
| 214 | 0.52% | evil-exit-emacs-state | |
| 212 | 0.51% | browse-kill-ring-forward | |
| 210 | 0.51% | flyspell-buffer | , f b |
| 203 | 0.49% | evil-ex-completion | |
| 195 | 0.47% | narrow-or-widen-dwim | , x n n |
| 173 | 0.42% | comint-send-input | |
| 173 | 0.42% | beginning-of-defun | , b f |
| 170 | 0.41% | evil-surround-region | <visual-state> S |
| 161 | 0.39% | hippie-expand | M-/ |
| 151 | 0.36% | describe-key | , h k, C-h k |
| 149 | 0.36% | evil-space–evil-next-visual-line | SPC |
| 139 | 0.34% | gnus-topic-select-group | |
| 138 | 0.33% | js2-print-json-path | , j p p |
| 132 | 0.32% | goto-line | M-g g, M-g M-g |
| 132 | 0.32% | evil-avy-goto-subword-1 | ; |
| 127 | 0.31% | ibuffer-mark-for-delete | |
| 127 | 0.31% | evil-inner-single-quote | |
| 126 | 0.30% | isearch-other-meta-char | |
| 124 | 0.30% | term-send-up | |
| 118 | 0.29% | isearch-other-control-char | |
| 116 | 0.28% | evil-set-marker | m |
| 115 | 0.28% | browse-kill-ring | M-y, , y y |
| 114 | 0.28% | counsel-git-grep-yank-line | , g l |
| 114 | 0.28% | evil-window-down | C-w j |
| 112 | 0.27% | evil-jump-backward | C-o |
| 108 | 0.26% | evil-visual-block | C-v |
| 108 | 0.26% | evil-space–evil-previous-visual-line | S-SPC |
| 107 | 0.26% | comint-previous-input | |
| 98 | 0.24% | gnus-summary-exit | |
| 98 | 0.24% | evil-search-word-backward | # |
| 98 | 0.24% | forward-button | |
| 96 | 0.23% | evil-paste-pop-next | |
| 95 | 0.23% | ediff-next-difference | |
| 95 | 0.23% | ido-imenu | , i i |
| 92 | 0.22% | my-wg-switch-workgroup | , w g g |
| 90 | 0.22% | counsel-git-find-file | , g f |
| 90 | 0.22% | evilmi-delete-items | , d i |
| 87 | 0.21% | gnus-summary-extract-mail-address | |
| 87 | 0.21% | cliphist-paste-item | , h h |
| 84 | 0.20% | subword-backward-kill | <C-backspace> |
| 84 | 0.20% | paredit-backslash | |
| 83 | 0.20% | my-yas-reload-all | , y c r |
| 81 | 0.20% | pwd | |
| 80 | 0.19% | previous-complete-history-element | |
| 80 | 0.19% | wg-create-workgroup | , w g t |
| 78 | 0.19% | evil-forward-WORD-end | E |
| 77 | 0.19% | gnus-summary-scroll-up | |
| 76 | 0.18% | gnus-summary-extract-cc-and-to | |
| 75 | 0.18% | compile-goto-error | |
| 73 | 0.18% | evil-find-char-to | t |
| 72 | 0.17% | evil-repeat-find-char | |
| 69 | 0.17% | evil-window-up | C-w k |
| 67 | 0.16% | eval-last-sexp | , x e, C-x C-e |
| 66 | 0.16% | evil-complete-next-line | |
| 66 | 0.16% | exchange-point-and-mark | C-x C-x |
| 63 | 0.15% | direx:previous-item | |
| 61 | 0.15% | ediff-jump-to-difference | |
| 60 | 0.14% | diredp-next-line | |
| 58 | 0.14% | evilmr-replace-in-buffer | , r b |
| 58 | 0.14% | counsel-imenu-goto | , i m |
| 56 | 0.14% | evil-goto-mark | ` |
| 55 | 0.13% | gnus-group-unsubscribe-current-group | |
| 55 | 0.13% | ivy-bookmark-goto | |
| 55 | 0.13% | evil-filepath-inner-text-object | |
| 54 | 0.13% | describe-mode | C-h m |
| 54 | 0.13% | recenter-top-bottom | C-l |
| 54 | 0.13% | list-packages | |
| 52 | 0.13% | gnus-topic-mark-topic | |
| 52 | 0.13% | kill-line | C-k, <deleteline> |
| 51 | 0.12% | find-and-ctags-update-all-tags-force | |
| 50 | 0.12% | evil-paste-before | P |
| 49 | 0.12% | execute-extended-command | <execute>, C-x RET |
| 49 | 0.12% | etags-select-quit | |
| 49 | 0.12% | evil-inner-WORD | |
| 48 | 0.12% | find-tag | g C-] |
| 47 | 0.11% | diredp-previous-line | |
| 46 | 0.11% | paredit-close-square | |
| 44 | 0.11% | paredit-open-square | |
| 44 | 0.11% | evil-paste-last-insertion | |
| 42 | 0.10% | evil-inner-double-quote | |
| 42 | 0.10% | ivy-imenu-goto | |
| 40 | 0.10% | counsel-git-find-my-file | , g m |
| 39 | 0.09% | cp-filename-of-current-buffer | , f n |
| 39 | 0.09% | gnus-article-read-summary-keys | |
| 39 | 0.09% | isearch-nonincremental-exit-minibuffer | |
| 38 | 0.09% | sh-assignment | |
| 38 | 0.09% | mark-whole-buffer | , x h, C-x h |
| 38 | 0.09% | evilmi-inner-text-object | |
| 36 | 0.09% | evilnc-comment-or-uncomment-paragraphs | , c p, C-c p |
| 36 | 0.09% | evil-toggle-input-method | C-\ |
| 35 | 0.08% | org2nikola-export-subtree | |
| 35 | 0.08% | subword-forward | M-f, ESC <right> |
| 34 | 0.08% | evil-open-above | O |
| 34 | 0.08% | compose-mail | C-x m |
| 33 | 0.08% | evil-inner-paren | |
| 33 | 0.08% | term-send-raw-meta | |
| 33 | 0.08% | evil-invert-char | ~ |
| 32 | 0.08% | evil-space–evil-repeat-find-char | |
| 32 | 0.08% | httpd-restart-at-default-directory | , w r d |
| 32 | 0.08% | cp-fullpath-of-current-buffer | , f p |
| 31 | 0.07% | evil-forward-WORD-begin | W |
| 30 | 0.07% | sort-lines | , s l |
| 30 | 0.07% | bmkp-w3m-jump | |
| 30 | 0.07% | evilnc-copy-and-comment-lines | , c c, C-c c |
| 29 | 0.07% | toggle-company-ispell | , t c i |
| 29 | 0.07% | top-level | |
| 28 | 0.07% | package-menu-mark-upgrades | |
| 27 | 0.07% | evil-numbers/dec-at-pt | - |
| 27 | 0.07% | end-of-defun | , e f, C-M-e |
| 27 | 0.07% | my-setup-develop-environment | |
| 26 | 0.06% | evil-paste-pop | |
| 25 | 0.06% | ediff-previous-difference | |
| 25 | 0.06% | evil-backward-WORD-begin | B |
| 25 | 0.06% | goto-char | g o, M-g c |
| 25 | 0.06% | w3m-close-window | |
| 25 | 0.06% | org-mime-htmlize | |
| 25 | 0.06% | gnus-group-exit | |
| 24 | 0.06% | git-gutter:toggle | C-x C-g |
| 23 | 0.06% | my-gnus-group-list-subscribed-groups | |
| 23 | 0.06% | find-directory-in-project-by-selected | , f d |
| 23 | 0.06% | evil-inner-curly | |
| 22 | 0.05% | org-edit-src-exit | |
| 22 | 0.05% | string-edit-at-point | , s e |
| 22 | 0.05% | package-menu-mark-delete | |
| 22 | 0.05% | ido-magic-forward-char | |
| 22 | 0.05% | run-js | , r j s |
| 22 | 0.05% | git-gutter-reset-to-head-parent | , g s h |
| 21 | 0.05% | counsel-read-history | |
| 21 | 0.05% | rcirc-send-input | |
| 21 | 0.05% | gnus-undo | |
| 21 | 0.05% | subword-backward | M-b |
| 20 | 0.05% | company-select-next | |
| 20 | 0.05% | what-cursor-position | g a, g 8, C-x = |
| 20 | 0.05% | my-grep | , q q |
| 20 | 0.05% | hydra-gnus-summary/body | |
| 19 | 0.05% | ansi-term | |
| 19 | 0.05% | evil-window-right | C-w l |
| 19 | 0.05% | debugger-jump | |
| 19 | 0.05% | wg-switch-to-workgroup | |
| 19 | 0.05% | yas-abort-snippet | |
| 19 | 0.05% | tags-loop-continue | M-, |
| 19 | 0.05% | swiper-the-thing | , s s |
| 18 | 0.04% | my-wg-swich-to-workgroup | |
| 18 | 0.04% | org-edit-special | |
| 17 | 0.04% | lisp-complete-symbol | |
| 17 | 0.04% | my-wg-switch-to-workgroup-at-index | |
| 17 | 0.04% | test | |
| 17 | 0.04% | ediff-scroll-vertically | |
| 16 | 0.04% | w3m-view-previous-page | |
| 16 | 0.04% | evil-window-left | C-w h |
| 16 | 0.04% | isearch-yank-kill | |
| 16 | 0.04% | my-goto-previous-hunk | , p p |
| 16 | 0.04% | js-beautify | , j b |
| 16 | 0.04% | hydra-launcher/body | |
| 16 | 0.04% | read-only-mode | C-x C-q |
| 16 | 0.04% | message-send-and-exit | |
| 16 | 0.04% | etags-select-goto-tag | |
| 15 | 0.04% | evil-next-match | g n |
| 15 | 0.04% | js2r-kill | , j j k |
| 15 | 0.04% | string-edit-conclude | |
| 15 | 0.04% | delete-char | |
| 14 | 0.03% | gnus-summary-limit-to-author | |
| 14 | 0.03% | ediff-swap-buffers |