이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

터미널 고급 기능

Visual Studio Code의 통합 터미널은 유니코드 및 이모지 지원, 사용자 지정 키보드 단축키, 자동 응답과 같은 많은 고급 기능 및 설정을 제공합니다. 이 항목에서는 이러한 고급 기능을 자세히 설명합니다. VS Code 또는 통합 터미널이 처음이라면 먼저 터미널 기본 사항 항목을 검토하는 것이 좋습니다.

영구 세션

터미널은 두 가지 다른 유형의 영구 세션을 지원합니다.

  • 프로세스 재연결: 창을 다시 로드할 때(예: 확장 프로그램을 설치한 후) 이전 프로세스에 재연결하고 내용을 복원합니다.
  • 프로세스 복원: VS Code를 다시 시작할 때 터미널 내용이 복원되고 원래 환경을 사용하여 프로세스가 다시 시작됩니다.

이러한 영구 세션 모두 terminal.integrated.enablePersistentSessions을(를) false로 설정하여 비활성화할 수 있으며 복원되는 스크롤백 양은 terminal.integrated.persistentSessionScrollback 설정으로 제어됩니다. 프로세스 복원은 terminal.integrated.persistentSessionReviveProcess를 사용하여 독립적으로 구성할 수 있습니다.

창 간 터미널 이동

터미널 탭은 VS Code 창 간에 끌어다 놓을 수 있습니다. 또한 명령 팔레트와 터미널: 세션 분리터미널: 세션에 연결 명령을 통해 수동으로 수행할 수도 있습니다.

터미널 가시성 구성

창을 열 때 터미널 보기가 표시되면 영구 세션을 사용하여 터미널에 다시 연결하거나 새 셸을 만듭니다. 이 동작은 terminal.integrated.hideOnStartup 설정을 통해 세부 조정할 수 있습니다.

  • never(기본값): 시작 시 터미널 보기를 절대 숨기지 않습니다.
  • whenEmpty: 영구 세션이 복원되지 않은 경우에만 터미널을 숨깁니다.
  • always: 영구 세션이 복원된 경우에도 항상 터미널을 숨깁니다.

마지막 터미널이 닫힐 때 터미널 보기를 닫는 기본 동작을 재정의하는 데 사용할 수 있는 terminal.integrated.hideOnLastClosed 설정도 있습니다.

키보드 단축키와 셸

포함된 애플리케이션으로서 통합 터미널은 VS Code 내에서 디스패치되는 키보드 단축키 중 일부를 가로채야 하지만 모두 가로채지는 않습니다.

구성 가능한 terminal.integrated.commandsToSkipShell 설정은 어떤 명령의 키보드 단축키가 항상 "셸을 건너뛰고" 대신 VS Code의 키보드 단축키 시스템에서 처리되어야 하는지를 결정합니다. 기본적으로 VS Code 환경에 필수적인 명령 목록이 포함되어 있지만 특정 명령을 추가하거나 제거할 수 있습니다.

{
  "terminal.integrated.commandsToSkipShell": [
    // Ensure the toggle sidebar visibility keyboard shortcut skips the shell
    "workbench.action.toggleSidebarVisibility",
    // Send quick open's keyboard shortcut to the shell
    "-workbench.action.quickOpen",
  ]
}

기본 명령 목록 전체를 보려면 terminal.integrated.commandsToSkipShell 설정 세부 정보를 참조하세요.

팁: terminal.integrated.sendKeybindingsToShell을(를) 구성하여 terminal.integrated.commandsToSkipShell을(를) 재정의하고 대부분의 키보드 단축키를 셸로 디스패치하도록 할 수 있습니다. 이렇게 하면 찾기를 열기 위한 Ctrl+F와 같은 키보드 단축키가 비활성화된다는 점에 유의하세요.

코드

코드 키보드 단축키는 두 개의 키보드 단축키로 구성됩니다. 예를 들어, Ctrl+K 다음에 Ctrl+C를 눌러 줄을 주석 처리합니다. 코드는 기본적으로 항상 셸을 건너뛰지만 terminal.integrated.allowChords로 비활성화할 수 있습니다.

macOS 화면 지우기

