about_Tab_Expansion — Tab 키 입력 완성
about_Tab_Expansion — Tab 키 입력 완성
PowerShell을 쓰다 보면 명령어나 경로를 일일이 다 타이핑하기 귀찮을 때가 많죠. 그럴 때 Tab 키를 누르면 PowerShell이 알아서 나머지를 채워줘요. 이번 글에서는 이 Tab 확장(Tab expansion) 기능이 기본적으로 어떻게 동작하는지 하나씩 살펴볼게요.
본문
짧은 설명
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