about_Tab_Expansion — Tab 키 입력 완성

about_Tab_Expansion — Tab 키 입력 완성

PowerShell을 쓰다 보면 명령어나 경로를 일일이 다 타이핑하기 귀찮을 때가 많죠. 그럴 때 Tab 키를 누르면 PowerShell이 알아서 나머지를 채워줘요. 이번 글에서는 이 Tab 확장(Tab expansion) 기능이 기본적으로 어떻게 동작하는지 하나씩 살펴볼게요.

출처: about_Tab_Expansion - Microsoft Learn

본문

짧은 설명

PowerShell은 입력할 때 완성 기능을 제공해서 힌트를 주고, 탐색을 돕고, 입력 속도를 높여줘요. 명령 이름, 매개 변수 이름, 인자 값, 파일 경로 모두 Tab 키를 눌러서 완성할 수 있어요.

자세한 설명

Tab 확장은 내부 함수인 TabExpansion2가 담당하고 있어요. 이 함수는 수정하거나 재정의할 수 있기 때문에, 이 문서는 기본 PowerShell 구성에서의 동작을 안내하는 안내서라고 보면 돼요.

Tab 확장 동작은 PSReadLine 모듈의 Predictive IntelliSense 기능으로도 바꿀 수 있어요. 자세한 내용은 Predictive IntelliSense를 참고하세요.

Tab 키는 Windows에서 기본 키 바인딩이에요. 키 바인딩은 PSReadLine 모듈이나 PowerShell을 호스팅하는 애플리케이션으로 변경할 수 있어요. 키 바인딩은 Windows가 아닌 플랫폼에서는 다르게 동작해요. 자세한 내용은 about_PSReadLine을 참고하세요.

참고 — 탭 확장 과정의 한 가지 제한이 있는데, 탭은 항상 단어를 완성하려는 시도로 해석돼요. 예제 명령을 PowerShell 콘솔에 복사·붙여넣기할 때는 샘플에 탭 문자가 들어 있지 않은지 꼭 확인하세요. 탭이 들어 있으면 결과가 예측 불가능해지고, 원하는 결과가 거의 확실히 나오지 않을 거예요.

파일·Cmdlet 이름 완성

파일 이름이나 경로를 목록에서 자동으로 채우려면 이름 일부를 입력하고 Tab 키를 누르면 돼요. PowerShell이 찾은 첫 번째 일치 항목으로 자동으로 확장하죠. Tab 키를 계속 누르면 가능한 선택지를 차례로 순환해서 보여줘요.

경로 맨 앞에 물결표(~)가 오면 PowerShell은 그걸 사용자의 홈 디렉터리로 해석해요. 이 해석은 Linux·macOS 시스템에서 흔히 쓰이는데, Windows의 많은 네이티브 명령은 이 해석을 사용하지 않아요. Windows에서 PowerShell 7.5-preview.3부터는 Tab 완성 시 물결표가 $HOME으로 확장돼요. 이 확장은 Windows 네이티브 명령에서도 동작해요.

Cmdlet 이름 완성

Cmdlet 이름의 탭 확장은 조금 다른 방식이에요. Cmdlet 이름에 탭 확장을 쓰려면 이름의 앞부분(동사)과 그 뒤의 하이픈까지 전체를 입력해야 해요. 부분 일치를 위해 이름을 더 채울 수도 있어요.

예를 들어 get-co를 입력하고 Tab 키를 누르면, PowerShell이 자동으로 Get-Command cmdlet으로 확장해줘요. 이때 글자 대소문자도 표준 형태로 바뀌는 걸 눈여겨보세요. Tab 키를 다시 누르면 유일하게 일치하는 다른 cmdlet 이름인 Get-Content로 바꿔줘요.

참고 — PowerShell 7.0부터 Tab은 축약된 cmdlet과 함수도 확장해줘요. 예를 들어 i-psdf<tab>Import-PowerShellDataFile을 반환해요.

