作为更广泛的开源社区的参与者,更具体地说,作为 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 历史记录中调用命令但又想在再次执行命令之前编辑一些内容时,它们可能非常强大。
如果您熟悉 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 条评论