터미널 셸 통합
Visual Studio Code는 일반 셸과 통합하여 터미널이 셸 내부에서 실제로 어떤 일이 발생하는지에 대해 더 잘 이해할 수 있도록 합니다. 이 추가 정보는 작업 디렉터리 감지 및 명령 감지와 같은 유용한 기능을 가능하게 합니다. 장식 및 탐색.
지원되는 셸
- Linux/macOS: bash, fish, pwsh, zsh
- Windows: Git Bash, pwsh
설치
자동 스크립트 주입
기본적으로 셸 통합 스크립트는 VS Code에서 시작된 지원되는 셸에서 자동으로 활성화됩니다. 이는 셸 세션이 시작될 때 인수 및/또는 환경 변수를 주입하여 수행됩니다. 이 자동 주입은 terminal.integrated.shellIntegration.enabled을(를) false로 설정하여 비활성화할 수 있습니다.
이 표준적이고 쉬운 방법은 하위 셸, 일반 ssh 세션( 원격 - SSH 확장을 사용하지 않는 경우) 또는 일부 복잡한 셸 설정과 같은 고급 사용 사례에는 작동하지 않습니다. 이를 위한 셸 통합을 활성화하는 권장 방법은 수동 설치입니다.
참고: 자동 주입은 오래된 버전의 셸에서는 작동하지 않을 수 있습니다. 예를 들어, 오래된 fish 버전은 주입 방식인
$XDG_DATA_DIRS환경 변수를 지원하지 않습니다. 여전히 수동으로 설치하여 작동하게 할 수 있습니다.
수동 설치
셸 통합을 수동으로 설치하려면 VS Code 셸 통합 스크립트를 셸 초기화 중에 실행해야 합니다. 이를 수행하는 위치와 방법은 사용하는 셸 및 OS에 따라 다릅니다. 수동 설치를 사용하는 경우 셸 통합을 활성화하기 위해 terminal.integrated.shellIntegration.enabled을(를) false로 설정하는 것이 좋습니다(필수는 아님).
팁: Insiders 빌드를 사용하는 경우 아래의
code를code-insiders로 바꾸십시오.
bash
다음 내용을 ~/.bashrc 파일에 추가하십시오. bash에서 code ~/.bashrc를 실행하여 VS Code에서 파일을 엽니다.
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"
fish
다음 내용을 config.fish 파일에 추가하십시오. fish에서 code $__fish_config_dir/config.fish를 실행하여 VS Code에서 파일을 엽니다.
string match -q "$TERM_PROGRAM" "vscode"
and . (code --locate-shell-integration-path fish)
pwsh
다음 내용을 PowerShell 프로필에 추가하십시오. pwsh에서 code $Profile을 실행하여 VS Code에서 파일을 엽니다.
if ($env:TERM_PROGRAM -eq "vscode") { . "$(code --locate-shell-integration-path pwsh)" }
zsh
다음 내용을 ~/.zshrc 파일에 추가하십시오. zsh에서 code ~/.zshrc를 실행하여 VS Code에서 파일을 엽니다.
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path zsh)"
Git Bash
다음 내용을 ~/.bashrc 파일에 추가하십시오. Git Bash에서 code ~/.bashrc를 실행하여 VS Code에서 파일을 엽니다.
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"
이식성과 성능
위의 셸 통합 설치는 플랫폼 간 호환되며 code가 $PATH에 있는 경우 모든 설치 유형에 호환됩니다. 그러나 이 권장 접근 방식은 Node.js를 시작하여 스크립트 경로를 가져오므로 셸 시작 시 약간의 지연이 발생합니다. 이 지연을 완화하려면 스크립트 경로를 미리 확인하고 초기화 스크립트에 직접 추가하여 위의 스크립트를 인라인하십시오.
# Output the executable's path first:
code --locate-shell-integration-path bash
# Add the result of the above to the source statement:
[[ "$TERM_PROGRAM" == "vscode" ]] && . "/path/to/shell/integration/script.sh"
셸 통합 품질
셸 통합을 사용할 때 해당 기능의 기능을 선언하는 "품질"이 함께 제공됩니다. 이러한 품질은 셸 통합 스크립트의 동작 방식에 의해 결정됩니다.
- 없음: 셸 통합이 활성화되지 않았습니다.
- 풍부함: 셸 통합이 활성화되었으며 명령 감지가 이상적으로 작동합니다.
- 기본: 셸 통합이 활성화되었지만 명령 감지가 모든 기능을 지원하지 않을 수 있습니다. 예를 들어, 실행된 명령 위치는 감지되지만 종료 상태는 감지되지 않습니다.
셸 통합 품질을 보려면 터미널 탭에 마우스를 올립니다. 선택적으로, 더 자세한 정보를 보려면 마우스 오버 시 세부 정보 보기를 선택하십시오.
IntelliSense
터미널의 IntelliSense를 사용하면 파일, 폴더, 명령, 명령 인수 및 옵션에 대한 제안을 받을 수 있습니다. 이 기능은 terminal.integrated.suggest.enabled 설정으로 활성화하거나 비활성화할 수 있습니다.