macOS에서 Cmd+K는 화면을 지우는 터미널의 일반적인 키보드 단축키이므로 VS Code도 이를 존중합니다. 즉, Cmd+K 코드는 작동하지 않습니다. Cmd+K 코드는 화면 지우기 키보드 단축키를 제거하여 활성화할 수 있습니다.

{
  "key": "cmd+k",
  "command": "-workbench.action.terminal.clear"
}

또한, 키보드 단축키 우선순위 작동 방식 때문에 확장 프로그램이 Cmd+K 키보드 단축키를 제공하는 경우 이 키보드 단축키는 자동으로 재정의됩니다. 이 경우 Cmd+K 화면 지우기 키보드 단축키를 다시 활성화하려면 사용자 키보드 단축키에 다시 정의할 수 있습니다. 사용자 키보드 단축키는 확장 프로그램 키보드 단축키보다 우선순위가 높습니다.

{
  "key": "cmd+k",
  "command": "workbench.action.terminal.clear",
  "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported"
}

니모닉

VS Code 메뉴에 액세스하기 위해 니모닉을 사용하는 것(예: 파일 메뉴에 대한 Alt+F)은 터미널에서 기본적으로 비활성화됩니다. 이러한 키 이벤트는 셸에서 중요한 핫키인 경우가 많기 때문입니다. 니모닉을 활성화하려면 terminal.integrated.allowMnemonics을(를) 설정하십시오. 하지만 이렇게 하면 Alt 키 이벤트가 셸로 전송되지 않습니다. 이 설정은 macOS에서는 아무런 작업을 하지 않습니다.

사용자 지정 시퀀스 키보드 단축키

workbench.action.terminal.sendSequence 명령을 사용하여 셸에서 특별히 해석되는 이스케이프 시퀀스를 포함하여 특정 텍스트 시퀀스를 터미널로 보낼 수 있습니다. 이 명령을 사용하면 화살표 키, Enter, 커서 이동 등을 보낼 수 있습니다. 이 명령은 수동 입력을 허용하는 명령 팔레트를 통해 실행하지만, 인수가 포함된 사용자 지정 키보드 단축키에 할당할 때 가장 유용합니다.

예를 들어, 다음 시퀀스는 커서 왼쪽에 있는 단어를 건너뛰고(Ctrl+Left) Backspace를 누릅니다.

{
  "key": "ctrl+u",
  "command": "workbench.action.terminal.sendSequence",
  "args": {
    "text": "\u001b[1;5D\u007f"
  }
}

이 기능은 변수 대체를 지원합니다.

sendSequence 명령은 문자 코드를 통한 문자를 사용하는 경우 \u0000 형식으로만 작동합니다(\x00은 안 됨). 이러한 16진수 코드와 터미널 시퀀스에 대한 자세한 내용은 다음 리소스에서 확인할 수 있습니다.

사용자 지정 신호 보내기

workbench.action.terminal.sendSignal 명령을 사용하여 활성 터미널의 포그라운드 프로세스에 임의의 신호를 보낼 수 있습니다.

예를 들어, 아래 키 바인딩은 SIGTERM을 보내 정상적으로 종료하도록 합니다.

{
  "key": "ctrl+shift+/",
  "command": "workbench.action.terminal.sendSignal",
  "args": {
    "signal": "SIGTERM"
  }
}

확인 대화 상자

불필요한 출력과 사용자 프롬프트를 피하기 위해 터미널은 프로세스가 종료될 때 경고 대화 상자를 표시하지 않습니다. 경고를 표시하려면 다음 설정을 사용하여 구성할 수 있습니다.

자동 응답

터미널은 출력의 정확한 시퀀스를 받으면 구성 가능한 입력 응답을 셸에 자동으로 제공할 수 있습니다. 가장 일반적인 사용 사례는 배치 스크립트에서 사용자에게 배치 작업을 종료할 것인지 묻는 프롬프트에 도달했을 때 자동으로 응답하는 것입니다. 이 메시지를 자동으로 해제하려면 이 설정을 추가하십시오.

{
  "terminal.integrated.autoReplies": {
    "Terminate batch job (Y/N)": "Y\r"
  }
}

여기서 사용된 \r 문자는 Enter를 의미하며, 사용자 지정 시퀀스 키보드 단축키와 마찬가지로 이 기능은 셸에 이스케이프 시퀀스를 보내는 것을 지원합니다.

