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 |