Однострочная команда для открытия списка файлов из другой программы, такой как Git, PowerShell или Командная строка - PullRequest
0 голосов
/ 09 ноября 2018

Я хотел бы открыть все измененные файлы из ветки в VS Code.

Сейчас я делаю это в два этапа.

// copy the file list
PS> git diff master... --name-only | clip

// paste the file list
PS> code file1 file2 file3 ... fileN 

Как, если вообще, мы можем сделать это в одной строке? Я попробовал эти два подхода:

PS> git diff master... --name-only | code 
PS> git diff master... --name-only | code -

Ссылка на VS Код CLI документы .

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Как альтернатива другому ответу в случае имен файлов, содержащих пробелы:

#requires -Version 4
$files = @(& git.exe diff master... --name-only).
    ForEach{"""$PSItem"""} -join ' '
& code.cmd $files

В этом решении используются встроенные кавычки, которые анализатор cmd удалит, если они не нужны.

0 голосов
/ 10 ноября 2018

Вы можете передать вывод команды git в code в качестве аргумента :

code (git diff master... --name-only)

PowerShell собирает стандартный выводвыводить строки из внешней программы в массиве .

Предполагая, что команда git выводит только пути к файлам, каждая на отдельной строке, передавая этот массив вдругая внешняя программа , такая как code, автоматически передает элементы массива как отдельные , соответствующие кавычки аргументы.

Например,в Windows, если вы запустили следующее:

code (cmd /c echo file1`& echo "file 2")

code увидит командную строку, такую ​​как:

...\code.cmd "file1" "file 2"

Обратите внимание, что (прямой) конвейер до code не является опцией , потому что code не принимает пути к файлам от stdin;вы можете использовать stdin для передачи содержимого (нового) файла , однако ('Text for new doc' | code -).

Существует нет преимуществ использования конвейера черезКомандлет PowerShell ForEach-Object здесь .

0 голосов
/ 09 ноября 2018

,(git diff master... --name-only) | % { code $_ }

Запятая в начале создает массив с единственным элементом, который передается по конвейеру. Таким образом, в foreach есть только одна итерация, которая передает массив имен файлов в код.

Я не проверял это с пробелами в путях к файлам.

В качестве альтернативы, не нажимая на вещи, вы можете просто сделать

code (git diff signage-theme... --name-only)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...