【问题标题】:Alt+number+dot and Alt+comma in Zsh and BashZsh 和 Bash 中的 Alt+数字+点和 Alt+逗号
【发布时间】:2016-04-06 21:35:38
【问题描述】:

在 Bash 中,我们可以使用 Alt+number+. 来选择前面的第 n参数命令,和 Alt+, 选择以前的命令。他们在历史中循环。

例如:

$ ls 1 2
$ echo 10 20

现在按住 Alt,然后按 0 再按点,它会显示“回声”。不松开Alt,再按.,会显示“ls”。在同一操作中使用 1 将显示 10 和 1 等。按 Alt 和逗号在历史记录中显示整个命令行。 Alt. 还显示历史命令的最后一个参数。

请注意,所有这些操作只是将参数(或整个命令行)插入到当前光标。它们不会更改当前命令行中已有的内容。

我正在使用 Zsh 和最新的 Oh-My-Zsh 包,但似乎行为不同:

  • Zsh 有 Alt+, 来显示命令的最后一个参数。

  • Alt+0+. 与 Bash 相同(显示命令),但 Alt+number+. 显示最后第 n 个参数,即 Alt +1+. 在上面 案例显示 20 和 2。

  • Alt+, 不显示历史中的全部命令。

如何在 Zsh 中做同样的事情?谢谢。

【问题讨论】:

  • Alt-comma 默认情况下不会绑定到我知道的任何内容。 “历史中的最后一个命令”的默认绑定是 ctrl-p (如果你走得太远,ctrl-n 是历史中的下一个命令等)。 (例如,参见 bash 手册中的 Commands for History。)bind -q previous-history 为您输出什么? (我得到previous-history can be invoked via "\C-p", "\eOA", "\e[A".
  • zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html。了解zlebindkey。 ZLE 比 bash/readline 更强大且可定制得多,这是我唯一要说的。
  • Ctrl-p 和 Ctrl-n 的工作方式与 Bash 相同。他们只是用历史记录中的最后一个/下一个命令替换当前命令行。我想我必须学习 zle 和 bindkey。只是很惊讶没有这些有用的快捷方式。

标签: bash keyboard-shortcuts zsh oh-my-zsh


【解决方案1】:

在寻找这个功能时,我遇到了 Christian Neukirchen 的 this blogpost

1。你可能知道M-。插入上一行的最后一个参数。有时,您想插入不同的参数。有几个选项:使用历史扩展,例如!:-2 表示前一行的第三个单词(如果不确定,请使用 TAB 扩展它),或使用 M-。带前缀参数:M-2 M-。

更好的是:

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[m" copy-earlier-word

然后,M-m 将复制当前行的最后一个单词,然后是倒数第二个单词,依此类推。但是使用 M-。你也可以回去排队!因此:

% echo a b c
% echo 1 2 3
% echo <M-.><M-.><M-m>
% echo b

伙计,我希望我早点知道!

在本文中,M 指的是Meta 键,即Alt。因此,正如 Christian 所说,理论上这应该是开箱即用的。所以我去试试这个,是的,它确实开箱即用。

负责此行为的zle小部件是insert-last-word─即ALT+.─和digit-argument─即ALT+Number

这是相关的bindkey 输出:

$ bindkey -L | grep '\^\[[.0-9]'
bindkey "^[." insert-last-word
bindkey "^[0" digit-argument
bindkey "^[1" digit-argument
bindkey "^[2" digit-argument
bindkey "^[3" digit-argument
bindkey "^[4" digit-argument
bindkey "^[5" digit-argument
bindkey "^[6" digit-argument
bindkey "^[7" digit-argument
bindkey "^[8" digit-argument
bindkey "^[9" digit-argument

所以请检查这些是否出现并重试。您可以使用显示的bindkey 命令的输出来更新您的原始问题,以帮助缩小问题范围,或者直接在oh-my-zsh 中打开一个带有详细信息的问题。

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 2013-09-26
    • 2020-04-16
    • 2011-06-14
    • 2018-12-15
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多