在zshI can do Esc hfor any command 中,获取此命令的手册页,退出手册页并使用所有参数返回我的命令。例如在我的 shell 中输入:
zsh# tar -czvf docs.tgz docs
Run Code Online (Sandbox Code Playgroud)
我可以tar通过按Esc h, 将光标放在任何位置来呼叫 man 。
现在,我想要同样的东西,但在 bash 中。下面显示了一种可能的解决方案,但我想知道是否还有其他解决方案。
bind '"\eh": "\C-a\ef\C-k\C-f\C^Cman \C-y\C-m\C-y\C-y\ey"'
Run Code Online (Sandbox Code Playgroud)
当我们谈论命令行操作时,我们实际上谈论的是 readline 库。更新 readline 绑定可以从命令行完成,如您的示例所示,在 readline 的主 init 文件中/etc/inputrc(使用 进行检查echo $INPUTRC),或者为您的帐户创建一个本地 init ~/.inputrc。如果您还没有查找 GNU readline 库(请在此处尝试)
话虽如此,以下是针对您的问题的一些建议:
建议1
\ehzsh 检查帐户下 ESC-h ( ) 的键绑定,并使用 bash 将该绑定复制到您的帐户中。一些非常聪明的人已经将这些绑定放在一起,并且无需任何调整就可以工作。
bind -P[使用小写 p 开关进行原始绑定输出])查看 zsh 帐户中的活动绑定。建议2
在这一点上,你上面的例子可以工作,但它需要一些调整。这对我有用
"\eh": "\C-a\C-kman \e1\e.\C-m\C-y\M-y"我将绑定放在 /etc/inputrc 中。您必须在命令行中使用按键序列重新读取 inputrc ctrl+x ctrl+r。
但是,您的问题是如何对光标下的单词执行此操作。这对我有用:
"\eh": "\ef\eb\ed\C-y\e#man \C-y\C-m\C-p\C-p\C-a\C-d"简而言之,它的工作原理如下:
对于按键序列\eh(ESC+h)
\ef\eb)\ed\C-y)。我们需要将其放入终止缓冲区中。\e#)\C-y\C-m)\C-p\C-p)。\C-a\C-d)建议3
注意:我之前没有尝试过将此选项实现为绑定,但我确实在命令行中使用它。您可以通过 inputrc 文件或 bashrc 进行设置。
set editing-mode viset -o vi进行绑定的过程似乎与默认的 readline 键序列类似。但建议 2 中的示例应该会让您走上正确的道路。