在ZSH中搜索当前行(vi模式)

时间:2013-04-05 15:17:10

标签: vim zsh

如何在zsh中的当前行内搜索/导航?例如,如果光标位于行的末尾..

// [] indicates cursor position
user@hostname: vim /etx/apache2/sites-enabled/defaul[t]

在vi普通模式下,我想使用向后搜索(?),键入etx并让光标像这样移动:

// [] indicates cursor position
user@hostname: vim /[e]tx/apache2/sites-enabled/default

但是,/?会映射到历史记录搜索,而不是内联搜索。 我知道我可以输入9b然后到达那里,但我发现搜索并移动到匹配比计算跳转的字数更容易。

不确定这是否清楚,请告诉我是否需要澄清事情。

5 个答案:

答案 0 :(得分:2)

我希望我理解你。您希望在zsh命令行中,在键入命令时更快地移动光标。

e.g。

user@hostname: vim /etx/apache2/sites-enabled/defaul[t]

您想要转到第一个e

我不使用vi绑定,但fF是您的朋友。

在该示例中,您可以5Fe向后移动到第5 e。如果您不想计算,可以Fe,然后按;,直到它移动到正确的位置。

检查vim帮助以获取详细信息:

:h f
:h F

对于此示例,更快的方式是0fe。将光标移至开头,然后移至e

如果我误解了你的问题,请留下评论,我会删除答案。

答案 1 :(得分:0)

此脚本将此功能添加到zsh: https://github.com/soheilpro/zsh-vi-search

答案 2 :(得分:0)

也许〜/ .inputrc文件已将这些键映射到奇怪的东西?或者您还没有完全理解搜索历史的工作原理。

让我们重新开始: 使用bindkey重新映射这些键:

bindkey -M vicmd "?" history-incremental-search-backward
bindkey -M vicmd "/" history-incremental-search-forward

现在,当你按下esc' (对于vi普通模式)和'?'你将获得一个bck-i-search命令:

%user@hostname: vim /etx/apache2/sites-enabled/defaul[t]
bck-i-search:

此时,您可以输入要搜索的内容,例如' EXT&#39 ;.并且,光标移动到该行中的该位置。注意:如果它在当前行中找不到该模式,它会继续搜索您的历史记录。此行为被视为一项功能!

您可能会注意到您无法重复搜索(例如在vim中按下' N')。在这种情况下,添加一些isearch绑定:

bindkey -M isearch '^N' history-incremental-search-backward
bindkey -M isearch '^R' history-incremental-search-forward

现在,按下control-N重复你的搜索,同时按下control-S反转重复搜索的方向(注意:此键绑定的默认顺序从前向后反转,因为一个更常见于结束历史回来)。

简而言之:将当前行视为' top'你的历史。使用vicmd' /'或'?'搜索整个历史记录。 '?'自上而下搜索,而' /'搜索光标当前位于历史记录中的顶部' top'。另一种思考方式是将历史记录视为一个大文件,并将当前行放在该文件的底部。如果这有助于你理解它,你可能会觉得'?'比' /'更有意义。

答案 3 :(得分:0)

我有同样的问题。我没有设法解决这个问题,但是找到了一个合适的工作方式:为 edit-command-line-line 函数添加了绑定,这使我进入$EDITOR,缓冲区中有当前行。可以轻松导航到给定的模式。

有关如何绑定功能的信息,请参见 / usr / share / zsh / functions / Zle / edit-commandline

答案 4 :(得分:-1)

当您处于shell的命令模式时键入v,您将被带到真正的ViM编辑器本身。保存后&退出后,它将自动执行。