Hack 和 / - Dr hjkl 和 Mr Hack
在不深入探讨古老的 Linux 圣战的情况下,让我澄清一下。我是一个忠实的、双手放在主行、敲击 Esc 键的 vim 用户。如果您喜欢 Emacs、JOE、ed、Kate、gedit 或者用放大镜和磁铁来编辑文本文件,那都没问题,我不会评判。只是对我而言,一旦我克服了最初的 vi(m) 学习曲线,我就开始寻找其他采用相同按键绑定方式的工具。具体来说,我指的是 h、j、k 和 l 键,以及如何在文档中使用它们分别向左、向下、向上和向右移动。我发现我最喜欢的工具大多数要么已经有 vi 风格的按键绑定,要么可以通过简单的方法启用它们。有些程序甚至提供了高级绑定,在很多方面都非常接近 vim。在本专栏中,我将重点介绍一些程序,它们要么具有 vi 按键绑定,要么可以通过一些简单的步骤使其具有 vi 按键绑定。
在开始谈论具体的程序之前,我应该先解释一下为什么使用 hjkl 进行导航比使用方向键更好。对于 vim 用户来说,一个不为人知的秘密是,很多人只是使用方向键和退格键来编辑他们的文档。hjkl 导航的主要优点是所有这些键都在主行上。如果您从未接受过正规的打字训练,那么主行就是 qwerty 键盘上的 asdfghkl 行键。如果您学习盲打,您会被教导默认将手指放在这一行上。这意味着 hjkl 键触手可及,但是每次您伸手去按方向键时,您都必须将右手从主行上移开。现在,如果您不是盲打者,那没什么大不了的。但如果您是,这几乎就像伸手去拿鼠标一样具有破坏性。诚然,我知道一开始会很笨拙,但是如果您是 vim 用户并且会一点盲打,那么强迫自己使用 hjkl 进行导航直到它成为第二天性是值得的。
如果您是 vi 按键绑定的新手,这里有一些主要的按键,您会发现它们在其他程序中也类似地工作
h — 向左移动
j — 向下移动
k — 向上移动
l — 向右移动
^ — 移动到行首
$ — 移动到行尾
G — 移动到文档底部
g — 移动到文档顶部 (vim 中为 gg)
w — 将光标向前移动一个单词
b — 将光标向后移动一个单词
/ — 进入搜索模式
n — 转到下一个搜索结果
N — 转到上一个搜索结果
许多标准的命令行程序开箱即用地使用 vi 风格的导航,我想首先提到的是 less。less 程序允许您分页浏览文本文件,如果您还需要另一个使用 less 而不是 more 的理由,那就是使用它,因为 j 和 k 将在文档中向下和向上移动。此外,您可以键入 G 滚动到文档的最底部,键入 g(vim 中为 gg)移动到最顶部。与 vim 一样,您也可以按 / 键入搜索词,然后按 Enter,再按 n 和 N 分别查找下一个和上一个匹配项。与 less 类似,默认情况下,您可以使用相同的键滚动浏览 man 页面输出。
Screen 也可以使用 vi 按键绑定在复制模式下导航。Screen 是一个很棒的 shell 程序,它允许您打开多个 shell 会话,并分离和重新连接到它们。如果您在使用习惯了常规终端会话后开始使用 screen,您可能会遇到奇怪的行为,即当您按下 Shift 和 PgUp 和 PgDn(或使用滚动条)来向上和向下滚动输出时,screen 会表现出这种行为。在 screen 中,如果您想查看已滚动到终端顶部以上的输出,只需按 Ctrl-A Esc 进入复制模式。在复制模式下,您现在可以使用方向键(真是不应该)或 hjkl 在输出中滚动。与 less 一样,您也可以使用 g 和 G 滚动到输出的顶部和底部。当您完成滚动后,只需按 q 键退出复制模式。
甚至 bash 本身也可以设置为让您以真正的 vi 风格导航命令行。在您的 bash shell 中,只需键入set -o vi。现在,请记住,一旦您启用此选项,您将必须进入插入模式(按 i 键)才能像在 vi 中一样插入文本。并且,如果您想使用 h 或 l 向左或向右移动光标,或者使用 w 或 b 向前或向后移动一个单词,您将必须按 Esc 键退出插入模式。对于那些尝试过并想撤消它的人,只需按 i 进入插入模式,然后键入set -o emacs.
这是我再次有机会添加一个我喜欢 mutt 作为电子邮件程序的理由——它几乎是 vim 的按键绑定表亲。事实上,当您第一次开始使用 mutt 时,您会注意到,当您有疑问时,您通常可以直接按您在 vi 中使用的相同按键,在 mutt 中做类似的事情。您最初可能会感到困惑的唯一地方是,一旦您打开一封电子邮件并阅读它。默认情况下,j 和 k 键会切换到文件夹中的下一封和上一封电子邮件,即使电子邮件是打开的,因此您确实必须学会使用 Enter 和退格键来滚动浏览电子邮件正文。
Netris 是一个很棒的命令行 俄罗斯方块 克隆版本,在大多数主要的 Linux 发行版上都可以使用。关于 Netris,总让我感到困扰的一件事是,尽管它使用了主行的大部分键来旋转和移动游戏中的形状,但这些键与您在 vi 中期望的键略有偏差。幸运的是,您可以在启动 Netris 时更改按键绑定,因此对于真正的 vi 键,请执行
netris -k "hkl j"
执行上述操作后,h 将使方块向左移动,l 向右移动,k 旋转它们,j 使方块更快掉落,空格键立即将方块掉落到底部。一旦我可以像玩 vi 一样玩它,我的 Netris 得分就提高了很多。
不幸的是,Firefox 默认情况下不使用 vi 按键绑定(尽管 Google Reader 使用),但这可以通过 Firefox 插件来修复也就不足为奇了。Vimperator 插件 (vimperator.org/trac/wiki/Vimperator) 功能非常丰富,足以单独写一篇专栏文章(事实上,如果您对此感兴趣,请发送电子邮件至 lj@greenfly.net)。从本质上讲,一旦安装了该插件,您的整个 Firefox 会话就会变成模态的 vi 风格会话。您不仅可以使用 hjkl、g、G 等来导航页面,而且当您在文本字段中时,Vimperator 实际上会进入插入模式!您甚至可以像在 vim 中一样录制和播放宏。Vimperator 添加了许多其他功能,使仅使用键盘浏览 Web 不仅成为可能,而且比使用鼠标更可取。如果您是 vim 爱好者并且尚未安装 Vimperator,我强烈推荐它。
当您深入挖掘命令行和 GUI 程序时,您会发现令人惊讶的是,其中很多程序至少支持 hjkl,即使没有更广泛的 vi 按键绑定。我在这里只列出了一些我最喜欢的程序,但是下次您打开一个程序时,按几次 j 键——当程序向下滚动时,您可能会感到惊讶。
Kyle Rankin 是旧金山湾区的高级系统管理员,并且是 O'Reilly Media 出版的多本书籍的作者,包括 Knoppix Hacks 和 Ubuntu Hacks。他目前是 North Bay Linux 用户组的主席。