带有“重复上次”按钮的终端

带有“重复上次”按钮的终端

我经常编译东西,因此一遍又一遍地重复相同的命令,所以我想从我的“视觉记忆”中受益,并在终端上附加一种“重复上一个命令”按钮。更准确地说,我是这样看的:

  • 我的“特殊”终端就像标准终端仿真器一样,底部有一个额外的输入线,上面附有一个“运行”按钮。单击按钮将运行命令没有擦除它。
  • 也许甚至可以堆叠任意数量的此类命令(因为我经常需要在 2 或 3 个命令之间交替)。

我知道我可以使用Enter键盘来重做最后一个命令,但经常发生的情况是,我忘记我只需要输入另一个命令(修复某些内容或其他),因此不会从历史记录中带来正确的命令。因此,我必须在按 Enter 之前实际阅读(至少浏览)命令,而不是条件反射。

某处有这样的装置吗?我经常精确地使用多个终端来确保每个终端始终具有“正确”的命令,但我的Alt+Tab技能通常会让我跳到错误的窗口。而且我需要终端信息,例如环境和 cwd,因此我不能只是尝试将其“集成”到我的代码编辑器中。我的意思是,使用Alt+F2然后Enter将不起作用(因为我还需要从终端读取输出)。我只是希望能够同时充分利用键盘和视觉记忆(通过点击)。

答案1

我认为历史扩展在这里可能非常有帮助。例如,键入!p将执行以“p”开头的最后一个命令。类似地,!vi将执行最后一个以“vi”开头的命令,依此类推。更多信息这里。如果您不确定哪一个是最后一个,您可以设置 shell 选项histverify( shopt -s histverify),这样您仍然可以在执行命令之前编辑(或检查)该命令。更多关于此这里

或者,您可以使用历史搜索功能。在 bash 中,点击Ctrl+R并键入要在历史记录中查找的命令(从符合条件的最新命令开始)。然后重复点击Ctrl+R将带回符合您条件的旧命令。更多信息这里这里

如果您愿意,您可以修改 readline 的 inputrc,以便向上/向下箭头为您执行历史搜索。更多信息这里这里

答案2

查看 shell 的历史功能。在我的 zsh 中:

!!

重复最后一个命令。

键入history以查看最后几个条目。

要在 shell 中获取所需的缓冲区:

man zshzle

或者

man readline

另外,您可以使用 Tab 键展开补全

make long_target
ls some_path
...
make l<TAB> # prints 'make long_target' without running it

使用通配符、扩展...您的用例没有一处不在此功能之外。

答案3

使用+zsh就可以做到这一点。键入命令,然后按+而不是。该命令将被执行,并且在命令完成后相同的命令将出现在行缓冲区中。EscAEscAEnter

答案4

看起来您需要一个非常简单的答案。既然您提到了Alt+ Tab,我假设您正在使用 (X)windows。在按“Enter”之前,用鼠标突出显示该命令。当您突出显示它时,它会自动复制到剪贴板。要粘贴它,请按鼠标中键(滚轮)或键入Shift+ Insert

相关内容