【问题标题】:Make a keybinding to run previous or last shell commands进行键绑定以运行上一个或最后一个 shell 命令
【发布时间】:2019-08-15 14:49:03
【问题描述】:

我经常想快速重新运行我使用的最后一个 shell 命令。

我知道你可以将焦点转移到终端,向上箭头并输入,但我认为肯定有比这三个步骤更好的方法。

vscode 中的sendSequence 命令变得越来越强大,因此我寻找一种方法来创建可以快速运行最后一个 shell 命令的键绑定。

来自sendSequence documentation

通过键绑定发送文本

workbench.action.terminal.sendSequence 命令可用于发送 终端的特定文本序列,包括转义 序列。这使得发送箭头键、回车、光标等功能成为可能 移动等。下面的例子展示了你可以做的事情 使用此功能实现,它会跳过左侧的单词 光标(Ctrl+向左箭头)并按退格键:

{
  "key": "ctrl+u",
  "command": "workbench.action.terminal.sendSequence",
  "args": { "text": "\u001b[1;5D\u007f" }
}

此功能支持变量替换。

请注意,该命令仅适用于 \u0000 格式,以便使用 字符通过字符代码(不是\x00)。

terminal supports variables substitution:

{
  "key": "ctrl+shift+t",
  "command": "workbench.action.terminal.sendSequence",
  "args": { "text": ". ${file}" }
}

例如,见run files in terminal:

{
    "key": "ctrl+shift+t",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "node '${file}'\u000D" }
}

【问题讨论】:

    标签: shell powershell visual-studio-code vscode-settings


    【解决方案1】:

    另请参阅https://stackoverflow.com/a/70900927/836330,了解如何查看某些受支持的 shell 和操作系统的最近终端命令的 QuickPick(从 v1.64 开始预览)。


    我想出了这个键绑定:

    {
      "key": "alt+x",
    
      "command": "workbench.action.terminal.sendSequence",
          
      "args": { "text": "\u001b[A\u000d" }
    },
    
    1. \u001b是一个转义序列,表示后面的字符有特殊含义。

    2. [A 是向上箭头。参见,例如,xterm function keys:

      Cursor Up    | CSI A
      Cursor Down  | CSI B
      Cursor Right | CSI C
      Cursor Left  | CSI D
      

    (“CSI”指的是ESC\u001b或后跟[,代表“控制序列引入器”(CSI为0x9b)。)

    所以“CSI A”是\u001b[A,它等于一个向上箭头,应该将您的终端命令列表循环到上一个命令。

    1. \u000d 是返回,所以命令立即运行。

    现在 Alt-x 或您选择的任何键绑定将运行最后使用的 shell 命令,焦点可以在编辑器或终端中。

    为了好玩,我把这个命令放在一起:

    "args": { "text": "\u0012watch\u001b[1;5C" }    
    

    这将向搜索先前命令的终端发送 Ctrl-R

    然后它将搜索“watch”,然后 Ctrl-rightArrow 转到“watch”的末尾,您可以在其中修改参数,如果需要。

    或跳过 Ctrl-rightArrow 部分 (\u001b[1;5C) 并返回 (\u000d) 以运行在历史记录中的任何位置找到的命令。显然,您需要一个唯一的搜索词才能使用它。

    [在 powershell 和 git bash 中测试。未在其他地方测试。]

    【讨论】:

    • 很酷的答案,但我真的希望开发人员能够比这更容易运行以前的 shell 命令。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2014-06-30
    • 2021-01-14
    • 2023-03-24
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多