기본적으로 자동 응답은 구성되지 않습니다. 셸 입력 제공은 사용자별 명시적 작업 또는 구성이어야 하기 때문입니다.

탭 정지 너비 변경

terminal.integrated.tabStopWidth 설정은 프로그램이 터미널에서 \t를 출력할 때 탭 정지 너비를 구성할 수 있도록 합니다. 프로그램이 Tab 문자를 사용하기보다는 커서를 이동하는 경우가 많으므로 일반적으로 필요하지 않지만 특정 상황에서는 유용할 수 있습니다.

유니코드 및 이모지 지원

터미널은 유니코드 및 이모지 지원을 모두 제공합니다. 이러한 문자가 터미널에서 사용될 때 해당 지원에는 몇 가지 주의 사항이 있습니다.

  • 일부 유니코드 기호는 너비가 모호하여 유니코드 버전에 따라 변경될 수 있습니다. 현재 유니코드 버전 6 및 11 너비를 지원하며, 이는 terminal.integrated.unicodeVersion 설정으로 구성할 수 있습니다. 지정된 버전은 셸/운영 체제에서 사용되는 유니코드 버전과 일치해야 합니다. 그렇지 않으면 렌더링 문제가 발생할 수 있습니다. 셸/OS의 유니코드 버전이 글꼴의 실제 너비와 일치하지 않을 수 있습니다.
  • 여러 문자로 구성된 일부 이모지는 피부색 수정자와 같은 경우 올바르게 렌더링되지 않을 수 있습니다.
  • Windows에서는 이모지 지원이 제한적입니다.

이미지 지원

터미널 내 이미지는 Sixel 또는 iTerm 인라인 이미지 프로토콜을 사용하는 경우 작동합니다. 이 기능은 기본적으로 비활성화되어 있으며 terminal.integrated.enableImages 설정을 통해 활성화할 수 있습니다.

현재 제한 사항

프로세스 환경

터미널 내에서 실행되는 애플리케이션의 프로세스 환경은 다양한 설정과 확장 프로그램의 영향을 받으며 VS Code 터미널의 출력이 다른 터미널과 다르게 보일 수 있습니다.

환경 상속

VS Code를 열면 셸 환경을 소싱하기 위해 로그인 셸 환경을 시작합니다. 이는 개발자 도구가 종종 $PATH에 셸 시작 스크립트(예: ~/.bash_profile)에 추가되기 때문입니다. 기본적으로 터미널은 프로필 셸 인수에 따라 이 환경을 상속하므로 여러 프로필 스크립트가 실행되어 예기치 않은 동작을 유발할 수 있습니다.

이 환경 상속은 terminal.integrated.inheritEnv 설정을 통해 macOS 및 Linux에서 비활성화할 수 있습니다.

VS Code 인스턴스 간 환경 변수

여러 VS Code 인스턴스를 시작할 때 환경 변수가 공유됩니다.

  • 첫 번째 VS Code 인스턴스는 상위 프로세스(예: VS Code를 시작한 셸 또는 애플리케이션)로부터 환경 변수를 상속합니다.
  • 후속 VS Code 인스턴스는 상위 프로세스가 아닌 첫 번째 실행 중인 VS Code 인스턴스로부터 환경 변수를 상속합니다.

VS Code 인스턴스 간 환경 변수를 분리하려면 --user-data-dir 명령줄 옵션을 사용하여 각 인스턴스를 별도의 사용자 데이터 디렉터리로 실행하십시오. 이렇게 하면 각 인스턴스가 자체 환경, 설정 및 확장 프로그램을 유지 관리할 수 있습니다.

$LANG과의 상호 작용

터미널에서 문자가 표시되는 방식을 결정하는 $LANG 환경 변수와의 특수한 상호 작용이 있습니다. 이 기능은 terminal.integrated.detectLocale 설정을 통해 구성됩니다.

동작
on 항상 $LANG을 가장 일반적으로 원하는 값으로 설정합니다. 선택된 값은 운영 체제 로캘(기본값 en-US)을 UTF-8 인코딩으로 기반으로 합니다.
auto (기본값) $LANG이 제대로 구성되지 않은 경우(UTF 또는 EUC 인코딩으로 설정되지 않은 경우) on 동작과 유사하게 $LANG을 설정합니다.
$LANG을 수정하지 않습니다.

확장 프로그램 환경 기여

