Gehen Sie nach dem einmaligen Öffnen von VS Code Remote Containers zu "cat ~ / Library / Application \ Support / Code / storage.json" Wenn Sie sich "windowsState"> "lastActiveWindow"> "folder" ansehen, sehen Sie, dass es wie folgt aussieht.
"windowsState": {
"lastActiveWindow": {
"folder": "vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src",
"backupPath": "...",
"remoteAuthority": "dev-container+2f557365722f6e616d652f646576656c6f702f70726f6a656374",
"uiState": {
"mode": 1,
"x": 0,
"y": 23,
"width": 3440,
"height": 1417
}
},
"openedWindows": []
},
Wenn Sie die URL dieses Ordners kennen
$ code --folder-uri vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
Auf diese Weise kann direkt von der CLI aus gestartet werden.
Der Teil von "2f557365722f6e616d652f646576656c6f702f70726f6a656374" ist "hexadezimale Zeichenfolge" Wenn Sie dies dekodieren, erhalten Sie "/ Benutzer / Name / Entwicklung / Projekt". Sie können auch sehen, dass es URL-codiert ist, weil es "% 2B" enthält. Das letzte "/ usr / src" ist der Pfad, der durch "workspaceFolder" in "devcontainer.json" angegeben wird. Basierend auf diesen als gesamte URL-Komponente
"vscode-remote://" + URI.encode_www_form_component("dev-container+" + "/User/name/develop/project".unpack('H*')) + "/usr/src"
Es scheint so.
Schreiben wir ein Skript, das eine URL generiert, um VS Code Remote Containers nach Angabe des Pfads zu starten.
Es wird durch Lesen von workspaceFolder
von .devcontainer / devcontainer.json
unter dem angegebenen Pfad generiert.
main.rb
# frozen_string_literal: true
# !/usr/bin/env ruby
require 'json'
module VSCodeRemoteContainer
class Utility
def initialize
end
def generate_url(root_path)
folder = find_workspace_folder(root_path)
path = "dev-container+#{root_path.unpack('H*')[0]}"
puts "vscode-remote://#{URI.encode_www_form_component(path)}#{folder}"
end
def find_workspace_folder(root_path)
unless File.exist?("#{root_path}/.devcontainer/devcontainer.json")
puts 'Not found devcontainer.json file.'
return
end
config = JSON.parse(File.read("#{root_path}/.devcontainer/devcontainer.json"))
config['workspaceFolder']
end
end
end
VSCodeRemoteContainer::Utility.new.generate_url(*ARGV)
Speichern Sie das obige als "main.rb" und führen Sie es wie folgt aus, um die URL zu generieren
$ ruby main.rb '/User/name/xxxx'
# => vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
Dieses Mal habe ich Workflows erstellt, die in Kombination mit ghq funktionieren. VSCode wird direkt im Container gestartet, indem der Repository-Name als Operationsabbild als ↓ angegeben wird.
Ich habe es dem obigen Skript beim Erstellen von Workflows hinzugefügt.
module VSCodeRemoteContainer
class Utility
attr_accessor :bin_path
def initialize
@bin_path = ENV['GHQ_PATH'] || '/usr/local/bin'
end
def ghq_exists?
!`which #{@bin_path}/ghq`.empty?
end
def search
return unless ghq_exists?
result = []
`#{@bin_path}/ghq list --full-path`.split(/\R/).each do |d|
Dir.foreach(d) do |path|
next if ['.', '..'].include?(path)
file = File.join(d, path)
result << d if file.include?('.devcontainer')
end
end
result
end
end
end
Ich verwende ghq
, um eine Liste der Ziel-Repositorys zu erhalten
Ich versuche nur das Repository zurückzugeben, das das Verzeichnis .devcontainer
hat.
Das fertige Produkt ist https://gist.github.com/Slowhand0309/253bb296cd7acb089601d2b32da4723b Ich habe es hierher gebracht. Ich habe es gerade erst gemacht, also wenn Sie irgendwelche Probleme finden Wir würden uns freuen, wenn Sie uns kontaktieren könnten.
zsh
, aber wenn Sie es mit Ihrer Shell nach Ihren Wünschen ändern können: beten Sie:Recommended Posts