我知道我可以用来Up迭代以前的命令。运行最后的命令只涉及Up+ Enter。不过,我本来想买快乐黑客键盘因为我花了很多时间在vim
.
这个键盘没有箭头键,我知道如何获得这种行为的唯一方法是按Ctrl+R并开始重复我之前的命令。
有没有一种简单的方法可以在 UNIX 终端中模拟Up+而无需使用箭头键?Enter
答案1
使用csh
或任何实现csh
类似历史替换(tcsh
, bash
, zsh
)的 shell:
!!
然后Enter。
或者或者:
!-1
然后Enter。
或Ctrl+ P,Enter
魔法空间
另请注意,在您执行它们之前,!!
和!-1
不会为您自动扩展(此时可能为时已晚)。
如果使用bash
,您可以放入bind Space:magic-space
,~/.bashrc
然后Space在命令后按下将自动内联展开它们,允许您在执行前检查它们。这对于从不久前运行的命令进行历史扩展特别有用,例如!echo
将拉取以 开头的最后一个命令运行echo
。借助魔法空间,您可以在命令运行之前预览该命令。
bindkey ' ' magic-space
这相当于in tcsh
or的作用zsh
。
答案2
大多数具有命令行编辑功能的 shell 支持 Emacs 键绑定。 (一个很小的子集)
Up Ctrl+P
Down Ctrl+N
Left Ctrl+B
Right Ctrl+F
Home Ctrl+A
End Ctrl+E
Delete Ctrl+D
set -o vi
或者,您可以通过添加到 shell 启动文件(例如)来将 shell 设置为使用 vi 命令编辑模式~/.bashrc
。然后,例如,您可以
- 用于EsckEnter
重新执行上一条命令(与 相同
!!
)。减号键-也可用作“向上移动”命令。 - 使用EsckkkkkkkkkkkkEnter
或Esc12kEnter
重新执行前 12 条命令(与 相同
!-12
)。 - 使用Esc和 运动命令(即 ,k适当重复),然后编辑您在那里找到的 bash 命令行。请记住,您仍将处于
vi
命令模式,因此您需要使用vi
编辑命令(例如,I、A、C、R或其小写对应命令之一)来实际添加到历史记录中的命令。
因此,例如,EsckisudoSpaceEnter相当于sudo !!
。 - 对于高级用户:您甚至可以复制(yank) 一行文本并粘贴 (put) 将其放在另一个上,这样您就可以获得与 . 相当的结果
!-2:- !$
。 (不幸的是,它似乎不支持命名缓冲区。)
答案3
我最喜欢的是CTRL+P然后CTRL+O
默认情况下,无需额外配置。 ^P 会让你切换到最后一个命令,^O 会让你执行当前行
请注意,CTRL+O可以根据需要使用多次
答案4
使用任何实现以下功能的 POSIX shell用户便携性选项(包括ksh
、zsh
、bash
、yash
),也可以使用fc
命令:
fc -e : -1
看一个例子:
$ echo "hello"
hello
$ fc -e : -1
echo "hello"
hello
更多信息在执行历史记录中的一系列命令乔纳森·莱夫勒的回答。