vim
中花费了大量时间,因此我想购买Happy Hacking键盘。通过按Ctrl + R并开始重复我以前的命令。是否有一种简单的方法可以在没有箭头键的UNIX终端中模拟Up + Enter?
#1 楼
使用csh
或任何实现类似csh
的历史记录替换的外壳程序(tcsh
,bash
,zsh
):!!
然后输入。 >然后输入。
或按Ctrl + P,输入
魔术空间
此外,请注意,
!!
和!-1
不会自动为您展开,直到执行它们(可能为时已晚)。如果使用
bash
,则可以将bind Space:magic-space
放入~/.bashrc
中,然后在命令后按空格键将它们自动内联扩展,允许您在执行之前检查它们。这对于前一段时间运行的命令的历史记录扩展特别有用,例如!echo
将拉起从echo
开始的最后一个命令。有了魔术空间,您可以在命令运行之前对其进行预览。相当于在
bindkey ' ' magic-space
或tcsh
中执行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(包括ksh
,zsh
,bash
,yash
),您还可以使用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
的历史记录替换的外壳程序(tcsh
,bash
,zsh
),您还可以使用!<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
。
评论
您应该使用您使用的外壳替换终端标签。@illuminÉ没有鼠标...
2006年快乐的Hacking Keyboard键盘是否没有停产?
@PeterMortensen不,它仍然可用。您可能是指第一个版本,但较新的型号仍然可用。