입력하면 제안 목록이 나타납니다. 제안을 수동으로 트리거하려면 키보드 단축키를 사용하십시오.
기본적으로 Tab은 제안을 삽입합니다. 목록을 탐색하면 Enter가 제안을 삽입합니다. 이 동작은 terminal.integrated.suggest.selectionMode 설정으로 구성할 수 있습니다.
터미널 IntelliSense의 동작을 구성하는 다양한 설정이 있습니다.
- terminal.integrated.suggest.quickSuggestions: 명령줄 내용에 따라 자동으로 표시되며, Ctrl+Space로 수동으로 트리거하는 것과는 반대입니다.
- terminal.integrated.suggest.suggestOnTriggerCharacters:
-또는/와 같은 "트리거 문자" 뒤에 자동으로 표시됩니다. - terminal.integrated.suggest.runOnEnter: Enter를 사용할 때( Tab이 아님) 명령을 선택적으로 실행합니다.
- terminal.integrated.suggest.windowsExecutableExtensions: Windows에서 실행 파일로 취급되는 확장 파일의 목록입니다.
- terminal.integrated.suggest.providers: 특정 제공업체를 비활성화할 수 있는 기능을 제공합니다. 예를 들어, 확장은 원하지 않는 완료를 제공할 수 있습니다.
- terminal.integrated.suggest.showStatusBar: IntelliSense 팝업 하단에 상태 표시줄을 표시합니다.
- terminal.integrated.suggest.cdPath:
$CDPATH통합을 활성화합니다. - terminal.integrated.suggest.inlineSuggestion: 셸 "고스트 텍스트"와 통합하여 표시하는 방법을 제공합니다.
- terminal.integrated.suggest.upArrowNavigatesHistory: 위쪽 화살표를 완성 항목 탐색 대신 셸로 보냅니다. 이는 zsh에서 접두사로 기록 검색을 필터링한 후 위쪽을 누를 수 있으므로 특히 유용합니다.
- terminal.integrated.suggest.selectionMode: IntelliSense 팝업이 초점을 맞추는 방식이며, 이로 인해 Enter와 Tab의 기능이 결정됩니다.
- terminal.integrated.suggest.insertTrailingSpace: 후행 공백을 삽입하고 수락 후 완료를 다시 트리거합니다.
전역 완료 캐싱
성능 향상을 위해 VS Code는 특정 셸에 대한 전역을 적극적으로 캐시합니다. 셸 시작 로직을 변경하여 명령을 추가하는 경우 자동으로 인식되지 않은 경우 터미널: 제안 캐시된 전역 지우기 명령(terminal.integrated.suggest.clearCachedGlobals)을 사용하여 캐시를 수동으로 새로 고치십시오.
명령 장식 및 개요 눈금자
셸 통합이 가능하게 하는 것 중 하나는 터미널 내에서 실행된 명령의 종료 코드를 얻는 기능입니다. 이 정보를 사용하여 명령이 성공했는지 또는 실패했는지를 나타내는 장식이 줄 왼쪽에 추가됩니다. 이러한 장식은 편집기에서와 같이 스크롤 막대의 비교적 새로운 개요 눈금자에도 표시됩니다.

