我在我的笔记本电脑 (Linux) 上使用 VSCode 远程 SSH 来处理驻留在 Linux 主机上的项目。
如果我在 VSCode 中打开一个内部终端,我可以通过执行
code some_file.txt
从主机打开文件。我经常希望能够从不是源自 VSCode 的终端执行相同的操作。
在连接到标准(非 VSCode 内部)终端时,无论如何都可以在 VSCode 服务器中打开文件吗?
从another StackOverflow answer,我了解到如果你打开一个集成终端并找到
VSCODE_IPC_HOOK_CLI
环境变量,并在非集成终端中将其设置为相同的值,然后从代码服务器安装运行code
目录~/.vscode-server
,它将起作用。那篇文章没有提到您可以在 ~/.vscode-server
目录中安装多个。当前安装可以从 VSCODE_GIT_ASKPASS_MODE
变量中提取,它看起来像这样:
$ echo $VSCODE_GIT_ASKPASS_NODE
/home/<user>/.vscode-server/bin/054a9295330880ed74ceaedda236253b4f39a335/node
只需砍掉
node
并添加bin
,然后运行类似的东西
$ /home/<user>/.vscode-server/bin/054a9295330880ed74ceaedda236253b4f39a335/bin/code myfile.txt
编辑: 这是一个小脚本,它将终端连接到最新创建的 vscode 窗口。
❯ cat ~/.local/bin/connect_vscode.sh
export PATH="${HOME}/.vscode-server/bin/$(ls -t1 ${HOME}/.vscode-server/bin | head -n 1)/bin:${PATH}"
export VSCODE_IPC_HOOK_CLI="$(ls -t1 /run/user/$(id -u)/vscode-ipc-* | head -n 1)"
# Tell tmux to set these variables for new windows/panes.
# Remove if you don't use tmux
tmux setenv PATH "$PATH"
tmux setenv VSCODE_IPC_HOOK_CLI "$VSCODE_IPC_HOOK_CLI"
C。 R. Oldham 的 answer 涵盖了为什么/如何的技术细节。
如果你想要一个在你的
alias
中用作~/.bash_profile
的1-liner:
# Open file in most recently-connected remote VSCode session.
alias code=$'VSCODE_IPC_HOOK_CLI=/run/user/`id -u`/$(ls -lt /run/user/`id -u`/ | egrep \.sock$ | head -1 | awk \'END {print $NF}\') `ls -lt ~/.vscode-server/bin/** | fgrep bin/remote-cli/code | head -1 | awk \'END {print $NF}\'`'