Создайте привязку клавиш для запуска предыдущих или последних команд оболочки - PullRequest
0 голосов
/ 25 марта 2019

Я часто хочу быстро перезапустить последнюю команду оболочки, которую я использовал.

Я знаю, что вы можете сместить фокус на терминал, стрелку вверх и войти, но я подумал, что должен быть лучший способ, чем эти три шага.

Команда sendSequence в vscode становится все более мощной, и поэтому я искал способ создания привязки клавиш, который будет быстро запускать последнюю команду оболочки.

Из Документация sendSequence :

Отправить текст с привязки клавиш

Команда workbench.action.terminal.sendSequence может использоваться для отправки определенная последовательность текста на терминал, включая escape последовательности. Это позволяет такие вещи, как отправка клавиш со стрелками, ввод, курсор ходы и т. д. Пример ниже показывает, что вы можете добиться с помощью этой функции, он перепрыгивает через слово слева от курсор (Ctrl + стрелка влево) и нажимает клавишу Backspace:

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

Эта функция поддерживает подстановку переменных.

Обратите внимание, что команда работает только с форматом \u0000 для использования символы через их код символа (не \x00).

См. терминал поддерживает подстановку переменных :

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

Например, см. запуск файлов в терминале :

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

1 Ответ

0 голосов
/ 25 марта 2019

Я придумал эту комбинацию клавиш:

{
  "key": "alt+x",

  "command": "workbench.action.terminal.sendSequence",

  "args": { "text": "\u001b[A\u000d" }
},
  1. \u001b - escape-последовательность, указывающая, что следующие символы имеют специальное значение.

  2. [A - стрелка вверх. См., Например, функциональные клавиши xterm :

    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 или любое другое связывание клавиш, которое вы выберете, будет запускать последнюю используемую команду оболочки, фокус может быть в редакторе или в терминале.

Ради забавы я собрал эту команду:

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

Это отправит Ctrl - R на терминал, который ищет предыдущие команды.

Затем он будет искать "watch", а затем Ctrl - rightArrow , чтобы перейти к концу "watch", где вы можете изменить аргументы, если это необходимо ,

Или пропустите Ctrl - rightArrow part (\u001b[1;5C) и выполните возврат (\u000d), чтобы запустить команду, найденную в любом месте вашей истории. Очевидно, для этого вам понадобится уникальный поисковый запрос.

[Протестировано в powershell, и оно должно работать и в bash. Не тестировался в других местах.]

...