Answers:
您正在谈论有史以来最伟大的功能!
通过将vi命令添加到.bashrc
文件中,可以使用vi命令来编辑Shell命令(和命令历史记录):
set -o vi
您也可以从命令行运行该命令,以仅影响当前会话。
如果您不使用bash,请为您的shell替换适当的rc文件。
这使您可以使用vi命令来编辑任何命令...
您还可以使用j和k浏览历史记录(按ESC)。
您还可以使用/(单击以后ESC)搜索旧命令。
换句话说,要找到cp
您十分钟前所做的超长命令:
ESC/cpENTER
然后,您可以通过您的历史记录所有匹配的指令周期n和N。
所有这些使我在命令行上的生产力提高了10万亿倍!
vi bindings in the shell
有史以来最伟大的功能!
jj
与ESC
我们平时在vim吗?
如果您使用的是bash,如jahroy和evil 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中使用;切换插入模式和退出插入模式对于编辑文件非常有用,但对于交互式命令则比较尴尬。)
set -o emacs
不做你想要的吗?
您可以使用set -o vi
@jahroy发布的方式来更改行编辑命令,但是您可能正在考虑该fc
命令(在bash中可用,我认为是ksh,但可能不是tcsh),它将先前的命令放入编辑器中(FCEDIT或EDITOR) ,您可能已将其设置为vi),然后在退出编辑器时执行命令。请参见手册或help fc
以获得详细信息,或者尝试一下。
alias r='fc -e -'
是重新运行先前命令的宝贵别名。 fc
我相信,它本身起源于Korn Shell。您可以按编号指定命令(fc 123 129
以编辑历史记录中的命令编号123至129)。您可以指定相对编号(fc -10 -1
以编辑最后输入的10个命令)。您可以使用列出以前的命令fc -l
。您可以使用r
别名加上前缀来指定命令(r make
运行最后一次调用make
;r m
如果mv
自上次运行以来没有运行过命令make
,则也是如此)。
确实,这实际上是有史以来最伟大的功能。还有更多:
创建一个名为
.editrc
包含线
bind -v
Editline是BSD许可的版本库,提供类似于readline的服务。该.editrc将在MySQL的命令行外壳程序或任何不使用readline的应用程序中将键绑定设置为vi模式。
随着时间的流逝,我变得有些健忘,所以我的.zshrc 为vi模式提供了一些包装,以向我展示我在命令行中处于哪种模式。这真好。
我知道你可以在zsh中键入
bindkey -L
并获取绑定列表。我确定bash一定有类似的东西。默认情况下,并非所有的vi键都是绑定的。将它们绑定到您认为合适的位置,即可开始比赛。
在您的终端中,键入
export EDITOR=vi
。
保存此设置。将此行放在文件〜/ .profile中
$EDITOR
)设置为vi
。它不允许您使用vi
(至少不能直接)编辑shell命令。
$EDITOR
包含,则@KeithThompson Zsh默认为vi编辑模式vi
。我认为这是唯一可以做到这一点的外壳。