장식은 명령을 다시 실행하는 것과 같은 상황별 작업을 제공하기 위해 상호 작용할 수 있습니다.

명령 및 개요 눈금자 장식은 terminal.integrated.shellIntegration.decorationsEnabled 설정을 사용하여 구성할 수 있습니다.
명령 탐색
셸 통합에서 감지된 명령은 명령 탐색 기능( Ctrl/Cmd+Up, Ctrl/Cmd+Down)으로 공급되어 더 안정적인 명령 위치를 제공합니다. 이 기능은 명령 간에 빠르게 탐색하고 해당 출력을 선택할 수 있게 합니다. 현재 위치에서 명령까지 선택하려면 Shift를 누른 상태에서 Shift+Ctrl/Cmd+Up 및 Shift+Ctrl/Cmd+Down을 누를 수도 있습니다.
명령 가이드
명령 가이드는 명령과 그 출력을 마우스로 올렸을 때 옆에 나타나는 막대입니다. 이를 통해 명령을 더 빠르게 식별할 수 있으며 셸 통합이 제대로 작동하는지 확인하는 방법이기도 합니다.

색상 테마를 사용하여 명령 가이드의 색상을 사용자 정의할 수 있습니다. 명령 가이드를 전환하려면 terminal.integrated.shellIntegration.showCommandGuide 설정을 구성하십시오.
고정 스크롤
고정 스크롤 기능은 터미널 상단에 부분적으로 보이는 명령을 "고정"하여 해당 출력이 어떤 명령에 속하는지 훨씬 쉽게 알 수 있도록 합니다. 고정 스크롤 구성 요소를 클릭하면 터미널 버퍼의 명령 위치로 스크롤됩니다.

이 기능은 terminal.integrated.stickyScroll.enabled 설정으로 활성화할 수 있습니다.
빠른 수정
VS Code는 명령의 출력을 스캔하고 사용자가 다음에 할 가능성이 높은 작업을 제공하는 빠른 수정을 표시합니다.

다음은 내장된 빠른 수정 기능입니다.
- 포트가 이미 수신 중인 것으로 감지되면 해당 프로세스를 종료하고 이전 명령을 다시 실행하도록 제안합니다.
git push가 업스트림이 설정되지 않아 실패하는 경우, 업스트림을 설정하여 푸시하도록 제안합니다.git하위 명령이 비슷한 명령 오류로 실패하는 경우, 비슷한 명령을 사용하도록 제안합니다.git push가 GitHub PR 생성 제안으로 이어지는 경우, 링크를 열도록 제안합니다.General또는cmd-not-foundPowerShell 피드백 제공업체가 트리거되면 각 제안을 제안합니다.
빠른 수정 기능은 추가 피드백을 위해 접근성 신호도 지원합니다. 빠른 수정이 가능한 경우.
최근 명령 실행
터미널: 최근 명령 실행 명령은 다양한 소스의 기록을 빠른 선택 창에 표시하며, 셸의 역검색( Ctrl+R)과 유사한 기능을 제공합니다. 소스는 현재 세션 기록, 이 셸 유형의 이전 세션 기록 및 일반 셸 기록 파일입니다.

