Hack 和 / - Dr hjkl 遇上 Vimperator

作者:Kyle Rankin

在 2009 年 11 月,我写了一整篇专栏(“Dr hjkl 和 Mr Hack”),专门介绍具有 vi 风格快捷键的程序。在那篇专栏中,我介绍了 Firefox 的 Vimperator 插件并讨论了它的工作原理,但在当时,我提到,“Vimperator 插件内容非常丰富,值得单独写一篇专栏文章来介绍(实际上,如果您对此感兴趣,请发送电子邮件至 lj@greenfly.net)。” 嗯,我收到了许多回复,因此,考虑到这一点以及我对所有 vi 快捷键事物的热爱,我认为 Vimperator 插件值得用一整篇专栏文章来介绍。

Hasta la Vista, Mousey

正如我在之前的专栏中提到的,我喜欢 vi 风格快捷键的主要原因是它们让您的手指保持在主行(键盘上的 asdfghjkl; 行)上——如果您是盲打,这一点非常重要。一旦您习惯使用 hjkl 导航文档,它和其余的快捷键就会成为第二天性。如果您以相当快的速度盲打,您就会意识到,为了点击链接这样简单的操作而伸手去拿鼠标甚至方向键,会使您的速度减慢多少。现在,大多数 Web 浏览器都有一些有限的方式可以使用键盘浏览页面,但它们几乎总是使用方向键以及 Page Up 和 Page Down 键,所有这些键都离主行很远。

过去,我曾使用多种方法为 Firefox 添加一定程度的 vi 风格快捷键。起初,我使用了 Firefox 配置的自定义配置,后来,我使用了 mozless 扩展。两者都运行良好,至少对于某些版本的 Firefox 来说是这样,但它们仍然是真实事物的有限版本。好吧,Vimperator 插件才是真正的解决方案。它远远超出了简单的快捷键,实际上创建了一个具有令人难以置信的细节水平的模态界面。您不仅可以获得 hjkl 导航,还可以像在 vim 中一样打开标签页甚至录制宏。更重要的是,Vimperator 在构建时就考虑到了网页导航,因此有可用的快捷键可以轻松地点击链接,甚至悬停在页面上的元素上——所有这些都通过键盘完成。

Come with Me If You Want to Live

第一步是安装 Vimperator 插件。访问 vimperator.org,点击页面上的 Download Vimperator 按钮,然后完成典型的 Firefox 插件安装过程。一旦您重新启动 Firefox,您首先会注意到的是您的菜单栏消失了(图 1)!现在,一旦您习惯了 Vimperator,这可能没什么问题,但我一开始觉得有点不适应,所以您可能需要输入:set guioptions+=mT以暂时重新打开菜单栏。请注意,与 vim 一样,您按下 : 键进入命令行模式。Vimperator 将 Firefox 变成像 vim 一样的模态浏览器,它具有命令行模式(当您按下 : 键时访问)以及普通模式和插入模式。同样与 vim 一样,当您陷入某种奇怪的模式时,您通常只需按几次 Esc 键即可返回正常模式。如果您发现您想要永久恢复菜单栏,请将以下内容添加到您的 ~/.vimperatorrc 文件中

set guioptions+=mT 

此文件就像 ~/.vimrc 一样,因此您也可以在此处添加任何其他 Vimperator 特定的设置。

Hack and / - Dr hjkl Meets the Vimperator

图 1. 启用 Vimperator 的 Firefox,没有菜单栏

如果您以前使用过 vim,那么 Vimperator 的基本导航对您来说应该非常熟悉,但如果您仍然不熟悉这种导航方式,这里有一个快捷键的快速列表

  • h — 向左滚动。

  • j — 向下滚动一行。

  • k — 向上滚动一行。

  • l — 向右滚动。

  • gg — 移动到页面顶部。

  • G — 移动到页面底部。

  • / — 进入搜索模式。

  • n — 移动到搜索中的下一个匹配项。

  • N — 移动到上一个匹配项。

  • 空格键 — 向下翻一页。

  • Shift+空格键 — 向上翻一页。

  • Esc — 返回标准导航模式。

  • F1 — 显示 Vimperator 帮助。

例如,如果我想使用 Vimperator 搜索“Sarah Conner”,我会按下 /,输入 Sarah Conner 并按下 Enter 键。Vimperator 会跳转到页面上的第一个实例。如果第一个 Sarah Conner 不是正确的匹配项,我会按下 n 移动到下一个匹配项,或按 N 返回到上一个匹配项。如果我想从页面顶部开始新的搜索,我可以输入 gg 移动回顶部,然后 / 进入搜索模式,然后输入,例如“John Conner”并按下 Enter 键。

与 vim 一样,您也可以为这些命令中的任何一个添加数字修饰符,因此如果您想向下移动五行而不是仅仅一行,您可以按下 5j。如果您忘记了特定功能的快捷键,只需按下 F1 或输入:help以查看完整的 Vimperator 帮助屏幕。

