从命令行启动和杀死(单独)多个独立的 VS Code 实例
Launching and killing (separately) multiple isolated instances of VS Code from command line
Visual Studio 代码支持通过 code
CLI 工具启动自身实例。您可以执行以下操作:
$ code /Users/username/projects/dotfiles
它将打开带有相应项目的 VS Code。由于 VS Code 只是一个 Electron 应用程序,这会产生许多单独的进程,父进程匹配如下内容:
/Applications/Visual Studio Code.app/Contents/MacOS/Electron /Users/username/projects/dotfiles
所以我似乎有办法从其路径参数中识别 IDE 进程。但是,当我尝试以同样的方式启动另一个项目时,比如说...
$ code /Users/username/projects/work
没有其他进程与该路径参数一起出现。它仍然只显示第一个 (projects/dotfiles
),即使在单独的 windows.
中打开了两个工作区
最终,我希望能够通过 bash/CLI close/kill 一个单独的项目 IDE window。是否有某种方法可以在新进程中启动第二个 VS Code 项目,使其路径显示为 ps
中的命令参数,因此可以独立于其他项目被终止?
您可以使用以下几个命令找到 PID 与项目的关联:
$ lsof | grep state.vscdb
Electron 349 username 63u REG 1,4 20480 551122 /Users/username/Library/Application Support/Code/User/workspaceStorage/9db2e998b18618ec427ec85178a324e6/state.vscdb
# 349 being PID
$ cd "/Users/username/Library/Application Support/Code/User/workspaceStorage/9db2e998b18618ec427ec85178a324e6"
$ sqlite3 state.vscdb "select * from ItemTable;" | grep "debug.selectedroot.*launch.json"
debug.selectedroot|file:///Users/username/projects/dotfiles/.vscode/launch.json
# /Users/username/projects/dotfiles is project folder
更新
试试这个方法:
lsof -R|/usr/bin/grep "^Code\\x20H.* /Users/username/project"
第三列包含要终止的 pid。
我能让它工作的唯一可行方法是创建一个 JXA/Applescript 函数,将项目名称作为参数,然后循环遍历 windows 并在 window 名称包含项目名称:
#!/usr/bin/env osascript -l JavaScript
run = argv => {
system = Application('System Events')
vscode = system.processes['Code']
vscode.windows().forEach( window => {
argv.forEach( projectName => {
if(window.name().includes(projectName)) {
window.buttons.at(0).click()
}
})
})
}
创建了一个包含该文件的文件,chmod +x
使其可执行,然后您可以执行 ./closeCode.jxa ProjectName1 ProjectName2
等。这会干净地关闭 window,如果存在任何未保存的文件, 会提示先保存。
Visual Studio 代码支持通过 code
CLI 工具启动自身实例。您可以执行以下操作:
$ code /Users/username/projects/dotfiles
它将打开带有相应项目的 VS Code。由于 VS Code 只是一个 Electron 应用程序,这会产生许多单独的进程,父进程匹配如下内容:
/Applications/Visual Studio Code.app/Contents/MacOS/Electron /Users/username/projects/dotfiles
所以我似乎有办法从其路径参数中识别 IDE 进程。但是,当我尝试以同样的方式启动另一个项目时,比如说...
$ code /Users/username/projects/work
没有其他进程与该路径参数一起出现。它仍然只显示第一个 (projects/dotfiles
),即使在单独的 windows.
最终,我希望能够通过 bash/CLI close/kill 一个单独的项目 IDE window。是否有某种方法可以在新进程中启动第二个 VS Code 项目,使其路径显示为 ps
中的命令参数,因此可以独立于其他项目被终止?
您可以使用以下几个命令找到 PID 与项目的关联:
$ lsof | grep state.vscdb
Electron 349 username 63u REG 1,4 20480 551122 /Users/username/Library/Application Support/Code/User/workspaceStorage/9db2e998b18618ec427ec85178a324e6/state.vscdb
# 349 being PID
$ cd "/Users/username/Library/Application Support/Code/User/workspaceStorage/9db2e998b18618ec427ec85178a324e6"
$ sqlite3 state.vscdb "select * from ItemTable;" | grep "debug.selectedroot.*launch.json"
debug.selectedroot|file:///Users/username/projects/dotfiles/.vscode/launch.json
# /Users/username/projects/dotfiles is project folder
更新
试试这个方法:
lsof -R|/usr/bin/grep "^Code\\x20H.* /Users/username/project"
第三列包含要终止的 pid。
我能让它工作的唯一可行方法是创建一个 JXA/Applescript 函数,将项目名称作为参数,然后循环遍历 windows 并在 window 名称包含项目名称:
#!/usr/bin/env osascript -l JavaScript
run = argv => {
system = Application('System Events')
vscode = system.processes['Code']
vscode.windows().forEach( window => {
argv.forEach( projectName => {
if(window.name().includes(projectName)) {
window.buttons.at(0).click()
}
})
})
}
创建了一个包含该文件的文件,chmod +x
使其可执行,然后您可以执行 ./closeCode.jxa ProjectName1 ProjectName2
等。这会干净地关闭 window,如果存在任何未保存的文件, 会提示先保存。