我知道我可以使用Up来遍历先前的命令。运行最后一个命令仅涉及Up + Enter。但是,由于我在vim中花费了大量时间,因此我想购买Happy Hacking键盘。通过按Ctrl + R并开始重复我以前的命令。

是否有一种简单的方法可以在没有箭头键的UNIX终端中模拟Up + Enter?

评论

您应该使用您使用的外壳替换终端标签。

@illuminÉ没有鼠标...

2006年快乐的Hacking Keyboard键盘是否没有停产?

@PeterMortensen不,它仍然可用。您可能是指第一个版本,但较新的型号仍然可用。

#1 楼

使用csh或任何实现类似csh的历史记录替换的外壳程序(tcshbashzsh):
!!

然后输入。 >然后输入。

或按Ctrl + P,输入

魔术空间
此外,请注意,!!!-1不会自动为您展开,直到执行它们(可能为时已晚)。
如果使用bash,则可以将bind Space:magic-space放入~/.bashrc中,然后在命令后按空格键将它们自动内联扩展,允许您在执行之前检查它们。这对于前一段时间运行的命令的历史记录扩展特别有用,例如!echo将拉起从echo开始的最后一个命令。有了魔术空间,您可以在命令运行之前对其进行预览。
相当于在bindkey ' ' magic-spacetcsh中执行zsh

评论


@Arman很高兴提供帮助。有很多历史扩展命令;该链接列出了其中一些。我已经编辑了一些有关魔术空间的信息,这些信息可能会有助于某些方法的使用。

– Sparhawk
2014年7月31日下午4:01

魔术空间是一种不错的选择!

–fduff
2014年7月31日在7:10

还有shopt的histverify选项,这将使readline进行历史记录扩展,但在第一次按Enter键时不执行命令。这将使您评估结果并决定是否要运行该结果。

– Etan Reisner
2014年7月31日13:33

从来不明白为什么!比CTRL-P使用得多。 CTRL-P使您可以在执行命令之前先查看该命令-甚至可以对其进行修改。我总是觉得自己正在用!!掷骰子。

–abonet
2014年8月5日21:30

@abonet我刚刚发现的另一种用途!正在就地使用其扩展。例如sudo !!。

– Sparhawk
2014年8月7日在2:40

#2 楼

大多数具有命令行编辑功能的外壳程序都支持Emacs按键绑定。 (一个很小的子集) 。
然后,例如,您可以


使用EsckEnter
重新执行上一个命令(与set -o vi相同)。
减号键-也可以用作“上移”命令。 />使用Esc和运动命令
(即k,适当重复),
,然后编辑在那里找到的bash命令行。
请记住,您仍将处于~/.bashrc命令模式,
,因此您将需要使用!!编辑命令
(例如,I,A,C,R,
或一个的小写字母)
以便从历史记录中实际添加到命令中。一行
并将其粘贴(放置)在另一行上,
这样您就可以完成与!-12相当的结果。
(不幸的是,它似乎不支持命名缓冲区。)


评论


我知道与终端的emacs关系...但是vi技巧很棒!!!

– Dox
2014年8月6日20:06

我在Zsh中删除Ctrl + u

–要
18年1月11日在21:08

这是由readline库实现的。其他快捷方式可以在其文档中找到。

–蜘蛛
18年2月18日在18:38

这是我一直在寻找的答案!

–穆罕默德·本·尤斯拉特(Muhammad bin Yusrat)
20/12/29在20:10

#3 楼

我最喜欢的一个是CTRL + P,然后是CTRL + O

,这在默认情况下有效,不需要额外的配置。 ^ P将使您切换到最后一个命令,而^ O将使您执行当前行

请注意,CTRL + O可以根据需要使用多次。

评论


^ O在我的Mac上不执行任何操作。

–雪崩
18年7月14日在22:59



@Snowcrash试试^ J

–雏菊
18年7月20日在5:48

即使我之前做过ls或pwd,它也只是回显空白行。

–雪崩
18年7月20日在8:54

@Snowcrash是^ P然后^ J ...

–雏菊
18年7月20日在9:05

Ctrl + P在HP-UX上不起作用(我不知道它使用的是哪个Shell)。解决方法是调用“ zsh”。

– Peter Mortensen
18年7月31日在11:35



#4 楼

当然!既然您习惯了vi按键绑定,为什么不配置您的外壳来响应它们呢?对于bash,请将其放入您的~/.inputrc中: br /> zsh甚至会为您检测到此问题:如果您的启动脚本都不使用bindkey强制一种编辑方式,或者如果您的$EDITOR环境变量包含vi,那么它将自动启用vi绑定。如果需要强制使用,请将其放入您的~/.zshrc中:

ALSO:大多数外壳程序中的默认外壳程序绑定是emacs绑定,因此实际上Crtl-P和Ctrl-N应该已经可以工作而无需更改任何内容。

