jah*_*roy 32
你在谈论有史以来最伟大的功能!
您可以使用 vi 命令编辑 shell 命令(和命令历史记录),方法是将其添加到您的.bashrc
文件中:
set -o vi
您还可以从命令行运行该命令以仅影响您的当前会话。
如果您不使用 bash,请将适当的 rc 文件替换为您的 shell。
这允许您使用 vi 命令来编辑任何命令...
您还可以使用j和k在您的历史记录中移动(按 后ESC)。
您还可以使用/(点击 后ESC)来搜索旧命令。
换句话说,要找到cp
您十分钟前执行的超长命令:
ESC/cpENTER
然后,您可以通过您的历史记录所有匹配的指令周期n和N。
所有这些使我在命令行上的工作效率提高了 10 万亿倍!
Kei*_*son 12
如果您使用的是 bash,正如 jahroy 和 evil otto 已经回答的那样,您可以使用
set -o vi
Run Code Online (Sandbox Code Playgroud)
使 bash 使用 vi 风格的编辑命令。
完成此操作后,您可以键入Esc v以启动带有包含当前命令行副本的临时文件的 vi 编辑器。你可以编辑命令,甚至用多行替换它;当您保存文件 ( :wq
) 时,shell 将执行编辑的命令。
若你宁可
set -o emacs
Run Code Online (Sandbox Code Playgroud)
你可以Ctl-XCtl-E用来做同样的事情。它将使用您首选的编辑器$EDITOR
,不一定是 emacs。
(就我个人而言,我在大多数编辑中使用 vi(实际上是 vim),但我更喜欢set -o emacs
在 shell 中;切换插入模式和切换插入模式对于编辑文件非常有用,但对于交互式命令来说很尴尬。YMMV。)
小智 10
您可以使用set -o vi
@jahroy 发布的那样更改行编辑命令,但您可能正在考虑该fc
命令(可在 bash 中使用,我认为是 ksh,但可能不是 tcsh),它将把上一个命令放入编辑器(FCEDIT 或 EDITOR) ,您可能已将其设置为 vi),然后在您退出编辑器时执行该命令。请参阅联机帮助页或help fc
了解详细信息,或者只是尝试一下。
小智 6
要在 vim 中编辑最近使用的命令并在编辑器保存和退出后调用已编辑的版本,请使用fc
内置的 shell。没有任何参数,它将执行以下操作:
/tmp
并使用最近键入的命令填充它:cquit
)。命令在 bash 和 zsh 中都有效。
事实上,这实际上是有史以来最大的特点。还有更多:
创建一个名为
.editrc
Run Code Online (Sandbox Code Playgroud)
包含行
bind -v
Run Code Online (Sandbox Code Playgroud)
Editline是一个 BSD 许可版本库,提供类似 readline 的服务。该 .editrc 将在 MySQL 的命令行 shell 或任何不使用 readline 的应用程序中将您的键绑定设置为 vi 模式。
随着岁月的流逝,我变得有些健忘,所以我的 .zshrc为 vi 模式提供了一些包装器,以显示我在命令行中所处的模式。这真好。
我知道在 zsh 中你可以输入
bindkey -L
Run Code Online (Sandbox Code Playgroud)
并获取键绑定列表。我敢肯定 bash 必须有类似的东西。并非所有 vi 键都默认绑定。将它们绑定到您认为合适的方式,然后您就可以参加比赛了。