我曾经有一个同事非常擅长 UNIX。
他向我展示了如何使用 Vi 键绑定来编辑 shell 命令。
他将该命令放在一个文件中,每次我登录时都会运行该文件。
从那时起,我就转向了另一个项目。
不幸的是我不记得如何设置它。
这里有人知道如何使用 Vi 键绑定在终端中编辑命令吗?
我怎样才能使该设置永久有效?
答案1
您正在谈论有史以来最伟大的功能!
您可以使用 vi 命令来编辑 shell 命令(和命令历史记录),方法是将以下内容添加到文件中.bashrc
:
set -o vi
您还可以从命令行运行该命令以仅影响当前会话。
如果您不使用 bash,请将适当的 rc 文件替换为您的 shell。
这允许您使用 vi 命令来编辑任何命令...
您还可以使用j和k浏览历史记录(按 后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 键都已绑定。按照您认为合适的方式绑定它们,然后您就可以开始比赛了。