PSReadLine
about_PSReadLine
간단한 설명
PSReadLine은 PowerShell 콘솔에서 향상된 명령줄 편집 환경을 제공합니다.
자세한 설명
PSReadLine은 PowerShell 콘솔에 대한 강력한 명령줄 편집 환경을 제공합니다. 이 콘솔은 다음과 같은 기능을 제공합니다.
- 명령줄의 구문 색 지정
- 구문 오류의 시각적 표시
- 더 나은 여러 줄 환경(편집 및 기록 모두)
- 사용자 지정 가능한 키 바인딩
- Cmd 및 Emacs 모드
- 많은 구성 옵션
- Bash 스타일 완성(Cmd 모드에서 선택 사항, Emacs 모드의 기본값)
- 에맥스 양크/킬 링
- PowerShell 토큰 기반 "단어" 이동 및 종료
다음 함수는 [Microsoft.PowerShell.PSConsoleReadLine] 클래스에서 사용할 수 있습니다.
커서 이동
EndOfLine
- Cmd:
<End>
- Emacs:
<End>
또는<Ctrl+E>
입력에 여러 줄이 있는 경우 현재 줄의 끝으로 이동하거나 줄 끝에 이미 있는 경우 입력의 끝으로 이동합니다. 입력에 한 줄이 있는 경우 입력의 끝으로 이동합니다.
BeginningOfLine
- Cmd:
<Home>
- Emacs:
<Home>
또는<Ctrl+A>
입력에 여러 줄이 있는 경우 현재 줄의 시작으로 이동하거나 줄의 시작 부분에 이미 있는 경우 입력의 시작으로 이동합니다. 입력에 한 줄이 있는 경우 입력의 시작으로 이동합니다.
NextLine
- Cmd: 언바운드
- Emacs: unbound
입력에 여러 줄이 있는 경우 커서를 다음 줄로 이동합니다.
PreviousLine
- Cmd: 언바운드
- Emacs: unbound
입력에 여러 줄이 있는 경우 커서를 이전 줄로 이동합니다.
ForwardChar
- Cmd:
<RightArrow>
- Emacs:
<RightArrow>
또는<Ctrl+F>
커서를 오른쪽으로 한 문자 이동합니다. 커서를 여러 줄 입력의 다음 줄로 이동할 수 있습니다.
BackwardChar
- Cmd:
<LeftArrow>
- Emacs:
<LeftArrow>
또는<Ctrl+B>
커서를 한 문자 왼쪽으로 이동합니다. 이렇게 하면 커서가 이전의 여러 줄 입력 줄로 이동할 수 있습니다.
ForwardWord
- Cmd: 언바운드
- 이맥스:
<Alt+F>
커서를 현재 단어의 끝으로 앞으로 이동하거나 단어 사이에 있는 경우 다음 단어의 끝으로 이동합니다. 다음을 사용하여 단어 구분 기호 문자를 설정할 수 있습니다.
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
NextWord
- Cmd:
<Ctrl+RightArrow>
- Emacs: unbound
커서를 다음 단어의 시작 부분까지 앞으로 이동합니다. 다음을 사용하여 단어 구분 기호 문자를 설정할 수 있습니다.
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
BackwardWord
- Cmd:
<Ctrl+LeftArrow>
- 이맥스:
<Alt+B>
커서를 현재 단어의 시작으로 다시 이동하거나 단어 사이에 이전 단어의 시작 부분까지 이동합니다. 다음을 사용하여 단어 구분 기호 문자를 설정할 수 있습니다.
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
ShellForwardWord
- Cmd: 언바운드
- Emacs: unbound
단어 경계를 제외한 ForwardWord와 마찬가지로 PowerShell 토큰 경계에 의해 정의됩니다.
ShellNextWord
- Cmd: 언바운드
- Emacs: unbound
단어 경계를 제외한 NextWord와 마찬가지로 PowerShell 토큰 경계에 의해 정의됩니다.
ShellBackwardWord
- Cmd: 언바운드
- Emacs: unbound
Word 경계를 제외한 BackwardWord와 마찬가지로 PowerShell 토큰 경계에 의해 정의됩니다.
GotoBrace
- Cmd:
<Ctrl+}>
- Emacs: unbound
일치하는 괄호, 중괄호 또는 대괄호로 이동합니다.
AddLine
- Cmd:
<Shift-Enter>
- 이맥스:
<Shift-Enter>
연속 프롬프트가 다음 줄에 표시되고 PSReadLine은 키가 현재 입력을 편집할 때까지 기다립니다. 이는 한 줄만으로 입력이 완료된 경우에도 여러 줄 입력을 단일 명령으로 입력하는 데 유용합니다.
기본 편집
CancelLine
- Cmd: 언바운드
- Emacs: unbound
줄에 대한 모든 편집을 취소하고 입력 줄을 화면에 그대로 두고 입력을 실행하지 않고 PSReadLine에서 반환합니다.
RevertLine
- Cmd:
<ESC>
- 이맥스:
<Alt+R>
마지막 입력이 수락되고 실행된 후 모든 입력을 되돌려 줍니다. 실행 취소할 항목이 없을 때까지 실행 취소 명령을 사용하는 것과 같습니다.
BackwardDeleteChar
- Cmd:
<Backspace>
- Emacs:
<Backspace>
또는<Ctrl+H>
커서 앞에 있는 문자를 삭제합니다.
DeleteChar
- Cmd:
<Delete>
- 이맥스:
<Delete>
커서 아래의 문자를 삭제합니다.
DeleteCharOrExit
- Cmd: 언바운드
- 이맥스:
<Ctrl+D>
DeleteChar와 마찬가지로 줄이 비어 있지 않으면 프로세스를 종료합니다.
AcceptLine
- Cmd:
<Enter>
- Emacs:
<Enter>
또는<Ctrl+M>
현재 입력을 실행하려고 합니다. 현재 입력이 불완전한 경우(예: 닫는 괄호, 대괄호 또는 따옴표가 누락됨) 연속 프롬프트가 다음 줄에 표시되고 PSReadLine은 키가 현재 입력을 편집할 때까지 기다립니다.
AcceptAndGetNext
- Cmd: 언바운드
- 이맥스:
<Ctrl+O>
AcceptLine과 비슷하지만 줄이 완료되면 기록에서 다음 줄 편집을 시작합니다.
ValidateAndAcceptLine
- Cmd: 언바운드
- Emacs: unbound
AcceptLine과 비슷하지만 다음을 비롯한 추가 유효성 검사를 수행합니다.
- 추가 구문 분석 오류 확인
- 명령 이름이 모두 있는지 확인합니다.
- PowerShell 4.0 이상을 실행하는 경우 매개 변수 및 인수의 유효성을 검사합니다.
오류가 있는 경우 오류 메시지가 표시되는 동안 명령줄을 수정하거나 AcceptLine 또는 ValidateAndAcceptLine을 다시 실행하지 않는 한 오류 메시지가 표시되고 허용되거나 기록에 추가되지 않습니다.
BackwardDeleteLine
- Cmd:
<Ctrl+Home>
- Emacs: unbound
입력의 시작 부분부터 커서까지 텍스트를 삭제합니다.
ForwardDeleteLine
- Cmd:
<Ctrl+End>
- Emacs: unbound
커서에서 입력 끝까지 텍스트를 삭제합니다.
SelectBackwardChar
- Cmd:
<Shift+LeftArrow>
- 이맥스:
<Shift+LeftArrow>
이전 문자를 포함하도록 현재 선택 영역을 조정합니다.
SelectForwardChar
- Cmd:
<Shift+RightArrow>
- 이맥스:
<Shift+RightArrow>
다음 문자를 포함하도록 현재 선택 영역을 조정합니다.
BackwardWord를 선택합니다.
- Cmd:
<Shift+Ctrl+LeftArrow>
- 이맥스:
<Alt+Shift+B>
이전 단어를 포함하도록 현재 선택 영역을 조정합니다.
SelectForwardWord
- Cmd: 언바운드
- 이맥스:
<Alt+Shift+F>
ForwardWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.
SelectNextWord
- Cmd:
<Shift+Ctrl+RightArrow>
- Emacs: unbound
NextWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.
ShellForwardWord를 선택합니다.
- Cmd: 언바운드
- Emacs: unbound
ShellForwardWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.
ShellNextWord를 선택합니다.
- Cmd: 언바운드
- Emacs: unbound
ShellNextWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.
ShellBackwardWord를 선택합니다.
- Cmd: 언바운드
- Emacs: unbound
ShellBackwardWord를 사용하여 이전 단어를 포함하도록 현재 선택 영역을 조정합니다.
SelectBackwardsLine
- Cmd:
<Shift+Home>
- 이맥스:
<Shift+Home>
커서에서 줄의 시작 부분에 포함할 현재 선택 영역을 조정합니다.
SelectLine
- Cmd:
<Shift+End>
- 이맥스:
<Shift+End>
커서에서 줄 끝까지 포함하도록 현재 선택 영역을 조정합니다.
SelectAll
- Cmd:
<Ctrl+A>
- Emacs: unbound
전체 줄을 선택합니다. 커서를 줄의 끝으로 이동합니다.
SelfInsert
- Cmd:
<a>
,<b>
, ... - Emacs:
<a>
,<b>
, ...
입력한 키를 삽입합니다.
다시 실행
- Cmd:
<Ctrl+Y>
- Emacs: unbound
실행 취소로 실행 취소된 삽입 또는 삭제를 다시 실행합니다.
실행 취소
- Cmd:
<Ctrl+Z>
- 이맥스:
<Ctrl+_>
이전 삽입 또는 삭제를 실행 취소합니다.
기록
ClearHistory
- Cmd:
<Alt+F7>
- Emacs: unbound
PSReadLine에서 기록을 지웁니다. PowerShell 기록에는 영향을 주지 않습니다.
PreviousHistory
- Cmd:
<UpArrow>
- Emacs:
<UpArrow>
또는<Ctrl+P>
현재 입력을 PSReadLine 기록의 이전 항목으로 바꿉니다.
NextHistory
- Cmd:
<DownArrow>
- Emacs:
<DownArrow>
또는<Ctrl+N>
현재 입력을 PSReadLine 기록의 다음 항목으로 바꿉니다.
ForwardSearchHistory
- Cmd:
<Ctrl+S>
- 이맥스:
<Ctrl+S>
현재 기록 줄에서 대화형으로 앞으로 Search.
ReverseSearchHistory
- Cmd:
<Ctrl+R>
- 이맥스:
<Ctrl+R>
대화형으로 현재 기록 줄에서 뒤로 Search.
HistorySearchBackward
- Cmd:
<F8>
- Emacs: unbound
현재 입력을 시작과 입력 및 커서 사이의 문자와 일치하는 PSReadLine 기록의 이전 항목으로 바꿉니다.
HistorySearchForward
- Cmd:
<Shift+F8>
- Emacs: unbound
현재 입력을 시작과 입력 및 커서 사이의 문자와 일치하는 PSReadLine 기록의 다음 항목으로 바꿉니다.
BeginningOfHistory
- Cmd: 언바운드
- 이맥스:
<Alt+<>
현재 입력을 PSReadLine 기록의 마지막 항목으로 바꿉니다.
EndOfHistory
- Cmd: 언바운드
- 이맥스:
<Alt+>>
현재 입력을 기록 명령 전에 입력된 빈 입력인 PSReadLine 기록의 마지막 항목으로 바꿉니다.
탭 완성
TabCompleteNext
- Cmd:
<Tab>
- Emacs: unbound
커서를 둘러싼 텍스트를 다음으로 사용할 수 있는 완료로 완료하려고 시도합니다.
TabCompletePrevious
- Cmd:
<Shift-Tab>
- Emacs: unbound
커서를 둘러싼 텍스트를 다음 이전 완료와 함께 완료하려고 시도합니다.
완료
- Cmd: 언바운드
- 이맥스:
<Tab>
커서를 둘러싼 텍스트에서 완료를 수행하려고 시도합니다. 가능한 완료가 여러 번 있는 경우 완료에 가장 긴 명확한 접두사를 사용합니다. 가장 긴 명확한 완료를 완료하려는 경우 가능한 완료 목록이 표시됩니다.
MenuComplete
- Cmd:
<Ctrl+Space>
- 이맥스:
<Ctrl+Space>
커서를 둘러싼 텍스트에서 완료를 수행하려고 시도합니다. 가능한 완료가 여러 개 있는 경우 가능한 완성 목록이 표시되고 화살표 키 또는 Tab/Shift+Tab을 사용하여 올바른 완성을 선택할 수 있습니다. 이스케이프 및 Ctrl+G는 메뉴 선택을 취소하고 MenuComplete를 호출하기 전에 줄을 상태로 되돌리기.
PossibleCompletions
- Cmd: 언바운드
- 이맥스:
<Alt+Equals>
가능한 완료 목록을 표시합니다.
SetMark
- Cmd: 언바운드
- 이맥스:
<Alt+Space>
후속 편집 명령에서 사용할 커서의 현재 위치를 표시합니다.
ExchangePointAndMark
- Cmd: 언바운드
- 이맥스:
<Ctrl+X,Ctrl+X>
커서는 표시 위치에 배치되고 표시는 커서의 위치로 이동됩니다.
킬/얀크
Kill 및 Yank는 PSReadLine 모듈의 클립보드에서 작동합니다. 킬 링이라는 링 버퍼가 있습니다 - 종료 된 텍스트가 킬 링 업에 추가되고 yank는 가장 최근의 킬에서 텍스트를 복사합니다. YankPop은 킬 링의 항목을 순환합니다. 킬 링이 가득 차면 새 항목이 가장 오래된 항목을 대체합니다. 다른 킬 작업 바로 앞에 오는 킬 연산은 새 항목을 추가하거나 킬 링의 항목을 바꾸는 대신 이전 킬을 추가합니다. 예를 들어 여러 KillWord 연산을 사용하여 선의 일부를 잘라 다른 곳에서 단일 양크로 다시 잘라내는 방법입니다.
KillLine
- Cmd: 언바운드
- 이맥스:
<Ctrl+K>
커서에서 줄 끝까지 입력을 지웁니다. 지워진 텍스트는 킬 링에 배치됩니다.
BackwardKillLine
- Cmd: 언바운드
- Emacs:
<Ctrl+U>
또는<Ctrl+X,Backspace>
입력 시작부터 커서까지 입력을 지웁니다. 지워진 텍스트는 킬 링에 배치됩니다.
KillWord
- Cmd: 언바운드
- 이맥스:
<Alt+D>
커서에서 현재 단어의 끝으로 입력을 지웁니다. 커서가 단어 사이에 있으면 커서에서 다음 단어의 끝으로 입력이 지워집니다. 지워진 텍스트는 킬 링에 배치됩니다.
BackwardKillWord
- Cmd: 언바운드
- 이맥스:
<Alt+Backspace>
현재 단어의 시작 부분부터 커서까지 입력을 지웁니다. 커서가 단어 사이에 있으면 입력이 이전 단어의 시작에서 커서로 지워집니다. 지워진 텍스트는 킬 링에 배치됩니다.
ShellKillWord
- Cmd: 언바운드
- Emacs: unbound
KillWord와 마찬가지로 단어 경계는 PowerShell 토큰 경계로 정의됩니다.
ShellBackwardKillWord
- Cmd: 언바운드
- Emacs: unbound
Word 경계를 제외하고 BackwardKillWord와 마찬가지로 PowerShell 토큰 경계에 의해 정의됩니다.
UnixWordRubout
- Cmd: 언바운드
- 이맥스:
<Ctrl+W>
BackwardKillWord와 마찬가지로 단어 경계는 공백으로 정의됩니다.
KillRegion
- Cmd: 언바운드
- Emacs: 언바운드
커서와 표시 사이의 텍스트를 종료합니다.
복사
- Cmd:
<Ctrl+Shift+C>
- Emacs: 언바운드
선택한 지역을 시스템 클립보드에 복사합니다. 영역이 선택되지 않은 경우 전체 줄을 복사합니다.
CopyOrCancelLine
- Cmd:
<Ctrl+C>
- 이맥스:
<Ctrl+C>
선택한 텍스트를 클립보드에 복사하거나 텍스트가 선택되지 않은 경우 CancelLine을 사용하여 줄 편집을 취소합니다.
잘라내기
- Cmd:
<Ctrl+X>
- Emacs: 언바운드
시스템 클립보드에 삭제된 텍스트를 배치하는 선택한 영역을 삭제합니다.
십중팔구
- Cmd: 언바운드
- 이맥스:
<Ctrl+Y>
가장 최근에 종료된 텍스트를 입력에 추가합니다.
YankPop
- Cmd: 언바운드
- 이맥스:
<Alt+Y>
이전 작업이 Yank 또는 YankPop인 경우 이전에 양살된 텍스트를 킬 링의 다음 종료 텍스트로 바꿉다.
ClearKillRing
- Cmd: 언바운드
- Emacs: 언바운드
킬 링의 내용이 지워집니다.
붙여넣기
- Cmd:
<Ctrl+V>
- Emacs: 언바운드
이는 Yank와 비슷하지만 킬 링 대신 시스템 클립보드를 사용합니다.
[!IMPORTANT]
붙여넣기 함수를 사용하는 경우 클립보드 버퍼의 전체 내용이 PSReadLine의 입력 버퍼에 붙여넣습니다. 그런 다음 입력 버퍼가 PowerShell 파서에 전달됩니다. 콘솔 애플리케이션의 오른쪽 클릭 붙여넣 기 메서드를 사용하여 붙여넣은 입력은 입력 버퍼에 한 번에 한 문자씩 복사됩니다. 입력 버퍼는 줄 바꿈 문자가 복사될 때 파서에 전달됩니다. 따라서 입력은 한 번에 한 줄로 구문 분석됩니다. 붙여넣기 메서드 간의 차이로 인해 실행 동작이 달라집니다.
YankLastArg
- Cmd:
<Alt+.>
- Emacs:
<Alt+.>
,<Alt+_>
기록에서 이전 명령의 마지막 인수를 삽입합니다. 반복된 연산은 마지막으로 삽입된 인수를 이전 명령의 마지막 인수로 바꿉니다(Alt+). Alt+. 는 두 번째에서 마지막 기록 줄의 마지막 인수를 삽입합니다.)
인수를 사용하면 처음으로 YankLastArg가 YankNthArg처럼 동작합니다. 후속 YankLastArg 호출에 대한 부정적인 인수는 역사를 거치는 동안 방향을 변경합니다. 예를 들어 Alt+를 누르면 됩니다. Alt+- Alt+를 입력할 수 있습니다. 방향을 반대로 하려면 입니다.
인수는 PowerShell 토큰을 기반으로 합니다.
YankNthArg
- Cmd: 언바운드
- 이맥스:
<Alt+Ctrl+Y>
기록에서 이전 명령의 첫 번째 인수(명령 이름이 아님)를 삽입합니다.
인수를 사용하여 nth 인수를 삽입합니다. 여기서 0은 일반적으로 명령입니다. 음수 인수는 끝에서 시작합니다.
인수는 PowerShell 토큰을 기반으로 합니다.
기타
중단
- Cmd: 언바운드
- 이맥스:
<Ctrl+G>
현재 작업을 중단합니다. 예를 들어 대화형 기록 검색을 중지합니다. CancelLine과 같은 입력은 취소하지 않습니다.
CharacterSearch
- Cmd:
<F3>
- 이맥스:
<Ctrl+]>
키를 읽고 해당 문자를 검색합니다. 인수를 사용하여 검색은 해당 인수의 n번째 발생을 전달합니다. 음수 인수를 사용하여 뒤로 검색합니다.
CharacterSearchBackward
- Cmd:
<Shift+F3>
- 이맥스:
<Alt+Ctrl+]>
CharacterSearch와 비슷하지만 뒤로 검색합니다. 음수 인수를 사용하여 앞으로 검색합니다.
ClearScreen
- Cmd:
<Ctrl+L>
- 이맥스:
<Ctrl+L>
화면을 지우고 화면 맨 위에 현재 프롬프트와 입력을 표시합니다.
DigitArgument
- Cmd: 언바운드
- Emacs:
<Alt+[0..9]>
,<any char>
,<Alt+->
CharacterSearch 또는 YankNthArg와 같은 함수에 숫자 인수를 전달하는 데 사용됩니다. Alt+- 인수를 음수/음수가 아닌 값으로 전환합니다. 80 '*' 문자를 입력하려면 Alt+8 Alt+0 *을 입력할 수 있습니다.
CaptureScreen
- Cmd: 언바운드
- Emacs: 언바운드
선택한 줄을 텍스트 및 RTF 형식으로 클립보드에 복사합니다. 첫 번째 줄에 위쪽/아래쪽 화살표 키를 사용하여 선택한 다음 Shift+UpArrow/Shift+DownArrow를 사용하여 여러 줄을 선택합니다. 선택한 후 Enter 키를 눌러 텍스트를 복사합니다. 이스케이프/Ctrl+C/Ctrl+G는 작업을 취소하므로 아무 것도 클립보드에 복사되지 않습니다.
InvokePrompt
- Cmd: 언바운드
- Emacs: 언바운드
현재 프롬프트를 지우고 프롬프트 함수를 호출하여 프롬프트를 다시 표시합니다. 현재 디렉터리 변경과 같이 상태를 변경하는 사용자 지정 키 처리기에 유용합니다.
WhatIsKey
- Cmd:
<Alt+?>
- 이맥스:
<Alt+?>
키 또는 코드를 읽고 키 바인딩을 표시합니다.
ShowKeyBindings
- Cmd:
<Ctrl+Alt+?>
- 이맥스:
<Ctrl+Alt+?>
현재 바인딩된 모든 키를 표시합니다.
ScrollDisplayUp
- Cmd:
<PageUp>
- 이맥스:
<PageUp>
디스플레이를 한 화면 위로 스크롤합니다.
ScrollDisplayUpLine
- Cmd:
<Ctrl+PageUp>
- 이맥스:
<Ctrl+PageUp>
디스플레이를 한 줄 위로 스크롤합니다.
ScrollDisplayDown
- Cmd:
<PageDown>
- 이맥스:
<PageDown>
디스플레이를 한 화면 아래로 스크롤합니다.
ScrollDisplayDownLine
- Cmd:
<Ctrl+PageDown>
- 이맥스:
<Ctrl+PageDown>
디스플레이를 한 줄 아래로 스크롤합니다.
ScrollDisplayTop
- Cmd: 언바운드
- 이맥스:
<Ctrl+Home>
디스플레이를 위쪽으로 스크롤합니다.
ScrollDisplayToCursor
- Cmd: 언바운드
- 이맥스:
<Ctrl+End>
디스플레이를 커서로 스크롤합니다.
사용자 지정 키 바인딩
PSReadLine은 cmdlet Set-PSReadLineKeyHandler
을 사용하여 사용자 지정 키 바인딩을 지원합니다. 대부분의 사용자 지정 키 바인딩은 위의 함수 중 하나를 호출합니다(예: ).
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
ScriptBlock을 키에 바인딩할 수 있습니다. ScriptBlock은 원하는 모든 작업을 수행할 수 있습니다. 몇 가지 유용한 예는 다음과 같습니다.
- 명령줄 편집
- 새 창 열기(예: 도움말)
- 명령줄을 변경하지 않고 디렉터리 변경
ScriptBlock은 두 개의 인수를 받습니다.
$key
- 사용자 지정 바인딩을 트리거한 키인 [ConsoleKeyInfo] 개체입니다. 동일한 ScriptBlock을 여러 키에 바인딩하고 키에 따라 다른 작업을 수행해야 하는 경우 검사 $key 수 있습니다. 많은 사용자 지정 바인딩은 이 인수를 무시합니다.$arg
- 임의의 인수입니다. 대부분의 경우 사용자가 키 바인딩 DigitArgument에서 전달하는 정수 인수입니다. 바인딩에서 인수를 허용하지 않는 경우 이 인수를 무시하는 것이 좋습니다.
명령줄을 실행하지 않고 기록에 추가하는 예제를 살펴보겠습니다. 이 기능은 작업을 수행하는 것을 잊어버렸지만 이미 입력한 명령줄을 다시 입력하지 않으려는 경우에 유용합니다.
$parameters = @{
Key = 'Alt+w'
BriefDescription = 'SaveInHistory'
LongDescription = 'Save current line in history but do not execute'
ScriptBlock = {
param($key, $arg) # The arguments are ignored in this example
# GetBufferState gives us the command line (with the cursor position)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
[ref]$cursor)
# AddToHistory saves the line in history, but does not execute it.
[Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)
# RevertLine is like pressing Escape.
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
}
}
Set-PSReadLineKeyHandler @parameters
PSReadLine 모듈 폴더에 설치된 파일 SamplePSReadLineProfile.ps1
에서 더 많은 예제를 볼 수 있습니다.
대부분의 키 바인딩은 명령줄을 편집하는 데 몇 가지 도우미 함수를 사용합니다. 이러한 API는 다음 섹션에 설명되어 있습니다.
사용자 지정 키 바인딩 지원 API
다음 함수는 Microsoft.PowerShell.PSConsoleReadLine에서 공용이지만 키에 직접 바인딩할 수는 없습니다. 대부분은 사용자 지정 키 바인딩에 유용합니다.
void AddToHistory(string command)
명령줄을 실행하지 않고 기록에 추가합니다.
void ClearKillRing()
킬 링을 지웁다. 이는 주로 테스트에 사용됩니다.
void Delete(int start, int length)
시작부터 길이 문자를 삭제합니다. 이 작업은 실행 취소/다시 실행을 지원합니다.
void Ding()
사용자 기본 설정에 따라 Ding 작업을 수행합니다.
void GetBufferState([ref] string input, [ref] int cursor)
void GetBufferState([ref] Ast ast, [ref] Token[] tokens,
[ref] ParseError[] parseErrors, [ref] int cursor)
이 두 함수는 입력 버퍼의 현재 상태에 대한 유용한 정보를 검색합니다. 첫 번째는 간단한 사례에 더 일반적으로 사용됩니다. 두 번째는 바인딩이 Ast를 사용하여 고급 작업을 수행하는 경우에 사용됩니다.
IEnumerable[Microsoft.PowerShell.KeyHandler]
GetKeyHandlers(bool includeBound, bool includeUnbound)
이 함수는 Get-PSReadLineKeyHandler 사용되며 사용자 지정 키 바인딩에는 유용하지 않을 수 있습니다.
Microsoft.PowerShell.PSConsoleReadLineOptions GetOptions()
이 함수는 Get-PSReadLineOption 사용되며 사용자 지정 키 바인딩에 너무 유용하지 않을 수 있습니다.
void GetSelectionState([ref] int start, [ref] int length)
명령줄에 선택 항목이 없으면 시작과 길이 모두에서 -1이 반환됩니다. 명령줄에 선택 영역이 있는 경우 선택 영역의 시작 및 길이가 반환됩니다.
void Insert(char c)
void Insert(string s)
커서에 문자 또는 문자열을 삽입합니다. 이 작업은 실행 취소/다시 실행을 지원합니다.
string ReadLine(runspace remoteRunspace,
System.Management.Automation.EngineIntrinsics engineIntrinsics)
PSReadLine에 대한 기본 진입점입니다. 재귀를 지원하지 않으므로 사용자 지정 키 바인딩에는 유용하지 않습니다.
void RemoveKeyHandler(string[] key)
이 함수는 Remove-PSReadLineKeyHandler 사용되며 사용자 지정 키 바인딩에 너무 유용하지 않을 수 있습니다.
void Replace(int start, int length, string replacement)
일부 입력을 바꿉다. 이 작업은 실행 취소/다시 실행을 지원합니다. 실행 취소에 대한 단일 작업으로 처리되므로 Delete 다음에 Insert를 사용하는 것이 좋습니다.
void SetCursorPosition(int cursor)
커서를 지정된 오프셋으로 이동합니다. 커서 이동은 실행 취소를 위해 추적되지 않습니다.
void SetOptions(Microsoft.PowerShell.SetPSReadLineOption options)
이 함수는 set-PSReadLineOption cmdlet에서 사용하는 도우미 메서드이지만 설정을 일시적으로 변경하려는 사용자 지정 키 바인딩에 유용할 수 있습니다.
bool TryGetArgAsInt(System.Object arg, [ref] int numericArg,
int defaultNumericArg)
이 도우미 메서드는 DigitArgument를 적용하는 사용자 지정 바인딩에 사용됩니다. 일반적인 호출은 다음과 같습니다.
[int]$numericArg = 0
[Microsoft.PowerShell.PSConsoleReadLine]::TryGetArgAsInt($arg,
[ref]$numericArg, 1)
참고
POWERSHELL 호환성
PSReadLine에는 PowerShell 3.0 이상 및 콘솔 호스트가 필요합니다. PowerShell ISE에서는 작동하지 않습니다. Visual Studio Code 콘솔에서 작동합니다.
명령 기록
PSReadLine은 명령줄에서 입력한 모든 명령과 데이터를 포함하는 기록 파일을 유지 관리합니다. 여기에는 암호를 포함한 중요한 데이터가 포함될 수 있습니다. 예를 들어 cmdlet을 ConvertTo-SecureString
사용하는 경우 암호는 기록 파일에 일반 텍스트로 기록됩니다. 기록 파일은 라는 $($host.Name)_history.txt
파일입니다. Windows 시스템에서 기록 파일은 에 $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
저장됩니다.
PSReadLine에 기여하는 피드백 &
자유롭게 끌어오기 요청을 제출하거나 GitHub 페이지에서 피드백을 제출하세요.
참고 항목
PSReadLine은 GNU 읽기 전용 라이브러리의 영향을 많이 받습니다.