#5 楼

使用任何实现了User Portability选项的POSIX Shell(包括kshzshbashyash),您还可以使用fc命令: br />
fc -e : -1


更多信息,请参见乔纳森·莱弗勒(Jonathan Leffler)的历史记录回答。

#6 楼

我发现我经常需要以超级用户身份重做命令,因此

sudo !!


重做上一个命令,就像我记得首先键入sudo一样。

评论


我真的很喜欢,对“授权被拒绝”看起来也很好。 “我是说sudo ffs!”

– Viktor Mellgren
2014年8月1日在11:20

#7 楼

对于所有Mac iterm2用户:

您可以将⌘+ R绑定到0x0C 0x10 0x0d。这将清除终端并运行最后一条命令。



评论


有什么方法可以在不清除终端的情况下重复上一条命令吗?

–卢克·戴维斯(Luke Davis)
18年1月16日在1:41

啊,没关系:对于任何阅读此内容的人,要在不清除终端的情况下重复操作,请使用0x10 0x0d(即省略0x0C)。

–卢克·戴维斯(Luke Davis)
18年1月16日在1:42

#8 楼

使用csh或任何实现类似csh的历史记录替换的外壳程序(tcshbashzsh),您还可以使用!<beginning of command>调用以<beginning of command>开头的最后一个命令。 >
$ tail file.txt
$ less otherfile.txt
$ !ta


!ta将执行tail file.txt

评论


这个答案def需要更多的注意!

–vdegenne
20年1月29日在2:29

#9 楼

ksh外壳程序具有默认别名r,该别名重复最近的命令。它与fc -s绑定:

alias r='fc -s'

bash的fc文档(help fc以及手册本身)甚至提到了这一点,但这不是该外壳程序中的默认别名:


与此配合使用的有用别名是r='fc -s',因此键入r cc
运行以cc开头的最后一条命令,并键入r重新执行br />最后一个命令。


bash中,即使您已经用set +H关闭了历史记录扩展,这也将起作用。有一个内置的zsh,据记载与r相同。

fc -e -实用程序是POSIX标准实用程序。

#10 楼

tl; dr !!只是将最后一个命令附加到当前命令之后。 <backtick>!!<backtick>执行最后一条命令并将输出附加到当前命令。

实际上有2种变体:


最后一条命令本身
结果最后一个命令的内容

让我向您展示2个示例:

示例1 ,我正在执行命令,基本上只是追加最后一条命令。

另一种变化形式

示例2

评论


为vi`!!`+1。很有用

–le_daim
19年8月12日在12:24



#11 楼

当我使用良好的xterm模拟器时,例如油灰,我最喜欢的处理方法是选择包含换行符的命令,将其复制到剪贴板,然后在鼠标上单击鼠标右键将其粘贴。单击即可重复该命令。
这对于用分号分隔的命令序列也可以正常工作。

#12 楼

您可以使用!n在终端中执行第n条命令。
其中'n'是history命令的行号。

评论


哪个壳膨胀!到最后一条命令?你确定你没有把它混在一起! (其他答案已经涵盖了该内容)?

– Anthony Geoghegan
18年2月18日在16:53

抱歉,实际上我当时正在尝试此命令。请检查编辑后的答案。 @AnthonyGeoghegan

–拉维·塞夫塔(Ravi Sevta)
18-2-18在17:45



这是我一直在寻找的捷径。谢谢!

–le_daim
19年8月12日在12:23

#13 楼


键入“历史记录”并记下要执行的命令前面的编号
执行并使用!number
您还可以使用!-1(1是最后执行的命令,请替换
使用从下面执行操作时得到的计数值
将最后执行的结果保持为1)

!-2(倒数第二等等)


#14 楼

您可以在几层中询问最后一条命令。

行编辑器

行编辑器(在其中键入命令)由ksh直接提供, bash中的库readline,zsh中的库zle。其他外壳程序(例如破折号)可能没有编辑库来理解此键(除非启用--with-libedit选项进行编译)。

在ksh,bash和zsh中工作: Ctrl-P#Emacs模式(上一个)Ctrl-N#Emacs模式(下一个)ESC-k#vi模式ESC进入命令模式,k表示向上ESC-j#vi模式ESC进入命令模式,j表示向下

history

许多shell提供的历史系统允许扩展一些快捷方式:

!!    # bash and zsh, may be provided by `alias \!\!='fc -e -'` in ksh.
!-1   # bash and zsh only


命令
/>
有一些命令可以检索历史命令。

像冗长的命令(仅用于打印):

history 2 | head -n-1


或更旧的,因此通常更便于移植的fc命令(直接重新执行): fc的此类选项。如果只想打印命令,请使用:fc -s -1。要编辑,请将fc -nl -1 -1设置为tex t编辑器(例如ex,ed,emacs,vi等),然后直接使用fc:FCEDIT