[См. Мое редактирование ниже - теперь это сделать намного проще.]
Я нашел способ сделать то, что вы хотите, но это немного хак.Как вы, наверное, знаете, связать задачу легко, если вы можете создать задачу в .vscode / tasks.json и использовать что-то вроде следующего:
{
"key": "shift+escape",
"command": "workbench.action.tasks.runTask",
"args": "Start server and process files"
},
Гораздо сложнее запустить скрипт черезсвязывание клавиш без уже существующей задачи.Однако вы можете попробовать следующее, которое использует команду "workbench.action.terminal.runSelectedText",
.Но сначала нам нужно вставить скрипт в выделение, чтобы:
Использовать расширение macros (что немного грубо), чтобы мы могли связать несколько команд.В ваших пользовательских настройках :
"runCommandInTerminal": [
{
"command": "type",
"args": {
"text": "node -v"
}
},
{
"command": "cursorMove",
"args": {
"to": "wrappedLineStart",
"by": "wrappedLine",
"value": 1,
"select": true
}
},
"workbench.action.terminal.runSelectedText",
"editor.action.clipboardCutAction",
// "workbench.action.terminal.focus"
],
Это общий пример настройки "runCommandInTerminal"
, которую вы можете затем связать с любым аккордом клавиш, который пожелаете в keybindings.json, например
{
"key": "ctrl+shift+e",
"command": "macros.runCommandInTerminal"
},
Ваш пример немного сложнее, потому что вы хотите получить доступ к чему-то вроде ${file}
, что вы не можете сделать в настройках, только tasks.json и launch.json.К счастью, есть команда, которая получит текущий файл: "copyFilePath"
.Поэтому попробуйте
"runCommandInTerminal": [
"copyFilePath",
{
"command": "type",
"args": {
"text": "touch "
}
},
"editor.action.clipboardPasteAction",
{
"command": "cursorMove",
"args": {
"to": "wrappedLineStart",
"by": "wrappedLine",
"value": 1,
"select": true
}
},
"workbench.action.terminal.runSelectedText",
"editor.action.clipboardCutAction",
// "workbench.action.terminal.focus"
],
Сначала получите путь к файлу, затем выведите первую часть команды сценария "touch
".
Затем добавьте путь к файлу в конец команды.
Переместите курсор для выбора предыдущего.
Запустите выделение в терминале.
Вырежьте выделение из редактора.
Это можно запустить с помощьюваше связывание клавиш.Вы увидите, что сценарий набирается и вырезается, но код вашего редактора не изменится.Лучше всего запускать его из пустой строки в редакторе, но вы можете запустить его с начала строки несвязанного кода, если хотите (но отступ может быть утерян).
Хак, но, кажется, работает.Я хотел бы знать, есть ли расширение или другой способ сделать это чистящее средство.
РЕДАКТИРОВАТЬ май 2019:
Поскольку мой первоначальный ответ (как@Джефф указал) vscode добавил команду sendSequence
.И возможность использовать переменные с этой командой.Так что теперь вопрос ОП гораздо проще выполнить:
{
"key": "alt+x",
"command": "workbench.action.terminal.sendSequence",
"args": {"text": "touch ${file}"}
}
в вашем файле keybindings.json.См. переменные с помощью команды sendSequnce .