是否可以在 SSH 终端中使用“code”命令在本地机器上使用 SSH 扩展打开 VS Code?

jed*_*atz 5 ssh visual-studio-code vscode-remote

我喜欢 VS Code 的一点是,当我在 WSL 中使用终端时,我可以运行code file.txt,并且它将使用 WSL 远程扩展在我的本地使用 VS Code 打开该文件。

是否可以用 SSH 做类似的事情?即,如果我code file.txt通过 SSH 连接到远程主机,是否可以进行设置,以便运行将在我的本地计算机上打开 VS Code,通过远程 SSH 扩展连接来打开该文件?

Laz*_*Ren 23

感谢这篇文章,我找到了更好且简单的答案。

只需创建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"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

更新

上面的脚本不适用于最近的更新。我必须将第一行更改为

local script=$(echo ~/.vscode-server/bin/*/bin/remote-cli/code(*oc[1]N))
Run Code Online (Sandbox Code Playgroud)

更新2

如果最近打开的 ssh 窗口关闭,但另一个 SSH 窗口打开,原始脚本可能会失败。我增强了脚本,以便能够使用最近的 N(默认 10)个窗口重试该命令。

  • 非常有用! (3认同)
  • 在 ubuntu linux 20.04 上,vscode-ipc-* 似乎位于 /tmp 下。我需要将 `/run/user/$UID` 更改为 `/tmp`。编辑:这很奇怪。在另一台机器上,vscode-ipc-* 确实显示在“/run/user/$UID”下。 (2认同)

Pra*_*obo 9

你不应该做任何事。code VSCode根据您的 shell自动将 path/PATH 设置为path/PATH 环境变量。看到这个回复。您可能会像我一样覆盖您的路径/PATH。我不小心覆盖了 pathin~/.cshrcPATHin~/.bashrc并遇到了同样的问题。修复后,我可以code在命令行上运行。which code返回命令的位置。

直到我花时间弄清楚之前,我一直在使用下面提到的两种方法。两者都对我有用bash;您可以根据您的需要对其进行修改。但真正修复你的路径/PATH 而不是使用这些方法。

  1. 将位置添加code到 PATH 中~/.bashrc

    export PATH=${VSCODE_GIT_ASKPASS_NODE%/*}/bin/remote-cli:$PATH

或者

  1. 将别名设置为codein~/.bashrc

    alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/remote-cli/code"


更多关于pathvs.PATH 这里这里

  • 在我的机器中,`alias`将是`alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/remove-cli/code"` (2认同)

Bha*_*ath 0

使用以下命令打开远程终端上的文件夹或文件。注意:vscode-server必须已安装在远程主机上(如果您已经连接到它,则应该如此)。此外,还必须为文件或文件夹指定绝对路径。用于-n在新窗口中启动,-r以重复使用同一窗口。

code --folder-uri <absolute-path>
code --file-uri <absolute-path-file-name>
Run Code Online (Sandbox Code Playgroud)

例子:

code -r --folder-uri /home/myscripts/src           
code -n --file-uri /home/myscripts/src/math/sample.py
Run Code Online (Sandbox Code Playgroud)