知用网
霓虹主题四 · 更硬核的阅读氛围

Emacs与Shell交互的实用技巧

发布时间:2026-01-03 23:50:29 阅读:47 次

在日常工作中,很多人习惯打开终端跑命令,再切回编辑器写代码。其实Emacs早就把Shell搬进了编辑器里,用熟了之后几乎不用跳出界面就能完成大部分操作。

直接在Emacs里开个Shell

最简单的办法是按下 M-x shell,就会在下方弹出一个Shell缓冲区。这个不是模拟器,是真的bash、zsh或者你默认的Shell,能执行所有命令,还能用方向键翻历史记录。

比如你想看看当前目录下有哪些文件,直接输入:

ls -l

输出结果就显示在同一个缓冲区里。更方便的是,输出里的文件路径可以点击,点一下就直接在Emacs里打开了那个文件。

临时执行一条命令

有时候只是想快速查个信息,不想开完整Shell。这时候可以用 M-! 快捷键。按完后输入命令,比如:

date

回车之后Emacs会弹出一个叫 *Shell Command Output* 的窗口,显示命令的输出结果。像查时间、算个md5、看进程列表这种小任务特别适合这种方式。

把命令结果插入当前文件

写文档的时候经常需要贴命令输出。比如你在写README,想贴一个程序的版本号。把光标定位好,然后按 M-|,输入:

git --version

回车后版本号就直接插进来了。这个比复制粘贴快多了,而且不容易出错。

用Shell命令处理选中文本

选中一段文字,按 M-|,会提示你输入命令。比如你有一串URL编码的文本,想用Python解码:

python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.stdin.read().strip()))"

回车后选中的内容就被替换成解码后的结果了。这个功能用来格式化JSON、压缩CSS、转Base64都很顺手。

用ansi-term获得完整终端体验

如果某些程序需要完整的终端支持(比如top、vim、ssh),普通的shell模式可能显示不正常。这时候可以用 M-x ansi-term,它支持颜色和特殊控制字符。

启动后默认是bash,你可以ssh到服务器,或者运行交互式程序都没问题。切换工作区的时候就像在用多个终端标签页。

绑定常用命令到快捷键

如果你每天都要跑某个脚本,可以给它绑个快捷键。比如把 C-c l 设成运行日志分析脚本:

(global-set-key (kbd "C-c l") 
  (lambda () 
    (interactive) 
    (shell-command "/path/to/analyzer.sh >> /tmp/logs.txt")))

以后按两下键就自动跑了,连输入都省了。

让Shell和编辑器真正打通

Emacs的厉害之处在于,它不只是把Shell塞进来,而是让两边能互相调用。你在Shell里输入的命令,上下箭头能调出之前在另一个缓冲区执行过的记录;在编辑器里选中的变量名,可以一键传给grep去搜全项目。

这种无缝切换带来的效率提升,只有用久了才能体会到。刚开始可能会觉得记快捷键麻烦,但一周之后你会发现,手再也不想离开键盘去摸鼠标了。