我喜欢 VS Code 的一点是,当我在 WSL 中使用终端时,可以运行 code file.txt
命令,在本地使用 WSL 远程扩展打开该文件。
那么,使用 SSH 是否也可以实现类似的功能呢?也就是说,如果我通过 SSH 登录到远程主机,能否设置一些东西,使得运行 code file.txt
命令会在我的本地机器上打开 VS Code,并通过远程 SSH 扩展连接并打开该文件呢?
我喜欢 VS Code 的一点是,当我在 WSL 中使用终端时,可以运行 code file.txt
命令,在本地使用 WSL 远程扩展打开该文件。
那么,使用 SSH 是否也可以实现类似的功能呢?也就是说,如果我通过 SSH 登录到远程主机,能否设置一些东西,使得运行 code file.txt
命令会在我的本地机器上打开 VS Code,并通过远程 SSH 扩展连接并打开该文件呢?
code
的新脚本文件,并将文件放在任何一个$PATH
下的文件夹中即可。(使用echo $PATH
查看可以使用的文件夹)#! /usr/bin/env zsh
local max_retry=10
for i in {1..$max_retry}
do
local script=$(echo ~/.vscode-server/bin/*/bin/remote-cli/code(*oc[$i]N))
if [[ -z ${script} ]]
then
echo "VSCode remote script not found"
exit 1
fi
local socket=$(echo /run/user/$UID/vscode-ipc-*.sock(=oc[$i]N))
if [[ -z ${socket} ]]
then
echo "VSCode IPC socket not found"
exit 1
fi
export VSCODE_IPC_HOOK_CLI=${socket}
${script} $@ > /dev/null 2>&1
if [ "$?" -eq "0" ]; then
exit 0
fi
done
echo "Failed to find valid VS Code window"
#! /bin/bash
max_retry=10
for i in $(seq 1 $max_retry)
do
recent_folder=$(ls ~/.vscode-server/bin/ -t | head -n$i | tail -1)
script=$(echo ~/.vscode-server/bin/$recent_folder/bin/remote-cli/code)
if [[ -z ${script} ]]
then
echo "VSCode remote script not found"
exit 1
fi
socket=$(ls /run/user/$UID/vscode-ipc-* -t | head -n$i | tail -1)
if [[ -z ${socket} ]]
then
echo "VSCode IPC socket not found"
exit 1
fi
export VSCODE_IPC_HOOK_CLI=${socket}
${script} $@ 2>/dev/null
if [ "$?" -eq "0" ]; then
exit 0
fi
done
echo "Failed to find valid VS Code window"
上述脚本在最近的更新中无法正常工作。我不得不将第一行更改为
local script=$(echo ~/.vscode-server/bin/*/bin/remote-cli/code(*oc[1]N))
如果最近打开的 SSH 窗口被关闭,原始脚本可能会失败,但如果有另一个已经连接的 SSH 窗口仍然打开。我已经改进了脚本,使其能够在最近的 N 个窗口(默认为10个)上重试命令。
code
。请参见此响应。您可能正在覆盖您的路径/PATH,就像我一样。我意外地在~/.cshrc
和~/.bashrc
中覆盖了path
和PATH
,并遇到了相同的问题。解决后,我可以在命令行上运行code
。which code
返回命令的位置。bash
中运行良好;您可以根据需要修改它们以适合您的shell。但是请确实修复您的路径/PATH,而不是使用这些方法。
code
的位置添加到~/.bashrc
中的PATH中
export PATH=${VSCODE_GIT_ASKPASS_NODE%/*}/bin:$PATH
或者
~/.bashrc
中设置code
的别名
alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/code"
path
与PATH
的更多信息,请参见此处和此处。alias
将会是 alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/remove-cli/code"
。 - HuihuangZhang是的,有点像。
从VSCode终端运行以下命令:
env | grep VSCODE_IPC_HOOK_CLI
然后复制并粘贴带有“export”关键字的那一行到您的ssh终端中。
之后,您应该能够从您的~/.vscode-server/bin/XXX/bin
目录中运行代码。
VSCode终端
SSH终端
您可以通过使用.bashrc和.profile来自动化此过程,将IPC代码放入临时文件中,并在进行ssh登录时进行源引用。
例如,这对我有效...
将以下内容追加到~/.bashrc文件中
#
if [ "$VSCODE_IPC_HOOK_CLI" != "" ]; then
cat >$HOME/.vscode_env.sh <<EOF
#
if [ "\$VSCODE_IPC_HOOK_CLI" = "" ]; then
export VSCODE_IPC_HOOK_CLI="$VSCODE_IPC_HOOK_CLI"
alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/code"
fi
EOF
fi
然后将此内容添加到您的~/.profile文件中
[ -f $HOME/.vscode_env.sh ] && . $HOME/.vscode_env.sh
这对我有效
if [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then
local script=$(echo ~/.vscode-server/bin/*/bin/remote-cli/code(*oc[1]N))
if [[ -z ${script} ]]
then
echo "VSCode remote script not found"
exit 1
fi
local socket=$(echo /run/user/$UID/vscode-ipc-*.sock(=oc[1]N))
if [[ -z ${socket} ]]
then
echo "VSCode IPC socket not found"
exit 1
fi
export VSCODE_IPC_HOOK_CLI=${socket}
alias code=${script}
fi
'/home/averma5/.vscode-server/bin/*/bin/remote-cli/code(*oc[1]N))'
: 不是有效的标识符。 - user5319825Lazy Ren的Bash脚本几乎对我有用。但是在重试策略中出现了错误。
以下内容对我有效:
#! /bin/bash
max_retry=10
for i in $(seq 1 $max_retry)
do
recent_folder=$(ls ~/.vscode-server/bin/ -t | head -n$i | tail -1)
script=$(echo ~/.vscode-server/bin/$recent_folder/bin/remote-cli/code)
if [[ -z ${script} ]]
then
echo "VSCode remote script not found"
exit 1
fi
socket=$(ls /run/user/$UID/vscode-ipc-* -t | head -n$i | tail -1)
if [[ -z ${socket} ]]
then
echo "VSCode IPC socket not found"
exit 1
fi
export VSCODE_IPC_HOOK_CLI=${socket}
${script} $@ 2>/dev/null
if [ "$?" -eq "0" ]; then
exit 0
fi
done
echo "Failed to find valid VS Code window"
i
大于1时,recent_folder
和socket变成了一个列表,而脚本的其余部分则无法正常工作。| tail -1
。|head -n$i | tail -1
的组合应该给出“第i”行,这正是我们想要的。vscode-server
(如果您已经连接到它,那么应该已经安装)。同时,必须指定文件或文件夹的绝对路径。使用-n
在新窗口中启动,-r
重用同一窗口。code --folder-uri <absolute-path>
code --file-uri <absolute-path-file-name>
例子:
code -r --folder-uri /home/myscripts/src
code -n --file-uri /home/myscripts/src/math/sample.py