명령의 다른 기능
- 기본적으로 검색 모드는 "연속 검색"이며, 검색어와 정확히 일치해야 합니다. 검색 입력 오른쪽의 버튼을 클릭하면 퍼지 검색으로 전환할 수 있습니다.
- 현재 세션 섹션에는 빠른 선택 창 오른쪽에 있는 클립보드 아이콘이 있으며, 명령 출력을 편집기에서 엽니다.
- 빠른 선택 창 오른쪽에 있는 고정 작업은 명령을 목록 상단에 고정할 수 있습니다.
- Alt 키를 누른 상태로 있으면 명령을 실행하지 않고 터미널에 텍스트를 씁니다.
- 이전 세션 섹션에 저장되는 기록 양은 terminal.integrated.shellIntegration.history 설정으로 결정됩니다.
이 명령의 기본 키보드 단축키는 Ctrl+Alt+R입니다. 그러나 접근성 모드가 켜져 있으면 이들이 반전됩니다. Ctrl+R은 최근 명령을 실행하고 Ctrl+Alt+R은 Ctrl+R을 셸로 보냅니다.
접근성 모드가 꺼져 있을 때 다음 키보드 단축키로 키보드 단축키를 전환할 수 있습니다.
{
"key": "ctrl+r",
"command": "workbench.action.terminal.runRecentCommand",
"when": "terminalFocus"
},
{
"key": "ctrl+alt+r",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "\u0012"/*^R*/ },
"when": "terminalFocus"
}
최근 디렉터리로 이동
최근 명령 실행 기능과 유사하게, 터미널: 최근 디렉터리로 이동 명령은 방문한 디렉터리를 추적하고 빠른 필터링 및 이동(cd)을 허용합니다. Alt 키를 누른 상태로 있으면 명령을 실행하지 않고 터미널에 텍스트를 씁니다.
이 명령의 기본 키보드 단축키는 ⌘G (Windows, Linux Ctrl+G)입니다. 편집기의 줄/열로 이동 명령과 유사하게 작동합니다. Ctrl+G는 Ctrl+Alt+G를 사용하여 셸로 보낼 수 있습니다.
현재 작업 디렉터리 감지
셸 통합은 VS Code에 셸의 현재 작업 디렉터리를 알려줍니다. 이 정보는 Windows에서는 정규 표현식으로 프롬프트를 감지하려고 시도하지 않고는 얻을 수 없으며 macOS 및 Linux에서는 폴링이 필요하므로 성능에 좋지 않습니다.
이를 통해 제공되는 가장 큰 기능 중 하나는 터미널에서 링크를 향상시키는 것입니다. 예를 들어 package.json 링크를 살펴보겠습니다. 셸 통합이 비활성화된 상태에서 링크가 활성화되면 작업 영역에 여러 package.json 파일이 있는 경우 package.json을 필터로 사용하여 검색 빠른 선택을 엽니다. 그러나 셸 통합이 활성화되면 현재 폴더의 package.json 파일을 직접 엽니다. 현재 위치를 알기 때문입니다. 이를 통해 ls의 출력이 올바른 파일을 안정적으로 열 수 있습니다.
현재 작업 디렉터리는 터미널 탭, 최근 명령 실행 빠른 선택 및 "terminal.integrated.splitCwd": "inherited" 기능에 디렉터리를 표시하는 데에도 사용됩니다.
확장된 PowerShell 키보드 단축키
Windows의 콘솔 API는 Linux/macOS 터미널보다 더 많은 키보드 단축키를 허용합니다. VS Code의 터미널은 Windows에서도 후자를 에뮬레이트하므로 VT 인코딩 부족으로 인해 표준 수단으로는 불가능한 일부 PowerShell 키보드 단축키가 있습니다. 예를 들어 Ctrl+Space입니다. 셸 통합을 통해 VS Code는 PowerShell에 특수 시퀀스를 보내는 사용자 지정 키보드 단축키를 연결할 수 있습니다. 그런 다음 PowerShell은 셸 통합 스크립트에서 처리하고 올바른 키 처리기로 전달합니다.
셸 통합이 활성화된 PowerShell에서 다음 키보드 단축키가 작동해야 합니다.
- Ctrl+Space: Windows에서만
MenuComplete로 기본 설정됩니다. - Alt+Space: 모든 플랫폼에서
SetMark로 기본 설정됩니다. - Shift+Enter: 모든 플랫폼에서
AddLine으로 기본 설정됩니다. - Shift+End: 모든 플랫폼에서
SelectLine으로 기본 설정됩니다. - Shift+Home: 모든 플랫폼에서
SelectBackwardsLine으로 기본 설정됩니다.
향상된 접근성
셸 통합이 VS Code에 제공하는 정보는 터미널의 접근성을 개선하는 데 사용됩니다. 향상된 기능의 예는 다음과 같습니다.
- 감지된 명령을 접근 가능한 버퍼로 탐색 ( ⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2))
- 명령이 실패할 때 오디오 신호가 재생됩니다.
- 기본 텍스트 상자 동기화: 화살표 및 백스페이스 키가 더 올바르게 작동합니다.
지원되는 이스케이프 시퀀스
VS Code는 여러 사용자 지정 이스케이프 시퀀스를 지원합니다.
VS Code 사용자 지정 시퀀스 'OSC 633 ; ... ST'
VS Code에는 VS Code 터미널에서 실행될 때 셸 통합 기능을 활성화하도록 설계된 사용자 지정 이스케이프 시퀀스 세트가 있습니다. 이는 내장 스크립트에서 사용되지만 셸 통합을 지원하기 위해 이를 사용하는 Julia 확장과 같이 시퀀스를 터미널로 보낼 수 있는 모든 애플리케이션에서도 사용할 수 있습니다. Julia REPL.
이러한 시퀀스는 다른 터미널에서 무시해야 하지만, 다른 터미널이 시퀀스를 더 널리 채택하게 될 때까지는 $TERM_PROGRAM이 vscode인지 확인한 후 작성하는 것이 좋습니다.
-
OSC 633 ; A ST: 프롬프트 시작 표시. -
OSC 633 ; B ST: 프롬프트 끝 표시. -
OSC 633 ; C ST: 실행 전 표시. -
OSC 633 ; D [; <exitcode>] ST: 선택적 종료 코드와 함께 실행 완료 표시. -
OSC 633 ; E ; <commandline> [; <nonce>] ST: 선택적 논스와 함께 명령줄을 명시적으로 설정합니다.E 시퀀스를 사용하면 터미널이 셸에서 해석된 정확한 명령줄을 안정적으로 가져올 수 있습니다. 이 시퀀스가 지정되지 않은 경우 터미널은 A, B 및 C 시퀀스를 사용하여 명령을 가져오거나 신뢰할 수 없는 경우 감지를 완전히 비활성화할 수 있습니다.
선택적 논스는 시퀀스가 셸 통합 스크립트에서 온 것인지 확인하여 명령 스푸핑을 방지하는 데 사용할 수 있습니다. 논스가 성공적으로 확인되면 사용자 경험 향상을 위해 명령을 사용하기 전의 일부 보호 기능이 제거됩니다.
명령줄은
\xAB형식(AB는 문자 코드의 16진수 표현, 대소문자 구분 안 함)을 사용하여 ASCII 문자를 이스케이프할 수 있으며\\을 사용하여\문자를 이스케이프할 수 있습니다. 세미콜론(0x3b)과 0x20 이하의 문자는 이스케이프해야 하며, 이는 특히 새 줄 문자와 세미콜론에 중요합니다.일부 예제
"\" -> "\\" "\n" -> "\x0a" ";" -> "\x3b" -
OSC 633 ; P ; <Property>=<Value> ST: 터미널에서 속성을 설정합니다. 알려진 속성만 처리됩니다.알려진 속성
Cwd: 현재 작업 디렉터리를 터미널에 보고합니다.IsWindows: 터미널이 winpty 또는 conpty와 같은 Windows 백엔드를 사용하는지 여부를 나타냅니다. 이를 사용하여 추가 휴리스틱을 활성화할 수 있습니다. 셸 통합 시퀀스의 위치가 올바르게 보장되지 않기 때문입니다. 유효한 값은True와False입니다.HasRichCommandDetection: 터미널이 풍부한 명령 감지 기능을 가지고 있는지 여부를 나타냅니다. 이 속성은 셸 통합 스크립트가 VS Code가 예상하는 대로 이상적으로 작동할 때True로 설정됩니다. 특히 시퀀스는A, B, E, C, D순서로 예상 위치에 있어야 합니다.
Final Term 셸 통합
VS Code는 Final Term의 셸 통합 시퀀스를 지원하므로 VS Code가 아닌 셸 통합 스크립트도 VS Code에서 작동할 수 있습니다. 이로 인해 OSC 633만큼 많은 기능을 지원하지 않으므로 경험이 다소 저하됩니다. 지원되는 특정 시퀀스는 다음과 같습니다.
OSC 133 ; A ST: 프롬프트 시작 표시.OSC 133 ; B ST: 프롬프트 끝 표시.OSC 133 ; C ST: 실행 전 표시.OSC 133 ; D [; <exitcode>] ST: 선택적 종료 코드와 함께 실행 완료 표시.
iTerm2 셸 통합
iTerm2가 선도한 다음 시퀀스를 지원합니다.
-
OSC 1337 ; CurrentDir=<Cwd> S:OSC 633 ; P ; Cwd=<Cwd> ST와 유사하게 터미널의 현재 작업 디렉터리를 설정합니다. -
OSC 1337 ; SetMark ST: 트리거된 줄 왼쪽에 표시를 추가하고 스크롤 바에 주석을 추가합니다.
이러한 표시는 명령 탐색과 통합되어 ⌘↑ (Windows, Linux Ctrl+Up) 및 ⌘↓ (Windows, Linux Ctrl+Down)을(를) 통해 쉽게 탐색할 수 있도록 합니다.
자주 묻는 질문
자동 주입이 작동하지 않는 경우는 언제입니까?
자동 주입이 작동하지 않는 몇 가지 경우가 있습니다. 일반적인 경우는 다음과 같습니다.
-
$PROMPT_COMMAND가 지원되지 않는 형식입니다. 단일 함수를 가리키도록 변경하는 것이 쉬운 해결 방법입니다. 예를 들면 다음과 같습니다.prompt() { printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}" } PROMPT_COMMAND=prompt -
일부 셸 플러그인은 초기화 시
$VSCODE_SHELL_INTEGRATION을(를) 해제하여 VS Code의 셸 통합을 명시적으로 비활성화할 수 있습니다.
기능이 비활성화되었을 때 명령 장식이 표시되는 이유는 무엇입니까?
이것의 가능한 원인은 시스템에 다른 터미널에 대한 셸 통합이 설치되어 있고 VS Code가 이해하는 것입니다. 장식을 원하지 않으면 다음 설정을 사용하여 숨길 수 있습니다.
"terminal.integrated.shellIntegration.decorationsEnabled": never
대안으로, 셸 rc/시작 스크립트에서 셸 통합 스크립트를 제거할 수 있지만, 명령 탐색과 같은 명령 인식 기능에 대한 액세스 권한을 잃게 됩니다.
Windows에서 명령 장식이 흔들리는 이유는 무엇입니까?
Windows는 ConPTY라는 에뮬레이트된 의사 터미널(pty) 백엔드를 사용합니다. Windows 콘솔 API와의 호환성을 유지해야 하므로 일반 pty와는 조금 다르게 작동합니다. 이로 인한 영향 중 하나는 pty가 특수하게 렌더링을 처리하여 터미널 버퍼에서 명령을 식별하는 셸 통합 시퀀스가 잘못 배치될 수 있다는 것입니다. 명령이 흔들릴 때는 일반적으로 명령이 실행된 후이며 VS Code의 휴리스틱이 명령 장식의 위치를 개선하기 위해 트리거됩니다.