Emacs: 在只读模式下单键导航

作为 Emacs 的忠实粉丝, 还是喜欢默认 Emacs 的按键风格, 不喜欢 Vi 那种频繁切换模式的玩法.

不过如果Emacs buffer是只读模式时(比如 help mode, pdf view mode 等), 用单键进行导航还是比较方便的.

原来一直用 lazy-set-key.el 配合 key-alist 来实现类似的功能, 今天把这些配置文件重新整理成一个独立的插件 vi-navigate 即可享受同样的便利.

安装方法

  1. 下载 vi-navigate 里面的 vi-navigate.el 放到 ~/elisp 目录
  2. 把下面的配置加入到 ~/.emacs 中
(add-to-list 'load-path (expand-file-name "~/elisp"))
(require 'vi-navigate)
(vi-navigate-load-keys)

使用

vi-navigate-hook-list 这个变量的值是

'(eww-mode-hook
    help-mode-hook
    package-menu-mode-hook
    top-mode-hook
    benchmark-init/tabulated-mode-hook
    benchmark-init/tree-mode-hook
    emms-playlist-mode-hook
    emms-browser-mode-hook
    emms-stream-mode-hook
    apt-utils-mode-hook
    man-mode-hook
    apropos-mode-hook
    less-minor-mode-hook
    info-mode-hook
    doc-view-mode-hook
    w3m-mode-hook
    pdf-view-mode-hook
    irfc-mode-hook
    )

当Emacs打开上述模式的buffer时, vi-navigate 会自动加载, 并可立即使用下面单键进行操作:

按键 按键解释
j 下一行
k 上一行
h 向后移动一个字符
l 向前移动一个字符
J 向上滚动一行
K 向下滚动一行
H 向后移动一个单词
L 向前移动一个单词
e 向下滚动一屏
SPC 向上滚动一屏
y 用 tooltip 显示当前光标的翻译 (需要安装 sdcv 插件)
Y 用 buffer 显示当前光标的翻译 (需要安装 sdcv 插件)
i 用 tooltip 显示输入的翻译 (需要安装 sdcv 插件)
I 用 buffer 显示输入的翻译 (需要安装 sdcv 插件)
f 显示下一个 help 历史 (只在 help mode 有效)
b 显示上一个 help 历史 (只在 help mode 有效)
TAB 跳转到下一个帮助连接 (只在 help mode 有效)
6 个赞

楼主好高产啊!:+1:

请问楼主平常写代码移动光标是用emacs内建的C-n, C-p, C-f, C-b等按键吗?还是说有其他的配置?

虽然我用evil,我也想知道emacser是按方向键还是npfb

按方向键就不用Emacs了. 我也是evil user. 不过编辑模式下我还是使用emacs的kbd的, 也就是常规的npfb. 谭里貌似有人喜欢用C-hjkl(虽然我更喜欢ijkl)?

我自己不會刻意使用C-n, C-p, C-f, C-b,按的舒服還是比較重要的。堅持讓手不離開home row對我來說並不會提高多少效率

我只读模式都是jkhl,其他可写模式我就传统按键,只不过大部分按键都改成 alt 和 super

那有改键盘的键位吗?像是把ctrl跟caps交换,或是把alt跟ctrl交换等等?

我有几千个按键都被我手动改了,大部分按键都被我塞进one-key里面了