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