作为更广泛的开源社区的参与者,更具体地说是 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 条评论