다음을 통해 공유


PSReadLine

PSReadLine에 대하여

간단한 설명

PSReadLine은 PowerShell 콘솔에서 향상된 명령줄 편집 환경을 제공합니다.

자세한 설명

PSReadLine은 PowerShell 콘솔에 대한 강력한 명령줄 편집 환경을 제공합니다. 이 콘솔은 다음과 같은 기능을 제공합니다.

  • 명령줄의 구문 색 지정
  • 구문 오류의 시각적 표시
  • 더 나은 여러 줄 환경(편집 및 기록 모두)
  • 사용자 지정 가능한 키 바인딩
  • Cmd 및 Emacs 모드
  • 여러 구성 옵션
  • Bash 스타일 완성(Cmd 모드에서는 선택 사항, Emacs 모드에서는 기본값)
  • Emacs 잡아당기기/죽이기 반지
  • PowerShell 토큰 기반 "단어" 이동 및 죽이기

다음 함수는 [Microsoft.PowerShell.PSConsoleReadLine] 클래스에서 사용할 수 있습니다.

커서 이동

끝줄

  • cmd: <End>
  • Emacs: <End> 또는 <Ctrl+E>

입력에 여러 줄이 있는 경우 현재 줄의 끝으로 이동하거나 줄 끝에 이미 있는 경우 입력의 끝으로 이동합니다. 입력에 한 줄이 있는 경우 입력의 끝으로 이동합니다.

시작 부분

  • cmd: <Home>
  • Emacs: <Home> 또는 <Ctrl+A>

입력에 여러 줄이 있는 경우 현재 줄의 시작으로 이동하거나 줄의 시작 부분에 이미 있는 경우 입력의 시작으로 이동합니다. 입력에 한 줄이 있는 경우 입력의 시작으로 이동합니다.

넥스트라인

  • cmd: 언바운드
  • 이맥스 : 언 바운드

입력에 여러 줄이 있는 경우 커서를 다음 줄로 이동합니다.

이전 줄

  • cmd: 언바운드
  • 이맥스 : 언 바운드

입력에 여러 줄이 있는 경우 커서를 이전 줄로 이동합니다.

포워드챠

  • cmd: <RightArrow>
  • Emacs: <RightArrow> 또는 <Ctrl+F>

커서를 오른쪽으로 한 문자 이동합니다. 이렇게 하면 커서가 여러 줄 입력의 다음 줄로 이동할 수 있습니다.

뒤로Char

  • cmd: <LeftArrow>
  • Emacs: <LeftArrow> 또는 <Ctrl+B>

커서를 한 문자 왼쪽으로 이동합니다. 이렇게 하면 커서가 여러 줄 입력의 이전 줄로 이동할 수 있습니다.

전달워드

  • cmd: 언바운드
  • 이맥스: <Alt+F>

커서를 현재 단어의 끝이나 단어 사이에 있는 경우 다음 단어의 끝으로 앞으로 이동합니다. 다음을 사용하여 단어 구분 기호를 설정할 수 있습니다.

Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`

다음단어

  • cmd: <Ctrl+RightArrow>
  • 이맥스 : 언 바운드

커서를 다음 단어의 시작 부분까지 앞으로 이동합니다. 다음을 사용하여 단어 구분 기호를 설정할 수 있습니다.

Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`

거꾸로낱말

  • cmd: <Ctrl+LeftArrow>
  • 이맥스: <Alt+B>

