作为更广泛的开源社区的参与者,更具体地说是 Fedora 项目 的成员,我有机会与许多人会面并讨论各种有趣的技术话题。我最喜欢的话题之一是“命令行”,或 Shell,因为了解人们如何熟练地使用 Shell 可以让你深入了解他们的思维方式、他们偏爱的工作流程,以及在某种程度上是什么让他们充满活力。许多开发人员和系统运维人员在互联网上公开分享他们的“点文件”(他们 Shell 配置文件的一种常用俚语),这带来了有趣的协作机会,让每个人都可以从经验丰富的命令行老手那里学习技巧和窍门,并分享常用的快捷方式和生产力提升工具。
我将在这里向您介绍一个技巧,展示 Shell 的 vi 模式。
在庞大的计算和操作系统生态系统中,有 许多 Shell。然而,在 Linux 世界中,事实上的标准已成为 bash,并且在撰写本文时,它是所有主要 Linux 发行版上安装的默认 Shell。因此,那是我今天要谈论的 Shell。但需要注意的是,bash 在其他 UNIX 风格的操作系统上也是一个相当流行的选择,因此它很可能离您不远(对于 Windows 用户来说,始终有 cygwin)。
在探索 Shell 时,您首先要做的是在其中键入命令,并且通常会获得输出,如下所示
$ echo "Hello World!"
Hello World!
这是常见的做法,可能是每个阅读本文的人都做过的事情。新手和初学者可能没有意识到的是,bash Shell 的默认输入模式是 Emacs,这意味着您将在命令中执行的所有行编辑功能都将使用 “Emacs 风格”的键盘组合。(对于那些对细节感兴趣的人来说,行编辑的功能实际上是由 GNU Readline 执行的。)
例如,如果您键入了 echo "Hello Wrld!" 并且意识到您想快速跳回一个单词(空格分隔)来修复该错别字,而无需按住向左箭头键,那么您将同时按下 Alt+b 键,光标将向后跳到 W。
$ echo "Hello Wrld!"
^
Cursor is here.
这仅使用了 Shell 用户可用的众多 Emacs 键盘组合之一。还有许多其他组合可用于各种操作,例如复制文本、粘贴文本、删除文本以及使用快捷方式编辑文本。使用复杂的键盘组合并将其记在脑海中可能看起来很傻,但是当处理较长的命令或从 Shell 历史记录中 recalling 命令但又想在再次执行命令之前编辑一些内容时,它们可能非常强大。
如果您熟悉 Emacs 文本编辑器,或者发现 Emacs 键绑定使用起来很方便,那么 Emacs 键绑定就非常棒了,但有些人更习惯使用“vi 风格”的键盘绑定,因为他们在 vi 文本编辑器中花费了大量时间(通常通过 vim 或 nvim)。bash Shell(同样通过 GNU Readline)能够为我们提供此功能。为了启用它,您运行命令 $ set -o vi。
就像魔术一样,您现在处于 vi 模式,可以轻松地使用 vi 风格的按键绑定进行行编辑,以便复制文本、删除文本以及在文本行中的不同位置之间跳转。这在功能方面与 Emacs 模式没有太大区别,但您与 Shell 交互以执行这些操作的方式发生了变化,这根据您的具体偏好是一个强大的选择。
让我们看一下与之前相同的示例,但在您进入 Shell 的 vi 模式后,您处于 INSERT 模式的上下文中,这意味着您可以像以前一样键入命令,但您现在可以点击键盘上的 Esc 键,您将进入 NORMAL 模式,您可以在其中自由导航并进行文本修改。
查看与之前相同的示例,如果您键入了 echo "Hello Wrld!" 并且意识到您想跳回一个单词(同样,空格分隔)来修复该错别字,那么您将点击 Esc 以从 INSERT 模式更改为 NORMAL 模式。然后您可以键入 B(对于在家跟随的读者,Shift+b),这将使光标向后移动,就像之前一样。(有关 vi 模式的更多信息,请访问 此处。)
$ echo "Hello Wrld!"
^
Cursor is here.
现在,对于 vi/vim/nvim 用户来说,当您意识到始终将您尝试和真实的键盘快捷键放在手边,而不仅仅是在编辑器中编写代码或文档时,这希望是一个有趣的“啊哈!”时刻。如果这对您来说都是新鲜事物,并且您想了解更多信息,那么我建议您访问这个 交互式 vim 教程,看看您是否觉得 vi 风格的文本编辑对您有用。
如果您喜欢在这种模式下与 Shell 交互,您可以通过编辑主目录中的 ~/.bashrc 文件并在底部添加以下行来持久设置它。
set -o vi
对于 emacs 模式用户,希望这是一个快速而有趣的“另一面”的 Shell 的了解。归根结底,我认为每个人都应该使用任何使他们最具生产力的编辑器和 Shell 行编辑模式,如果那是 vi 模式,并且这篇文章对您来说是新闻,那么恭喜您!现在去努力工作,提高生产力吧。
祝您编码愉快...
10 条评论