转移到github上了,图片链接还是使用的论坛的,更新日志也会在这个串下同步。
Changelog
- 2020-03-19 新增加
isearch的介绍
开这个串的原因主要是发现 Emacs 自带的 mode 有些也挺不错的,而一般初学者(例
如我)使用 Emacs 时间比较短,对它自身强大的 mode 不了解而错失一些可以提高生
产力的配置。因此有了这个串,可以方便查询,分享使用体验。
欢迎大家分享一下自己在使用 Emacs 自带 mode 的最佳实践呀!
winner-mode
winner-mode 是一个全局的 minor mode。它的主要功能是记录窗体的变动。例如当前有2
个窗口,然后你关了一个,这时可以通过 winner-undo 来恢复。还可以再
winner-redo 来撤销刚才的 undo.
它默认按键绑定为:
(C-c <Left>) winner-undo
(C-c <Right>) winner-redo
建议配置:
(use-package winner-mode
:ensure nil
:hook (after-init . winner-mode))
同时,它也可以应用在 ediff 上,恢复由 ediff 导致的窗体变动。
(use-package ediff
:ensure nil
:hook (ediff-quit . winner-undo)
saveplace
saveplace 记录了上次打开文件时 cursor 停留在第几行、第几列。
建议配置:
(use-package saveplace
:ensure nil
:hook (after-init . save-place-mode))
hl-line
高亮当前行。
(use-package hl-line
:ensure nil
:hook (after-init . global-hl-line-mode))
hideshow
隐藏、显示结构化数据,如 { } 里的内容。对于单函数较长的情况比较有用。
建议配置:
(use-package hideshow
:ensure nil
:diminish hs-minor-mode
:bind (:map prog-mode-map
("C-c TAB" . hs-toggle-hiding)
("M-+" . hs-show-all))
:hook (prog-mode . hs-minor-mode)
:custom
(hs-special-modes-alist
(mapcar 'purecopy
'((c-mode "{" "}" "/[*/]" nil nil)
(c++-mode "{" "}" "/[*/]" nil nil)
(rust-mode "{" "}" "/[*/]" nil nil)))))
一些类似 hideshow 的插件
其中 origami 有 lsp 支持版本 lsp-origami.
whitespace
显示空白字符,如 \t \v \v 空格等等。
可以配置在 prog-mode,markdown-mode 和 conf-mode 下,显示行尾的空白字符。
(use-package whitespace
:ensure nil
:hook ((prog-mode markdown-mode conf-mode) . whitespace-mode)
:config
(setq whitespace-style '(face trailing)))
当然,仅显示行尾空白字符也可以简单地设置 show-trailing-whitespace 为 t 来开启。
so-long
有时候会打开一些文件,这些文件里的某一行特别长,而 Emacs 没有针对这种情况做特
殊处理,会导致整个界面卡死。现在它来了!
直接全局启用:
(use-package so-long
:ensure nil
:config (global-so-long-mode 1))
当打开一个具有长行的文件时,它会自动检测并将一些可能导致严重性能的 mode 关闭,
如 syntax highlight。
注: Emacs 27+ 自带
autorevert
有时候Emacs里打开的文件可能被外部修改,启用autorevert的话可以自动更新对应的
buffer.
(use-package autorevert
:ensure nil
:hook (after-init . global-auto-revert-mode))
isearch
本身Emacs自带的isearch已经足够强大,稍加修改就可以增加实用性。
例如anzu的显示匹配个数的功能就已经原
生支持了。通过
(setq isearch-lazy-count t
lazy-count-prefix-format "%s/%s ")
来显示如 10/100 这种状态。
比较恼人的一点是,在搜索中删除字符会回退搜索结果,而不是停在当前位置将最后一个搜
索字符删除。这里可以通过remap isearch-delete-char来实现。
此外,还可以将搜索结果保持在高亮状态以方便肉眼识别。这个是通过设置
lazy-highlight-cleanup为nil实现的。去除高亮状态需要人工M-x调用
lazy-highlight-cleanup。
(use-package isearch
:ensure nil
:bind (:map isearch-mode-map
([remap isearch-delete-char] . isearch-del-char))
:custom
(isearch-lazy-count t)
(lazy-count-prefix-format "%s/%s ")
(lazy-highlight-cleanup nil))
效果图:
注:isearch-lazy-count和lazy-count-prefix-format需要Emacs 27+


tab 转 空格是