커서를 현재 단어의 시작으로 다시 이동하거나 단어 간에 이전 단어의 시작 부분까지 이동합니다. 다음을 사용하여 단어 구분 기호를 설정할 수 있습니다.

Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`

셸포워드워드

  • cmd: 언바운드
  • 이맥스 : 언 바운드

ForwardWord와 마찬가지로 단어 경계는 PowerShell 토큰 경계에 의해 정의된다는 점을 제외하고는 다릅니다.

셸넥스트워드

  • cmd: 언바운드
  • 이맥스 : 언 바운드

NextWord와 마찬가지로 단어 경계는 PowerShell 토큰 경계에 의해 정의된다는 점을 제외하고는 다음과 같습니다.

셸뒤로워드

  • cmd: 언바운드
  • 이맥스 : 언 바운드

단어 경계가 PowerShell 토큰 경계에 의해 정의된다는 점을 제외하고는 BackwardWord와 같습니다.

고토 브레이스

  • cmd: <Ctrl+}>
  • 이맥스 : 언 바운드

일치하는 괄호, 중괄호 또는 대괄호로 이동합니다.

라인 추가

  • cmd: <Shift-Enter>
  • 이맥스: <Shift-Enter>

연속 프롬프트가 다음 줄에 표시되고 PSReadLine은 키가 현재 입력을 편집할 때까지 기다립니다. 단일 줄 자체에서 입력이 완료된 경우에도 여러 줄 입력을 단일 명령으로 입력하는 데 유용합니다.

기본 편집

CancelLine

  • cmd: 언바운드
  • 이맥스 : 언 바운드

줄에 대한 모든 편집을 취소하고 화면에 입력 줄을 그대로 두지만 입력을 실행하지 않고 PSReadLine에서 반환합니다.

되돌리기라인

  • cmd: <ESC>
  • 이맥스: <Alt+R>

마지막 입력이 수락되고 실행된 이후의 모든 입력을 되돌립니다. 이는 실행 취소할 항목이 없을 때까지 실행 취소 명령을 사용하는 것과 같습니다.

뒤로DeleteChar

  • cmd: <Backspace>
  • Emacs: <Backspace> 또는 <Ctrl+H>

커서 앞에 있는 문자를 삭제합니다.

삭제문자

  • cmd: <Delete>
  • 이맥스: <Delete>

커서 아래의 문자를 삭제합니다.

삭제CharOrExit

  • cmd: 언바운드
  • 이맥스: <Ctrl+D>

DeleteChar 와 마찬가지로 줄이 비어 있지 않으면 프로세스를 종료합니다.

수락 라인

  • cmd: <Enter>
  • Emacs: <Enter> 또는 <Ctrl+M>

현재 입력을 실행하려고 시도합니다. 현재 입력이 불완전한 경우(예: 닫는 괄호, 대괄호 또는 따옴표가 누락된 경우) 연속 프롬프트가 다음 줄에 표시되고 PSReadLine은 키가 현재 입력을 편집할 때까지 기다립니다.

수락및GetNext

  • cmd: 언바운드
  • 이맥스: <Ctrl+O>

AcceptLine과 비슷하지만 줄이 완료된 후 기록에서 다음 줄을 편집하기 시작합니다.

ValidateAndAcceptLine

  • cmd: 언바운드
  • 이맥스 : 언 바운드

AcceptLine과 비슷하지만 다음과 같은 추가 유효성 검사를 수행합니다.

  • 추가 구문 분석 오류를 확인합니다.
  • 명령 이름이 모두 발견되었는지 확인합니다.
  • PowerShell 4.0 이상을 실행하는 경우 매개 변수 및 인수의 유효성을 검사합니다.

오류가 있는 경우 오류 메시지가 표시되며 명령줄을 수정하거나 오류 메시지가 표시되는 동안 AcceptLine 또는 ValidateAndAcceptLine을 다시 실행하지 않는 한 오류 메시지가 수락되거나 기록에 추가되지 않습니다.

뒤로DeleteLine

  • cmd: <Ctrl+Home>
  • 이맥스 : 언 바운드

커서에 대한 입력의 시작 부분부터 텍스트를 삭제합니다.

forwardDeleteLine

  • cmd: <Ctrl+End>
  • 이맥스 : 언 바운드

커서에서 입력의 끝까지 텍스트를 삭제합니다.

SelectBackwardChar

  • cmd: <Shift+LeftArrow>
  • 이맥스: <Shift+LeftArrow>

이전 문자를 포함하도록 현재 선택 영역을 조정합니다.

SelectForwardChar

  • cmd: <Shift+RightArrow>
  • 이맥스: <Shift+RightArrow>

다음 문자를 포함하도록 현재 선택 영역을 조정합니다.

SelectBackwardWord

  • cmd: <Shift+Ctrl+LeftArrow>
  • 이맥스: <Alt+Shift+B>

이전 단어를 포함하도록 현재 선택 영역을 조정합니다.

SelectForwardWord

  • cmd: 언바운드
  • 이맥스: <Alt+Shift+F>

ForwardWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.

다음단어 선택

  • cmd: <Shift+Ctrl+RightArrow>
  • 이맥스 : 언 바운드

NextWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.

SelectShellForwardWord

  • cmd: 언바운드
  • 이맥스 : 언 바운드

ShellForwardWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.

ShellNextWord를 선택합니다.

  • cmd: 언바운드
  • 이맥스 : 언 바운드

ShellNextWord를 사용하여 다음 단어를 포함하도록 현재 선택 영역을 조정합니다.

SelectShellBackwardWord

  • cmd: 언바운드
  • 이맥스 : 언 바운드

ShellBackwardWord를 사용하여 이전 단어를 포함하도록 현재 선택 영역을 조정합니다.

SelectBackwardsLine

  • cmd: <Shift+Home>
  • 이맥스: <Shift+Home>

커서에서 줄의 시작 부분에 포함하도록 현재 선택 영역을 조정합니다.

셀렉트라인

  • cmd: <Shift+End>
  • 이맥스: <Shift+End>

커서에서 줄 끝까지 포함하도록 현재 선택 영역을 조정합니다.

모두 선택

  • cmd: <Ctrl+A>
  • 이맥스 : 언 바운드

전체 줄을 선택합니다. 커서를 줄의 끝으로 이동합니다.

셀프 인서트

  • cmd: <a>, <b>, ...
  • 이맥스 : <a>, <b>, ...

입력한 키를 삽입합니다.

다시

  • cmd: <Ctrl+Y>
  • 이맥스 : 언 바운드

실행 취소로 실행 취소된 삽입 또는 삭제를 다시 실행합니다.

취소

  • cmd: <Ctrl+Z>
  • 이맥스: <Ctrl+_>

이전 삽입 또는 삭제를 실행 취소합니다.

역사

히스토리 지우기

  • cmd: <Alt+F7>
  • 이맥스 : 언 바운드

PSReadLine에서 기록을 지웁니다. PowerShell 기록에는 영향을 주지 않습니다.

이전역사

  • cmd: <UpArrow>
  • Emacs: <UpArrow> 또는 <Ctrl+P>

현재 입력을 PSReadLine 기록의 이전 항목으로 바꿉니다.

다음연혁

  • cmd: <DownArrow>
  • Emacs: <DownArrow> 또는 <Ctrl+N>

현재 입력을 PSReadLine 기록의 다음 항목으로 바꿉니다.

forwardSearch히스토리

  • cmd: <Ctrl+S>
  • 이맥스: <Ctrl+S>

현재 히스토리 라인에서 대화식으로 앞으로 검색합니다.

역검색 기록

  • cmd: <Ctrl+R>
  • 이맥스: <Ctrl+R>

현재 히스토리 라인에서 대화식으로 뒤로 검색합니다.

기록검색뒤로

  • cmd: <F8>
  • 이맥스 : 언 바운드

현재 입력을 시작과 입력 및 커서 사이의 문자와 일치하는 PSReadLine 기록의 이전 항목으로 바꿉니다.

기록검색포워드

  • cmd: <Shift+F8>
  • 이맥스 : 언 바운드

현재 입력을 시작과 입력 및 커서 사이의 문자와 일치하는 PSReadLine 기록의 다음 항목으로 바꿉니다.

역사의 시작

  • cmd: 언바운드
  • 이맥스: <Alt+<>

현재 입력을 PSReadLine 기록의 마지막 항목으로 바꿉니다.

역사 끝

  • cmd: 언바운드
  • 이맥스: <Alt+>>

현재 입력을 PSReadLine 기록의 마지막 항목(기록 명령 전에 입력된 비어 있을 수 있는 입력)으로 바꿉니다.

탭 완성

탭완료다음

  • cmd: <Tab>
  • 이맥스 : 언 바운드

커서를 둘러싼 텍스트를 다음으로 완료하도록 시도합니다.

TabComplete이전

  • cmd: <Shift-Tab>
  • 이맥스 : 언 바운드

커서를 둘러싼 텍스트를 다음 이전 완료로 완성해 보십시오.

완료

  • cmd: 언바운드
  • 이맥스: <Tab>

커서를 둘러싼 텍스트에서 완료를 수행합니다. 가능한 완료가 여러 번 있는 경우 완료에 가장 긴 명확한 접두사를 사용합니다. 가장 길고 모호하지 않은 완료를 완료하려는 경우 가능한 완료 목록이 표시됩니다.

  • cmd: <Ctrl+Space>
  • 이맥스: <Ctrl+Space>

커서를 둘러싼 텍스트에서 완료를 수행합니다. 가능한 완성이 여러 개 있는 경우 가능한 완성 목록이 표시되며 화살표 키 또는 Tab/Shift+Tab을 사용하여 올바른 완성을 선택할 수 있습니다. Esc 및 Ctrl+G는 메뉴 선택을 취소하고 MenuComplete를 호출하기 전의 상태로 줄을 되돌립니다.

가능완성

  • cmd: 언바운드
  • 이맥스: <Alt+Equals>

가능한 완료 목록을 표시합니다.

세트 마크

  • cmd: 언바운드
  • 이맥스: <Alt+Space>

후속 편집 명령에서 사용할 커서의 현재 위치를 표시합니다.

ExchangePointAndMark

  • cmd: 언바운드
  • 이맥스: <Ctrl+X,Ctrl+X>

커서는 표시 위치에 배치되고 표시는 커서의 위치로 이동됩니다.

킬/잡아당기기

Kill 및 Yank는 PSReadLine 모듈의 클립보드에서 작동합니다. 킬 링(kill ring)이라고 불리는 링 버퍼가 있습니다 - 킬 링에 킬 텍스트가 추가되고 yank는 가장 최근의 킬에서 텍스트를 복사합니다. YankPop은 킬 링의 항목을 순환합니다. 킬 링이 가득 차면 새 아이템이 가장 오래된 아이템을 대체합니다. 다른 kill 작업 바로 앞에 있는 kill 작업은 kill ring의 항목을 바꾸거나 새 항목을 추가하는 대신 이전 kill을 추가합니다. 예를 들어 여러 KillWord 작업으로 선의 일부를 자른 다음 한 번의 잡아당김으로 다른 곳에서 다시 잡아당기는 방법입니다.

킬라인

  • cmd: 언바운드
  • 이맥스: <Ctrl+K>

커서에서 줄 끝까지 입력을 지웁니다. 지워진 텍스트는 킬 링에 배치됩니다.

뒤로 킬라인

  • cmd: 언바운드
  • Emacs: <Ctrl+U> 또는 <Ctrl+X,Backspace>

입력 시작부터 커서까지 입력을 지웁니다. 지워진 텍스트는 킬 링에 배치됩니다.

킬워드

  • cmd: 언바운드
  • 이맥스: <Alt+D>

커서에서 현재 단어의 끝으로 입력을 지웁니다. 커서가 단어 사이에 있으면 커서에서 다음 단어의 끝으로 입력이 지워집니다. 지워진 텍스트는 킬 링에 배치됩니다.

BackwardKillWord

  • cmd: 언바운드
  • 이맥스: <Alt+Backspace>

현재 단어의 시작에서 커서로 입력을 지웁니다. 커서가 단어 사이에 있으면 이전 단어의 시작에서 커서로 입력이 지워집니다. 지워진 텍스트는 킬 링에 배치됩니다.

쉘킬워드

  • cmd: 언바운드
  • 이맥스 : 언 바운드

KillWord와 마찬가지로 단어 경계는 PowerShell 토큰 경계에 의해 정의됩니다.

ShellBackwardKillWord

  • cmd: 언바운드
  • 이맥스 : 언 바운드

BackwardKillWord와 마찬가지로 단어 경계는 PowerShell 토큰 경계에 의해 정의됩니다.

유닉스워드루바트

  • cmd: 언바운드
  • 이맥스: <Ctrl+W>

BackwardKillWord와 마찬가지로 단어 경계가 공백으로 정의된다는 점을 제외하고는 예외입니다.

킬 리전

  • cmd: 언바운드
  • 이맥스 : 언 바운드

커서와 표시 사이의 텍스트를 종료합니다.

복사

  • cmd: <Ctrl+Shift+C>
  • 이맥스 : 언 바운드

선택한 영역을 시스템 클립보드에 복사합니다. 선택한 영역이 없으면 전체 줄을 복사합니다.

CopyOrCancelLine

  • cmd: <Ctrl+C>
  • 이맥스: <Ctrl+C>

선택한 텍스트를 클립보드에 복사하거나, 선택한 텍스트가 없는 경우 CancelLine을 사용하여 줄 편집을 취소합니다.

자르다

  • cmd: <Ctrl+X>
  • 이맥스 : 언 바운드

시스템 클립보드에 삭제된 텍스트를 배치하는 선택한 영역을 삭제합니다.

십중팔구

  • cmd: 언바운드
  • 이맥스: <Ctrl+Y>

가장 최근에 종료된 텍스트를 입력에 추가합니다.

양크팝

  • cmd: 언바운드
  • 이맥스: <Alt+Y>

이전 작업이 Yank 또는 YankPop인 경우 이전에 잡아당긴 텍스트를 킬 링에서 다음으로 종료된 텍스트로 바꿉니다.

클리어킬링

  • cmd: 언바운드
  • 이맥스 : 언 바운드

킬 링의 내용물이 지워집니다.

붙여넣기

  • cmd: <Ctrl+V>
  • 이맥스 : 언 바운드

이는 Yank와 유사하지만 킬 링 대신 시스템 클립보드를 사용합니다.

[! 중요]

붙여넣기 함수를 사용하는 경우 클립보드 버퍼의 전체 내용이 PSReadLine의 입력 버퍼에 붙여넣습니다. 그런 다음 입력 버퍼가 PowerShell 파서에 전달됩니다. 콘솔 애플리케이션의 마우스 오른쪽 단추를 클릭하여 붙여넣은 입력 붙여넣기 메서드는 입력 버퍼에 한 번에 한 문자씩 복사됩니다. 입력 버퍼는 줄 바꿈 문자가 복사될 때 파서에 전달됩니다. 따라서 입력은 한 번에 한 줄씩 구문 분석됩니다. 붙여넣기 메서드 간의 차이로 인해 실행 동작이 달라집니다.

YankLastArg

  • cmd: <Alt+.>
  • 이맥스: <Alt+.>, <Alt+_>

이전 명령의 마지막 인수를 기록에 삽입합니다. 반복 연산은 마지막으로 삽입된 인수를 이전 명령의 마지막 인수로 바꿉니다(따라서 Alt+. Alt+를 누릅니다. 두 번째에서 마지막 히스토리 라인의 마지막 인수를 삽입합니다).

인수를 사용하면 처음으로 YankLastArg가 YankNthArg처럼 동작합니다. 후속 YankLastArg 호출에 대한 음수 인수는 기록을 살펴보는 동안 방향을 변경합니다. 예를 들어 Alt+를 누르는 경우입니다. 너무 많이 누르면 Alt+- Alt+를 입력할 수 있습니다. 방향을 반전시킵니다.

인수는 PowerShell 토큰을 기반으로 합니다.

양크NthArg

  • cmd: 언바운드
  • 이맥스: <Alt+Ctrl+Y>

이전 명령의 첫 번째 인수(명령 이름 아님)를 기록에 삽입합니다.

인수를 사용하여 n번째 인수를 삽입하며, 여기서 0은 일반적으로 명령입니다. 음수 인수는 끝에서 시작합니다.

인수는 PowerShell 토큰을 기반으로 합니다.

기타

중지

  • cmd: 언바운드
  • 이맥스: <Ctrl+G>

현재 작업을 중단합니다. 예를 들어 대화형 기록 검색을 중지합니다. CancelLine과 같이 입력을 취소하지 않습니다.

캐릭터 검색

  • cmd: <F3>
  • 이맥스: <Ctrl+]>

키를 읽고 해당 문자를 앞으로 검색합니다. 인수를 사용하면 해당 인수의 n번째 발생을 앞으로 검색합니다. 음수 인수를 사용하면 뒤로 검색합니다.

CharacterSearchBackward (뒤로)

  • cmd: <Shift+F3>
  • 이맥스: <Alt+Ctrl+]>

CharacterSearch와 비슷하지만 역방향으로 검색합니다. 음수 인수를 사용하면 앞으로 검색합니다.

깨끗한 화면

  • cmd: <Ctrl+L>
  • 이맥스: <Ctrl+L>

화면을 지우고 현재 프롬프트와 입력을 화면 맨 위에 표시합니다.

Digit인수

  • cmd: 언바운드
  • 이맥스 : <Alt+[0..9]>,<any char>,<Alt+->

CharacterSearch 또는 YankNthArg와 같은 함수에 숫자 인수를 전달하는 데 사용됩니다. Alt+- 인수를 음수/음수가 아닌 것으로 전환합니다. 80개의 '*' 문자를 입력하려면 Alt+8 Alt+0 *를 입력할 수 있습니다.

캡처스크린

  • cmd: 언바운드
  • 이맥스 : 언 바운드

선택한 줄을 텍스트 및 RTF 형식으로 클립보드에 복사합니다. 첫 번째 줄까지 위쪽/아래쪽 화살표 키를 사용하여 선택한 다음 Shift+위쪽 화살표/Shift+아래쪽 화살표를 사용하여 여러 줄을 선택합니다. 선택한 후 Enter 키를 눌러 텍스트를 복사합니다. Escape/Ctrl+C/Ctrl+G는 작업을 취소하므로 클립보드에 아무 것도 복사되지 않습니다.

인보크프트

  • cmd: 언바운드
  • 이맥스 : 언 바운드

현재 프롬프트를 지우고 프롬프트 함수를 호출하여 프롬프트를 다시 표시합니다. 현재 디렉터리 변경과 같이 상태를 변경하는 사용자 지정 키 처리기에 유용합니다.

왓츠키

  • cmd: <Alt+?>
  • 이맥스: <Alt+?>

키 또는 코드를 읽고 키 바인딩을 표시합니다.

ShowKeyBindings (키 바인딩 표시)

  • cmd: <Ctrl+Alt+?>
  • 이맥스: <Ctrl+Alt+?>

현재 바인딩된 키를 모두 표시합니다.

스크롤디스플레이업

  • cmd: <PageUp>
  • 이맥스: <PageUp>

디스플레이를 한 화면 위로 스크롤합니다.

스크롤디스플레이 업라인

  • cmd: <Ctrl+PageUp>
  • 이맥스: <Ctrl+PageUp>

디스플레이를 한 줄 위로 스크롤합니다.

스크롤디스플레이다운

  • cmd: <PageDown>
  • 이맥스: <PageDown>

디스플레이를 한 화면 아래로 스크롤합니다.

스크롤디스플레이다운라인

  • cmd: <Ctrl+PageDown>
  • 이맥스: <Ctrl+PageDown>

디스플레이를 한 줄 아래로 스크롤합니다.

스크롤디스플레이탑

  • cmd: 언바운드
  • 이맥스: <Ctrl+Home>

디스플레이를 위쪽으로 스크롤합니다.

스크롤DisplayTo커서

  • 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)

명령줄에 선택 항목이 없으면 start와 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)

이 함수는 cmdlet Set-PSReadLineOption에서 사용하는 도우미 메서드이지만 설정을 임시로 변경하려는 사용자 지정 키 바인딩에 유용할 수 있습니다.

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

자유롭게 끌어오기 요청을 제출하거나 GitHub 페이지에서 피드백을 제출하세요.

참고 항목

PSReadLine은 GNU 읽기 라인 라이브러리의 영향을 크게 받습니다.