转移到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+