확장 프로그램은 터미널 환경에 기여하여 터미널과의 통합을 제공할 수 있습니다. 예를 들어, 내장 Git 확장 프로그램은 VS Code가 Git 원격 인증을 처리할 수 있도록 GIT_ASKPASS 환경 변수를 주입합니다.

확장 프로그램이 터미널 환경을 변경하는 경우 기존 터미널은 안전하게 다시 시작되거나 터미널 상태에 경고가 표시됩니다. 변경에 대한 자세한 내용은 호버에서 볼 수 있으며 다시 시작 버튼도 포함되어 있습니다.

A warning icon appears next to the terminal tab when a relaunch is required, information on the changes can be viewed by hovering it

Windows 및 ConPTY

VS Code의 터미널은 Unix 스타일 터미널을 구현하기 위해 xterm.js 프로젝트를 기반으로 구축되었으며 모든 데이터를 문자열로 직렬화하고 "의사 터미널"을 통해 파이프합니다. 역사적으로 Windows에서는 터미널이 이런 방식으로 작동하지 않았으며, 'conhost'라는 콘솔을 구현하기 위해 콘솔 API를 사용했습니다.

Unix 스타일 터미널과 Windows 콘솔 간의 에뮬레이션/번역 계층을 제공하여 이 문제를 해결하기 위해 winpty라는 오픈 소스 프로젝트가 만들어졌습니다. VS Code의 터미널은 원래 winpty만을 사용하여 구현되었습니다. 당시에는 훌륭했지만, 2018년에 Windows 10은 ConPTY API를 도입했습니다. 이는 winpty가 개척한 아이디어를 Windows에 내장하여 Unix 스타일 터미널 및 앱을 Windows에서 활용할 수 있는 더 안정적이고 지원되는 시스템을 제공합니다.

VS Code는 Windows 10 이상(빌드 번호 18309부터)에서 ConPTY를 기본으로 사용하고 이전 버전의 Windows에 대한 레거시 옵션으로 winpty로 대체됩니다. ConPTY는 terminal.integrated.windowsEnableConpty 설정을 통해 명시적으로 비활성화할 수 있지만 일반적으로 피해야 합니다.

ConPTY는 에뮬레이션 계층이므로 몇 가지 문제가 있습니다. 가장 일반적인 문제는 ConPTY가 뷰포트의 소유자라고 생각하고 화면을 다시 인쇄하는 경우가 있다는 것입니다. 이 다시 인쇄는 터미널: 지우기 명령을 실행한 후 이전 내용이 표시되는 것과 같은 예기치 않은 동작을 유발할 수 있습니다.

원격 개발

이 섹션에서는 VS Code가 VS Code 원격 개발 확장을 사용하여 원격 컴퓨터에 연결된 경우의 특정 주제를 설명합니다.

원격 창의 로컬 터미널

명령 팔레트의 터미널: 새 통합 터미널 만들기 (로컬) 명령을 사용하여 원격 창에서 기본 *로컬* 터미널 프로필을 시작할 수 있습니다. 현재 기본 프로필이 아닌 프로필은 원격 창에서 시작할 수 없습니다.

원격 입력 지연 감소 (미리 보기)

로컬 에코는 원격 창에서 입력 지연을 완화하는 데 도움이 되는 기능입니다. 결과가 원격에서 확인되기 전에 터미널에 입력 내용을 흐리게 표시합니다. 기본적으로 이 기능은 지연이 30ms 이상으로 감지될 때 실행되기 시작하며 타이밍은 terminal.integrated.localEchoLatencyThreshold으로 구성할 수 있습니다. 확인되지 않은 문자의 색상은 terminal.integrated.localEchoStyle으로 정의됩니다.

로컬 에코는 터미널의 활성 프로그램에 따라 동적으로 비활성화됩니다. 이는 ['vim', 'vi', 'nano', 'tmux']를 기본값으로 하는 terminal.integrated.localEchoExcludePrograms으로 제어됩니다. 입력 시 화면을 많이 다시 인쇄하거나 매우 동적인 프로그램에 대해서는 이 기능을 비활성화하는 것이 좋습니다.

기능을 완전히 비활성화하려면 다음을 사용합니다.

{
  "terminal.integrated.localEchoEnabled": false
}
© . This site is unofficial and not affiliated with Microsoft.