想象一下使用 Python 的 IDLE 界面来编辑文本。你将能够将文件加载到内存中,编辑它们,并保存更改。但是你执行的每个操作都将由一个 Python 函数定义。例如,将一个单词全部大写,调用 upper(),打开一个文件调用 open,等等。文本文档中的所有内容都是 Python 对象,可以相应地进行操作。从用户的角度来看,它与任何文本编辑器的体验相同。对于 Python 开发人员来说,这是一个丰富的 Python 环境,只需在配置文件中使用一些自定义函数就可以更改和开发。
这就是 Emacs 为 1958 年的编程语言 Lisp 所做的事情。在 Emacs 中,运行应用程序的 Lisp 引擎与你键入的任意文本之间没有分离。对于 Emacs 来说,一切都是 Lisp 数据,因此一切都可以通过编程方式进行分析和操作。
这构成了一个强大的用户界面(UI)。但是,如果你是 Emacs 的普通用户,你可能只触及了它可以为你做的事情的表面。这里有六件你可能没有意识到可以用 Emacs 做的事情。
使用 Tramp 模式进行云编辑
Emacs 的网络透明性比现在的趋势要早得多,今天它仍然提供了最流畅的远程编辑器体验之一。Tramp 模式 在 Emacs 中(以前称为 RPC 模式)代表“透明远程(文件)访问,多协议”,这清楚地说明了它提供的功能:轻松访问你想要通过大多数流行的网络协议编辑的远程文件。如今,远程编辑最流行和最安全的协议是 OpenSSH,因此它是默认协议。
Tramp 已经包含在 Emacs 22.1 或更高版本中,因此要使用 Tramp,你只需以 Tramp 语法打开一个文件。在 Emacs 的 文件 菜单中,选择 打开文件。当在 Emacs 窗口底部的迷你缓冲区中提示时,使用以下语法输入文件名
/ssh:user@example.com:/path/to/file
如果你需要以交互方式登录,Tramp 会提示你输入密码。但是,Tramp 直接使用 OpenSSH,因此为了避免交互式提示,你还可以将你的主机名、用户名和 SSH 密钥路径添加到你的 ~/.ssh/config 文件中。与 Git 一样,Emacs 首先使用你的 SSH 配置,并且只有在发生错误时才会停止询问更多信息。
Tramp 非常适合编辑你计算机上不存在的文件,并且用户体验与编辑本地文件没有什么明显的不同。下次当你开始 SSH 进入服务器只是为了启动 Vim 或 Emacs 会话时,不妨试试 Tramp。
日历
如果你解析文本比解析图形界面更好,你会很高兴知道你可以使用 Emacs 以纯文本格式安排你的一天(或一生),但仍然可以通过开源 Org 模式 查看器在你的移动设备上获得花哨的通知。
这个过程需要一些设置来创建一个方便的方式来将你的日程表与你的移动设备同步(我使用 Git,但你可以调用蓝牙、KDE Connect、Nextcloud 或你选择的文件同步工具),你必须在你的移动设备上安装 Org 模式查看器(例如 Orgzly)和一个 Git 客户端应用程序。一旦你整理好你的基础设施,这个过程本身就与你通常的(或正在开发的,如果你是新用户)Emacs 工作流程完美集成。你可以在 Emacs 中轻松参考你的日程表,更新你的日程安排,并大致保持任务进度。将更改推送到你的日程表会反映在你的手机上,因此即使 Emacs 不可用,你也可以保持井井有条。
感兴趣吗?阅读我的关于 使用 Org 模式和 Git 进行日历管理 的分步指南。
访问终端
有很多 可用的终端模拟器。虽然 Emacs 中的 Elisp 终端模拟器不是最好的通用终端模拟器,但它有两个显著的优点。
- 在 Emacs 缓冲区中打开: 我使用 Emacs 的 Elisp shell,因为它方便地位于我的 Emacs 窗口中,我经常在全屏模式下运行它。只需 Ctrl+x+o (或 Emacs 表示法中的 C-x o)即可访问终端,这是一个虽小但意义重大的优势,尤其是在它运行耗时的工作时,能够瞥一眼查看状态报告尤其好。
- 如果系统剪贴板不可用,则易于复制和粘贴: 无论我是懒得将手从键盘移到鼠标,还是因为我在远程控制台中运行 Emacs 而没有鼠标功能,在 Emacs 中拥有终端有时可能意味着可以快速将数据从我的 Emacs 缓冲区传输到 Bash。
要尝试 Emacs 终端,请键入 Alt+x (Emacs 表示法中的 M-x),然后键入 shell,然后按 Return。
使用 Racket 模式
Racket 是一种令人兴奋的新兴 Lisp 方言,具有动态编程环境、GUI 工具包和充满激情的社区。学习 Racket 时的默认编辑器是 DrRacket,它顶部有一个 Definitions 面板,底部有一个 Interactions 面板。使用此设置,用户编写影响 Racket 运行时的定义。想象一下旧的 Logo Turtle 程序,但使用终端而不是仅仅一个海龟。