Tab 완성은 PowerShell 별칭(alias)과 네이티브 실행 파일을 찾는 데도 동작해요. 같은 줄에서 탭 확장을 계속해서 쓸 수도 있어요. Get-Content cmdlet 이름에 탭 확장을 쓰는 예를 볼게요.

예제

PS> Get-Con<Tab>

Tab 키를 누르면 명령이 이렇게 확장돼요:

PS> Get-Content

그다음 Active Setup 로그 파일의 경로를 일부 지정하고 다시 탭 확장을 쓸 수 있어요:

PS> Get-Content C:\windows\acts<Tab>

Tab 키를 누르면 명령이 이렇게 확장돼요:

PS> Get-Content C:\windows\actsetup.log

PSReadLine에는 메뉴 완성 기능도 있어요. Windows에서 기본 키 바인딩은 Ctrl+Space예요.

PS> fore<Ctrl-Space>

Ctrl+Space를 누르면 PowerShell이 일치하는 값의 전체 목록을 메뉴로 보여줘요:

PS> foreach
foreach         ForEach-Object  foreach.cmd

이 예에서 문자열 'fore'foreach(PowerShell 별칭), ForEach-Object(cmdlet), foreach.cmd(네이티브 명령)에 일치해요. 화살표 키로 원하는 값을 선택하면 돼요.

매개 변수 인자 완성

Tab 완성은 매개 변수의 인자를 완성하는 데도 동작해요. Tab 키를 눌러 특정 매개 변수에 유효한 값 목록을 순환하면 되죠. 자세한 내용은 about_Functions_Argument_Completion을 참고하세요.

열거형(Enum) 값 완성

PowerShell 7.0부터 열거형의 탭 완성을 지원해요. enum을 사용하는 어디에서든 탭 완성으로 원하는 값을 고를 수 있어요. 예를 들어:

enum Suits {
    Clubs = 0
    Diamonds = 1
    Hearts = 2
    Spades = 3
}

[Suits]$suit = 'c<Tab>

열거형 값은 문자열이기 때문에 완성할 값은 단일 또는 이중 따옴표 문자로 시작해야 해요. Tab 키를 누르면 다음과 같은 결과가 나와요:

[Suits]$suit = 'Clubs'

Tab 완성은 .NET 열거형에서도 동작해요.

[System.IO.FileAttributes]$attr = 'S<Tab><Tab>

Tab 키를 두 번 누르면 문자 S로 시작하는 두 값을 순환해요. 최종 결과는 이렇게 돼요:

[System.IO.FileAttributes]$attr = 'System'

PowerShell 7.0부터 변수에 값을 할당할 때 ValidateSet 값의 탭 확장도 추가됐어요. 예를 들어 다음과 같은 변수 정의를 입력하는 중이라면:

[ValidateSet('Chocolate', 'Strawberry', 'Vanilla')]
[string]$flavor = 'Strawberry'
$flavor = <tab>

Tab 키를 누르면 다음과 같은 결과가 나와요:

$flavor = 'Chocolate'

주석 기반 키워드의 탭 완성

PowerShell 7.2부터 #Requires 매개 변수와 주석 기반 도움말 키워드의 탭 완성을 지원해요.

#Requires 문 예제

#Requires -<Ctrl-Space>

메뉴 확장이 다음 매개 변수 옵션을 보여줘요:

#Requires -<Ctrl-Space>
Modules     PSEdition     RunAsAdministrator    Version

주석 기반 도움말 예제

<#
    .<Ctrl-Space>

메뉴 확장이 다음 키워드 옵션을 보여줘요:

<#
    .COMPONENT
COMPONENT      EXTERNALHELP           FUNCTIONALITY     NOTES         REMOTEHELPRUNSPACE
DESCRIPTION    FORWARDHELPCATEGORY    INPUTS            OUTPUTS       ROLE
EXAMPLE        FORWARDHELPTARGETNAME  LINK              PARAMETER     SYNOPSIS

더 알아보기