以如下命令片段为例:
[root@c4-infra02 ~]# kubectl get all -n 1234 | grep mq
No resources found.
[root@c4-infra02 ~]# echo 1
1
[root@c4-infra02 ~]# echo 2
2
[root@c4-infra02 ~]# echo 3
3
[root@c4-infra02 ~]# kubectl get all -n 1234
No resources found.
[root@c4-infra02 ~]#
[root@c4-infra02 ~]#
[root@c4-infra02 ~]#
[root@c4-infra02 ~]# kubectl get all -n 1 # 按 PageUp
假设已经执行了五条命令,现在我想简单快速地跳转到第一条命令kubectl get all -n 1234 | grep mq
,我在我个人的 Window 本上( ssh 客户端软件用的 MobaXterm ),我通常是这么做的:
kubectl get all -n 1
(其实可以更短一些,本文中的例子只是跳过三条 echo 的话甚至只打一个k
就行)PgUp
直接以kubectl get all -n 1
开头的命令进行自动补全,从而跳过那几个 echo 命令,很快到达kubectl get all -n 1234 | grep mq
(实际上此时的PgUp
和CRTL+R
已经很像了)。首先排除CRTL+R
和history+grep
,因为我的核心目的是想知道下述叙述中PgUp
的代替是什么(如果确实有这种代替的话)。然后CRTL+P
或者等价的键盘↑
是无法跳过那三条 echo 的,所以也不算。
问此问题的原因:我忘了单位的 Mac 是没有PgUp
还是按了PgUp
不管用,反正肯定是达不到跟我个人的这个 Windows 本一样的效果(用CRTL+R
达到该效果除外)。另外不确定是不是 ssh 客户端自带的属性,因为 Mac 下无法用 MobaXterm,我用的是原生的和 FinalShell 。
感谢回答先~
1
000o000 2020-03-23 00:32:13 +08:00 via Android
zsh 有这个功能
|
2
Judoon 2020-03-23 10:52:10 +08:00
这个快捷键和 linux 没关系,是终端模拟器和 shell 的
oh-my-zsh + zsh-autosuggestions |
3
Judoon 2020-03-23 10:52:37 +08:00
这个快捷键和 linux 没关系,是终端模拟器和 shell 的
oh-my-zsh + zsh-autosuggestions 直接根据历史命令补全 |
4
julyclyde 2020-03-23 14:50:38 +08:00
ctrl+R 是 readline 快捷键吧
|
5
BIAOXYZ OP @Judoon #3 但是我没有用 zsh 啊。我也觉得不是 linux 原生的,看来除了 ctrl+r 或者换其他终端,应该没别的办法。
|
6
BIAOXYZ OP @julyclyde #4 我其实以前一直不知道是 readline 提供的~后来搜了下还发现了这个: https://readline.kablamo.org/emacs.html
有个`Alt-p Search backward through history for a given string.`,看起来有点像我要的功能,但是试了试还是不太一样。谢谢了哈 |
7
aloxaf 2020-03-24 13:11:57 +08:00 1
zsh 和 bash 都支持 history expansion
你可以输入 `!n` 执行第 n 条命令、`!-n` 执行倒数第 n 条命令,或者太难数行数的话也可以用 `!?str` 执行最近的包含 str 的命令 你图中的例子只需要执行 `!?grep` 就能定位到第一条命令了。 参考: https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html#Event-Designators |
8
aloxaf 2020-03-24 13:26:51 +08:00
顺便 PageUp 不管用可能是因为不同 Terminal Emulator 发送的转义序列不同,你可以重新绑定一下
bind '"转义序列": history-search-backward' 转义序列通过先按 C-v 再按对应的按键得到 |