다음을 통해 공유


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>

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

  • 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

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

참고 항목

PSReadLine은 GNU 읽기 전용 라이브러리의 영향을 많이 받습니다.