我想找到ctrl + R的替代方式来搜索bash中的历史记录。我可以在bash中启用vi模式,但是无法进行搜索。当我执行/search?search时,没有任何反应。还有什么我需要强调的吗?我尝试按Enter键,然后发生这种情况:

$ set -o vi
$ ls|grep f
$ /gr
-bash: /gr: No such file or directory
$


评论

真的在vi模式下对您的阅读行不起作用吗?最新版本的bash对我来说效果很好。

@ D.BenKnoble是的,但是我认为是emacs模式,我想学习vi模式。

只是递归搜索;不确定它与emacs vs vi有什么关系,尤其是因为它可能是bash特定的扩展(我的记忆在那个细节上很模糊)。我不会阻止您使用/,只是每个人都有其(不同的)用途。

#1 楼

在bash / readline中肯定有Vim样式搜索。实际上,您的命令行实质上是Vim编辑器的缩小版本,具有大量可用的Normal模式命令。在几秒钟内,但首先进行搜索。您需要的关键信息是,当您盯着命令行上闪烁的光标时,您将处于Vim的插入模式下。那么,如何进入普通模式?通过点击Esc,当然。

从此处打/,输入搜索词,然后按Enter。现在,您可以使用n和N在结果之间来回移动。 (默认情况下,您将使用n有效地向后搜索...从头开始向前搜索不会得到任何结果,因为将来没有历史记录!)要以命令的形式执行当前结果,请再次按Enter。

不要忘了您处于普通模式,因此,如果您找不到要查找的内容并想回到在插入模式下输入文本,请执行在Vim中通常执行的操作。例如,击中我就可以做到。或者,您可以使用Vim命令C,它将删除光标后的所有文本并进入“插入”模式,这很方便。 (如果将光标移到第一列之前,可以在0之前添加。)或使用AaRssICtrl-C ...您会得到图片。

您可以使用bBeEwW0$等导航进入进入插入模式的各种命令。Yank/ delete / put也在那里,您可以在动作中使用它们导航命令,例如yBc2ed$等1。最后,u ndo也可以工作!继续尝试自己尝试其他一些东西。

哦,如果您迷路了,或者像我偶尔遇到的那样,换行有些时髦,扰乱了您的c / l,您可以丢下假装,然后按一下v。这会将命令行的内容拖入Vim的实际实例中,因此您可以使用Fully Armed and Operational Text Editor进行编辑。完成后,请:wq将您拥有的内容提交给shell以执行。但是,@ EdNeville在下面的评论中有一个指向一些readline设置的链接,这些设置似乎会添加那里的每个op-motion命令以及许多其他命令。通过将它们添加到您的.inputrc文件中,您可以真正完善基于命令行的Vim体验。您可以使用任何可用的readline命令。我相信caw即使在Vim模式下也应该可用,但如果没有,您可以尝试将其放入您的dis ...像这样的命令

set editing-mode vi
"\C-r": reverse-search-history
"\C-s": forward-search-history


这样,一旦您从历史记录中选择了一个命令(例如,通过Vim搜索),请按yap而不是set -o vi,Bash将运行该命令并插入历史记录中的下一条命令,即可运行。

有关完整列表,请参见Bash手册页中的“ Readline命令名称”部分。

(您也可以在命令行中使用set -o emacs命令,但是我已经在这里太远了。)

评论


真好一个学习的时刻。

–格伦·杰克曼
18年5月31日在0:51

@niklas,这是您的答案

–格伦·杰克曼
18年5月31日在0:51

@glennjackman我大量使用了此功能。对我真的有用。

– B层
18年5月31日在0:53

@NiklasRosencrantz是的,我了解。我们尝试编写通常有用的答案,而不仅仅是关注发问者,因此我添加了有关混合来自不同模式的命令的额外信息。

– B层
18年5月31日,2:12

如果您修改.inputrc,也可以添加ciw之类的内容:usenix.org.uk/content/bash.html#input

– Ed Neville
20 Mar 5 '20 at 18:21

#2 楼

@ B-Layer提到的内容在bash中和在zsh中都非常有效。 neovim中的默认终端。

然后,您可以使用vim命令导航端子的输出,以及导航终端命令的历史记录。

参考文献


http://vimcasts.org/episodes/neovim-terminal/
https://neovim.io/doc/user/nvim_terminal_emulator.html
https://github.com/ vim / vim / blob / master / runtime / doc / terminal.txt