在 UNIX 中使用 VI 键编辑 shell 命令

在 UNIX 中使用 VI 键编辑 shell 命令

我曾经有一个同事非常擅长 UNIX。

他向我展示了如何使用 Vi 键绑定来编辑 shell 命令。

他将该命令放在一个文件中,每次我登录时都会运行该文件。

从那时起,我就转向了另一个项目。

不幸的是我不记得如何设置它。

这里有人知道如何使用 Vi 键绑定在终端中编辑命令吗?

我怎样才能使该设置永久有效?

答案1

您正在谈论有史以来最伟大的功能!

您可以使用 vi 命令来编辑 shell 命令(和命令历史记录),方法是将以下内容添加到文件中.bashrc

set -o vi

您还可以从命令行运行该命令以仅影响当前会话。

如果您不使用 bash,请将适当的 rc 文件替换为您的 shell。


这允许您使用 vi 命令来编辑任何命令...

您还可以使用jk浏览历史记录(按 后ESC)。

您还可以使用/(点击 后ESC)来搜索旧命令。

换句话说,要找到cp您十分钟前执行的超长命令:

ESC/CPENTER

n然后您可以使用和循环浏览历史记录中的所有匹配命令N

所有这些使我的命令行工作效率提高了 10 万亿倍!

答案2

如果您使用的是 bash,正如 jahroy 和邪恶的 otto 已经回答的那样,您可以使用

set -o vi

使 bash 使用 vi 风格的编辑命令。

完成此操作后,您可以键入Esc v以启动 vi 编辑器,其中包含包含当前命令行副本的临时文件。您可以编辑该命令,甚至可以将其替换为多行;当您保存文件 ( :wq) 时,shell 将执行编辑的命令。

如果你更喜欢

set -o emacs

你可以用来Ctl-XCtl-E做同样的事情。它将使用您首选的编辑器$EDITOR,不一定是 emacs。

(就我个人而言,我使用 vi(实际上是 vim)进行大部分编辑,但我更喜欢set -o emacs在 shell 中;切换插入模式对于编辑文件来说非常有用,但对于交互式命令来说很尴尬。YMMV。)

答案3

您可以使用set -o vi@jahroy 发布的内容来更改行编辑命令,但您可能会想到该fc命令(在 bash 中可用,我认为是 ksh,但可能不是 tcsh),它将把上一个命令放入编辑器中(FCEDIT 或 EDITOR) ,您可能已将其设置为 vi),然后在退出编辑器时执行该命令。请参阅联机帮助页或help fc了解详细信息,或者只是尝试一下。

答案4

事实上,这实际上是有史以来最伟大的功能。还有更多:

创建一个名为

.editrc

包含该行

bind -v

编辑线,是一个BSD许可版本库,提供类似readline的服务。该 .editrc 将在 MySQL 的命令行 shell 或任何不使用 readline 的应用程序中将您的键绑定设置为 vi 模式。

随着岁月的流逝,我变得有些健忘,所以我的 .zshrc来源一些包装器对于 vi 模式,显示我在命令行中所处的模式。这真好。

我知道你可以在 zsh 中输入

bindkey -L

并获取按键绑定列表。我确信 bash 一定有类似的东西。默认情况下,并非所有 vi 键都已绑定。按照您认为合适的方式绑定它们,然后您就可以开始比赛了。

相关内容