即使 Vimperator 仅提供标准导航键也很有用,但它还添加了一整套键来访问标准浏览功能。以下是一些标准键的列表

  • H — 在当前标签页的历史记录中后退。

  • L — 在当前标签页的历史记录中前进。

  • gt — 转到下一个标签页。

  • gT — 转到上一个标签页。

  • d — 关闭当前标签页。

  • u — 撤消:打开先前关闭的标签页(适用于多个先前关闭的标签页)。

  • r — 重新加载当前页面。

  • R — 重新加载当前页面,不使用本地缓存。

现在,我发现当我使用像 S5 这样的工具进行基于 Web 的演示文稿时,它期望的快捷键与 Vimperator 冲突。幸运的是,Vimperator 可以轻松地临时禁用其快捷键。只需按下 Ctrl-z,所有快捷键都将返回到标准的 Firefox 模式,直到您按下 Esc。当我在浏览 Google Reader 时,我也使用此模式,因为它已经接受 vi 风格的快捷键来浏览 RSS 订阅。如果您只需要输入一个 Vimperator 不会拦截的键,您可以按下 Ctrl-v,在您按下该键后,Vimperator 将返回到其正常模式。

一旦您掌握了标准移动,您可能会想,如何在没有菜单栏的情况下实际打开新的 URL?可以按 o 键(或输入:open)后跟您要打开的 URL,以在当前标签页中加载该 URL,或者按 t 键(或输入:tabopen)以输入要在新标签页中打开的 URL。除了这些基本键之外,还有许多变体

  • T — 打开 :tabopen 提示符,但用当前标签页的 URL 填充 URL。

  • O — 创建一个 :open 提示符,但用当前标签页的 URL 填充 URL。

  • w — 像 :tabopen 一样,但仅在新窗口中打开 URL。

  • W — 像 T 一样,它创建一个 :winopen 提示符,并用当前标签页中的 URL 填充 URL。

  • p — 基于剪贴板的内容打开 URL。

一旦您输入 URL,您还可以按 Tab 键以根据您的浏览器历史记录触发 Tab 补全。说到浏览器历史记录,您仍然可以从命令行模式访问它和其他标准的 Firefox 功能

  • :bmarks— 在命令行模式下访问您的所有 Firefox 书签。

  • :history— 查看您的浏览器历史记录。

  • :emenu— 访问标准 Firefox 菜单中的功能。

  • :dialog— 访问其他 Firefox 对话框窗口;输入:help :dialog以获取更多信息。

Heads-Up Link Displays

在我看来,Vimperator 除了标准快捷键之外的真正强大之处在于,您可以使用键盘打开链接、移动到输入框,甚至模拟鼠标悬停。Vimperator 将此称为 Hint 模式,要激活它,请在任何网页上按 f 键。页面上所有“可提示”的对象,例如超链接、文本输入框和下拉菜单,都将以分配给它们的数字突出显示(图 2)。要选择其中一个突出显示的项目,您可以输入其旁边的数字并按 Enter 键,或者您可以开始输入突出显示文本的一部分。例如,如果您正在 Web 上阅读一篇多页文章,并且看到文章每一页的链接以及一个 Next 链接,您可以按 f 键,然后输入N e x t。在您键入时,不再匹配的提示会消失,一旦只剩下一个匹配项,它将自动加载。当您使用 f 时,提示将在当前标签页中打开,但如果您想在新标签页中打开页面,只需使用 F 而不是 f 启动 Hint 模式。与其他模式一样,您可以按 Esc 键退出 Hint 模式。

Hack and / - Dr hjkl Meets the Vimperator

图 2. Hint 模式下的 LinuxJournal.com

f 键和 F 键激活快速 Hint 模式,但您也可以激活扩展 Hint 模式,以启用对链接的其他操作,而不仅仅是鼠标左键单击。要启用扩展 Hint 模式,请按 ; 键,然后按一个特殊键来设置您要执行的操作类型,最后输入与特定提示关联的数字。以下是您可能想要使用的一些提示模式的简略列表,但完整列表请查看 Vimperator 帮助页面。请记住,您将在任何这些键之前按下 ; 键

  • ; — 连续按两次 ; 键将聚焦一个链接并用鼠标悬停在其上;这对于激活 JavaScript 下拉菜单非常有用。

  • s — 保存链接的目标地址。

  • f — 聚焦特定框架。

  • y — 复制链接的目标位置。

  • Y — 复制链接的文本描述。

请相信我,我在这里只触及了 Vimperator 的皮毛。它真的让我想起了 vim,因为我总是觉得我只使用了可用功能的 10%。但与 vim 一样,Vimperator 在您逐步学习的过程中会奖励您。我在我的所有 Firefox 会话中使用 Vimperator,现在用鼠标浏览网站对我来说似乎很奇怪(而且很慢)。

Kyle Rankin 是旧金山湾区的系统架构师,并且是许多书的作者,包括 The Official Ubuntu Server BookKnoppix HacksUbuntu Hacks。他目前是 North Bay Linux Users' Group 的主席。

加载 Disqus 评论