VSCode 리모트 SSH code 명령어 사용하기

VSCode Remote SSH와 터미널을 함께 사용하여 서버에서 개발할 때, VSCode Integrated terminal이 아닌 별개의 터미널 프로그램을 사용할경우 code 명령어를 사용하여 VSCode 창을 열 수가 없습니다. git commit등의 명령어도 기본 에디터로 vim을 열게됩니다.

블로그 포스트를 참조하여 서버에 ssh로 연결하였을 때도 code 명령어를 사용하는 방법에 대해 알아보겠습니다.

Prerequisite

  • zsh
  • VSCode Remote-SSH (code명령어 사용할 때 리모트 세션이 열려있어야합니다.)

Command Installation

아래 스크립트를 $PATH 폴더 중 한 곳에 파일명 code로 저장해주세요. (e.g. ~/.bin)

$PATH에서 어떤 폴더들을 지원하는지 확실하지 않다면 echo $PATH로 확인할 수 있습니다.

For ZSH

# file: "$PATH/code"
#! /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"

For Bash

#! /bin/bash

max_retry=10

for i in $(seq 1 $max_retry)
do
    recent_folder=$(ls ~/.vscode-server/bin/ -t | head -n$i)
    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)
    if [[ -z ${socket} ]]
    then
        echo "VSCode IPC socket not found"
        exit 1
    fi
    export VSCODE_IPC_HOOK_CLI=${socket}
    ${script} $@
    if [ "$?" -eq "0" ]; then
        exit 0
    fi
done

echo "Failed to find valid VS Code window"

ssh 접속된 터미널에서 code 명령어를 사용할 때, 최소 하나의 VSCode Remote - SSH 세션이 연결되어 있어야합니다.

Git 설정

아래 명령어를 사용하여 git이 기본 에디터로 VSCode를 사용하게 합니다.

git config --global core.editor "code --wait"