如何在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
然后到达那里,但我发现搜索并移动到匹配比计算跳转的字数更容易。
不确定这是否清楚,请告诉我是否需要澄清事情。
答案 0 :(得分:2)
我希望我理解你。您希望在zsh命令行中,在键入命令时更快地移动光标。
e.g。
user@hostname: vim /etx/apache2/sites-enabled/defaul[t]
您想要转到第一个e
我不使用vi绑定,但f
和F
是您的朋友。
在该示例中,您可以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编辑器本身。保存后&退出后,它将自动执行。