如何在不使用箭头键的情况下重复上一个命令?

如何在不使用箭头键的情况下重复上一个命令?

我知道我可以用来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 tcshor的作用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 重新执行上一条命令(与 相同!!)。减号键-也可用作“向上移动”命令。
  • 使用EsckkkkkkkkkkkkEnterEsc12kEnter 重新执行前 12 条命令(与 相同!-12)。
  • 使用Esc和 运动命令(即 ,k适当重复),然后编辑您在那里找到的 bash 命令行。请记住,您仍将处于vi命令模式,因此您需要使用vi编辑命令(例如,IACR或其小写对应命令之一)来实际添加到历史记录中的命令。
    因此,例如,EsckisudoSpaceEnter相当于sudo !!
  • 对于高级用户:您甚至可以复制(yank) 一行文本并粘贴 (put) 将其放在另一个上,这样您就可以获得与 . 相当的结果!-2:- !$。 (不幸的是,它似乎不支持命名缓冲区。)

答案3

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

默认情况下,无需额外配置。 ^P 会让你切换到最后一个命令,^O 会让你执行当前行

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

答案4

使用任何实现以下功能的 POSIX shell用户便携性选项(包括kshzshbashyash),也可以使用fc命令:

fc -e : -1

看一个例子:

$ echo "hello"
hello

$ fc -e : -1
echo "hello"
hello

更多信息在执行历史记录中的一系列命令乔纳森·莱夫勒的回答。

相关内容