LGPL 示例代码,作者 PLT
Emacs 基于 Lisp,是高级 Racket 程序员的绝佳集成开发环境 (IDE)。它没有附带 Racket 模式(尚未),但你可以使用 Emacs 包安装程序安装 Racket 模式和其他几个辅助扩展。要安装它,请按 Alt+X (Emacs 表示法中的 M-x),键入 package-install,然后按 Return。然后输入你要安装的包(racket-mode),然后按 Return。
使用 M-x racket-mode 进入 Racket 模式。如果你是 Racket 新手,但不是 Lisp 或 Emacs 新手,请从优秀的 Racket 图片快速入门 开始。
脚本
你可能知道 Bash 脚本在自动化和增强你的 Linux 或 Unix 体验方面很受欢迎。你可能听说过 Python 在这方面也做得相当不错。但是你知道 Lisp 脚本也可以以非常相似的方式运行吗?有时人们对 Lisp 的真正用途感到困惑,因为许多人是通过 Emacs 接触到 Lisp 的,因此潜意识里认为在 21 世纪运行 Lisp 的唯一方法是打开 Emacs 窗口。幸运的是,事实并非如此,Emacs 是一个很棒的 IDE,用于支持你将 Lisp 脚本作为通用系统可执行文件运行的工具。
除了 Elisp 之外,还有两种流行的现代 Lisp,它们很容易作为独立脚本运行。
- Racket: 你可以运行 Racket 脚本,依赖于你系统的 Racket 安装来提供运行时支持,或者你可以使用 raco exe 来生成可执行文件。raco exe 命令将你的代码与运行时支持文件打包在一起以创建可执行文件。然后 raco distribute 命令将该可执行文件打包到一个可在其他机器上运行的发行版中。 Emacs 有许多特定于 Racket 的工具,因此在 Emacs 中创建 Racket 文件既简单又高效。
- GNU Guile: GNU Guile (“GNU Ubiquitous Intelligent Language for Extensions”的缩写)是 Scheme 编程语言的实现,用于为桌面、互联网、终端等创建应用程序和游戏。使用 Emacs 中的许多 Scheme 扩展中的任何一个,编写 Scheme 都很容易。例如,这是一个 Guile 中的“Hello world”脚本
#!/usr/bin/guile -s !# (display "hello world") (newline)
使用 guile 命令编译并运行它
$ guile ./hello.scheme ;;; compiling /home/seth/./hello.scheme ;;; compiled [...]/hello.scheme.go hello world $ guile ./hello.scheme hello world
在没有 Emacs 的情况下运行 Elisp
Emacs 可以充当 Elisp 运行时,但你不必以传统意义上的“打开” Emacs。--script 选项允许你使用 Emacs 作为引擎运行 Elisp 脚本,但无需启动 Emacs GUI(甚至不是其基于终端的 GUI)。在此示例中,-Q 选项使 Emacs 忽略你的 .emacs 文件,以避免执行 Elisp 脚本时的任何延迟(如果你的脚本依赖于 Emacs 配置中的某些内容,请省略此选项)。
emacs -Q --script ~/path/to/script.el
下载 Emacs 速查表
Emacs 的许多最精彩的部分可以在没有 Emacs 的情况下发生;Org 模式既是一种格式,也是 Emacs 扩展,流行的 Lisp 方言在很大程度上独立于任何特定应用程序,甚至 Elips 也可以在没有可见或交互式 Emacs 实例的情况下编写和运行。然而,对于任何对代码和数据之间界限模糊如何带来更大创新和更高效率感到好奇的人来说,Emacs 都是一个了不起的工具。
幸运的是,现在是 21 世纪,Emacs 拥有带有传统菜单和大量文档的 GUI,因此学习曲线已不像过去那样陡峭。但是,为了最大限度地发挥 Emacs 可以为你带来的好处,你需要学习它的键盘快捷键。因为 Emacs 能够执行的每个任务都是一个 Elisp 函数,所以 Emacs 中的任何事物都可以映射到键盘快捷键,因此尝试描述所有这些快捷键是不切实际的。要学习的基本组合键是你使用频率是那些晦涩组合键 10 倍的组合键。
我们已将最常见的 Emacs 组合键收集到 Emacs 速查表 中供你参考。将其挂在你的显示器附近或办公室墙上,或将其用作鼠标垫。随手携带,并经常参考它。一旦你开始在一个会话中完成两倍的工作,你将获得所有你花在学习命令上的时间的回报。一旦你开始编写自己的函数,可以说你不会后悔抓取了这份免费速查表!
评论已关闭。