我正在寻找一种方法来将 emacs 用作 shell 中的分页命令(例如,使用 man 或滚动具有大量输出的异步命令的输出)。我使用 emacsclient 作为我的 $EDITOR,但 emacsclient 无法使用 stdin 作为其输入文件。是否有一个 emacs 扩展可以做到这一点,或者如果没有,是否有一个使用大多数 emacs 缓冲区移动和搜索命令的分页器?
我知道我可以只使用 Mx term 或 Mx ansi-term 并将我的 $PAGER 变量设置为“cat”,但我希望有一些东西可以与我当前分别使用 emacs 和 xterm 的习惯相结合。
答案1
你可以使用这个 shell 脚本作为你的寻呼机:
#!/bin/sh
t=$(tempfile -s .emacs-pager) || exit 1
cat - >> $t
echo 'reading into emacs...'
emacsclient "$t"
rm -f -- $t
将其保存为类似 ~/bin/emacs_pager.sh 的文件,使其可执行(例如:chmod +x ~/bin/emacs_pager.sh
),然后将其设置为 PAGER 环境变量的值(例如:export PAGER=~/bin/emacs_pager.sh
)。
注意:以上 shell 脚本来自这个 reddit 帖子:https://www.reddit.com/r/emacs/comments/2rr1ha/use_a_buffer_as_pager_from_shellmode/cnik8wb/
答案2
less 支持大多数 emacs 缓冲区运动键绑定,但不支持现成的搜索绑定。你也许可以使用莱斯基自定义键绑定来匹配 emacs。