Поделиться через


about_PSReadLine

Краткое описание

PSReadLine предоставляет улучшенный интерфейс редактирования командной строки в консоли PowerShell.

Полное описание

PSReadLine 2.0 предоставляет мощный интерфейс редактирования командной строки для консоли PowerShell. Консоль предоставляет следующие возможности:

  • Цвет синтаксиса командной строки
  • Визуальное указание синтаксических ошибок
  • Улучшенное многострочное взаимодействие (как редактирование, так и журнал)
  • Настраиваемые привязки ключей
  • Режимы Cmd и Emacs
  • Множество параметров конфигурации
  • Завершение стиля Bash (необязательно в режиме Cmd, по умолчанию в режиме Emacs)
  • Emacs yank/kill-ring
  • Перемещение и удаление слов на основе токена PowerShell

Для PSReadLine требуется PowerShell 3.0 или более поздней версии. PSReadLine работает с узлом консоли по умолчанию, Visual Studio Code и терминалом Windows. Она не работает в интегрированной среде сценариев PowerShell.

PSReadLine 2.1.0 поставляется с PowerShell 7.2 и поддерживается во всех поддерживаемых версиях PowerShell. Его можно установить из коллекция PowerShell. Чтобы установить PSReadLine 2.1.0 в поддерживаемой версии PowerShell, выполните следующую команду.

Install-Module -Name PSReadLine -RequiredVersion 2.1.0

Примечание

Начиная с PowerShell 7.0, PowerShell пропускает автоматическую загрузку PSReadLine в Windows, если обнаружена программа чтения с экрана. В настоящее время PSReadLine не работает с средствами чтения с экрана. Отрисовка и форматирование PowerShell 7.0 по умолчанию работают правильно. При необходимости модуль можно загрузить вручную.

В классе Microsoft.PowerShell.PSConsoleReadLine доступны следующие функции.

Основные функции редактирования

Прерывание

Прервать текущее действие, например добавочный поиск в журнале.

  • Emacs: <Ctrl+g>

AcceptAndGetNext

Попытка выполнения текущих входных данных. Если его можно выполнить (например, AcceptLine), то при следующем вызове ReadLine следует отозвать следующий элемент из журнала.

  • Emacs: <Ctrl+o>

AcceptLine

Попытка выполнения текущих входных данных. Если текущий вход не завершен (например, отсутствует закрывающая скобка, скобка или кавычка), запрос продолжения отображается в следующей строке, а PSReadLine ожидает, пока ключи изменятся.

  • Команда: <Enter>
  • Emacs: <Enter>
  • Режим вставки vi: <Enter>

AddLine

Запрос на продолжение отображается в следующей строке, и PSReadLine ожидает, пока ключи изменятся для текущих входных данных. Это полезно для ввода многострочных входных данных в качестве одной команды, даже если одна строка является полной.

  • Команда: <Shift+Enter>
  • Emacs: <Shift+Enter>
  • Режим вставки vi: <Shift+Enter>
  • Режим команды Vi: <Shift+Enter>

НазадDeleteChar

Удалите символ перед курсором.

  • Cmd: <Backspace>, <Ctrl+h>
  • Emacs: <Backspace>, <Ctrl+Backspace>, <Ctrl+h>
  • Режим вставки vi: <Backspace>
  • Режим команды Vi: <X>, <d,h>

НазадDeleteLine

Like BackwardKillLine — удаляет текст от точки до начала строки, но не помещает удаленный текст в круг завершения.

  • Команда: <Ctrl+Home>
  • Режим вставки vi: <Ctrl+u>, <Ctrl+Home>
  • Режим команды Vi: <Ctrl+u>, <Ctrl+Home>, <d,0>

BackwardDeleteWord

Удаляет предыдущее слово.

  • Режим команды Vi: <Ctrl+w>, <d,b>

BackwardKillLine

Очистите входные данные от начала ввода до курсора. Очищенный текст помещается в кольцо завершения.

  • Emacs: <Ctrl+u>, <Ctrl+x,Backspace>

BackwardKillWord

Очистите входные данные от начала текущего слова до курсора. Если курсор находится между словами, входные данные очищаются от начала предыдущего слова до курсора. Очищенный текст помещается в кольцо завершения.

  • Cmd: <Ctrl+Backspace>, <Ctrl+w>
  • Emacs: <Alt+Backspace>, <Escape,Backspace>
  • Режим вставки vi: <Ctrl+Backspace>
  • Режим команды Vi: <Ctrl+Backspace>

CancelLine

Отмените текущие входные данные, оставив их на экране, но вернитесь обратно на узел, чтобы запрос снова вычислился.

  • Режим вставки vi: <Ctrl+c>
  • Режим команды Vi: <Ctrl+c>

Копировать

Скопируйте выбранный регион в системный буфер обмена. Если регион не выбран, скопируйте всю строку.

  • Команда: <Ctrl+C>

CopyOrCancelLine

Если выбран текст, скопируйте его в буфер обмена, в противном случае отмените строку.

  • Команда: <Ctrl+c>
  • Emacs: <Ctrl+c>

Вырезать

Удалить выбранный регион, где удаленный текст будет размещен в системном буфере обмена.

  • Команда: <Ctrl+x>

DeleteChar

Удалите символ под курсором.

  • Команда: <Delete>
  • Emacs: <Delete>
  • Режим вставки vi: <Delete>
  • Режим команд Vi: <Delete>, <x>, <d,l>, <d,Spacebar>

DeleteCharOrExit

Удалите символ под курсором или, если строка пуста, закройте процесс.

  • Emacs: <Ctrl+d>

DeleteEndOfBuffer

Удаляет до конца многострокового буфера.

  • Режим команды Vi: <d,G>

DeleteEndOfWord

Удалить до конца слова.

  • Режим команды Vi: <d,e>

DeleteLine

Удаляет текущую логическую строку многострочных буферов, включив отмену.

  • Режим команды Vi: <d,d>, <d,_>

DeletePreviousLines

Удаляет предыдущие запрошенные логические строки и текущую логическую строку в многострочном буфере.

  • Режим команды Vi: <d,k>

DeleteRelativeLines

Удаляет из начала буфера в текущую логическую строку в многострочном буфере.

Как и большинство команд Vi, <d,g,g> команда может быть добавлена в начало числовым аргументом, указывающим абсолютный номер строки, который вместе с текущим номером строки составляет диапазон удаляемых строк. Если значение не указано, числовой аргумент по умолчанию имеет значение 1, которое ссылается на первую логическую строку в многострочном буфере.

Фактическое число строк, удаляемых из многострочного, вычисляется как разница между текущим номером логической строки и указанным числовым аргументом, что может быть отрицательным. Следовательно, относительная часть имени метода.

  • Режим команды Vi: <d,g,g>

DeleteNextLines

Удаляет текущую логическую строку и следующие запрошенные логические строки в многострочном буфере.

  • Режим команды Vi: <d,j>

DeleteLineToFirstChar

Удаляет текст из курсора до первого непустого символа строки.

  • Режим команды Vi: <d,^>

DeleteToEnd

Удалить до конца строки.

  • Режим команды Vi: <D>, <d,$>

DeleteWord

Удалите следующее слово.

  • Режим команды Vi: <d,w>

ForwardDeleteLine

Например, ForwardKillLine — удаляет текст от точки до конца строки, но не помещает удаленный текст в круг завершения.

  • Команда: <Ctrl+End>
  • Режим вставки vi: <Ctrl+End>
  • Режим команды Vi: <Ctrl+End>

InsertLineAbove

Новая пустая строка создается над текущей строкой независимо от того, где курсор находится в текущей строке. Курсор перемещается в начало новой строки.

  • Команда: <Ctrl+Enter>

InsertLineBelow

Новая пустая строка создается под текущей строкой независимо от того, где курсор находится в текущей строке. Курсор перемещается в начало новой строки.

  • Команда: <Shift+Ctrl+Enter>

Инверт.

Переверните регистр текущего символа и перейдите к следующему.

  • Режим команды Vi: <~>

KillLine

Очистите входные данные от курсора до конца входных данных. Очищенный текст помещается в кольцо завершения.

  • Emacs: <Ctrl+k>

KillRegion

Завершите текст между курсором и меткой.

  • Функция не связана.

KillWord

Очистите входные данные от курсора до конца текущего слова. Если курсор находится между словами, входные данные очищаются от курсора до конца следующего слова. Очищенный текст помещается в кольцо завершения.

  • Cmd: <Alt+d>, <Ctrl+Delete>
  • Emacs: <Alt+d>, <Escape,d>
  • Режим вставки vi: <Ctrl+Delete>
  • Режим команды Vi: <Ctrl+Delete>

Вставить

Вставьте текст из системного буфера обмена.

  • Cmd: <Ctrl+v>, <Shift+Insert>
  • Режим вставки vi: <Ctrl+v>
  • Режим команды Vi: <Ctrl+v>

Важно!

При использовании функции Paste все содержимое буфера буфера обмена вставляется во входной буфер PSReadLine. Затем входной буфер передается в средство синтаксического анализа PowerShell. Входные данные, вставленные с помощью метода вставки правой кнопкой мыши консольного приложения, копируются во входной буфер по одному символу за раз. Входной буфер передается в средство синтаксического анализа при копировании символа новой строки. Таким образом, входные данные анализируются по одной строке за раз. Разница между методами вставки приводит к разному поведению выполнения.

Вставить После

Вставьте буфер обмена после курсора, переместив курсор в конец вставленного текста.

  • Режим команды Vi: <p>

PasteBefore

Вставьте буфер обмена перед курсором, переместив курсор в конец вставленного текста.

  • Режим команды Vi: <P>

PrependAndAccept

Добавьте символ "#" и примите строку.

  • Режим команды Vi: <#>

Повторить

Отмена отмены.

  • Команда: <Ctrl+y>
  • Режим вставки vi: <Ctrl+y>
  • Режим команды Vi: <Ctrl+y>

RepeatLastCommand

Повторите последнее изменение текста.

  • Режим команды Vi: <.>

RevertLine

Возвращает все входные данные к текущему входу.

  • Команда: <Escape>
  • Emacs: <Alt+r>, <Escape,r>

ShellBackwardKillWord

Очистите входные данные от начала текущего слова до курсора. Если курсор находится между словами, входные данные очищаются от начала предыдущего слова до курсора. Очищенный текст помещается в кольцо завершения.

Функция не связана.

ShellKillWord

Очистите входные данные от курсора до конца текущего слова. Если курсор находится между словами, входные данные очищаются от курсора до конца следующего слова. Очищенный текст помещается в кольцо завершения.

Функция не связана.

Буферные символы

Поменяйте текущий символ и символ перед ним.

  • Emacs: <Ctrl+t>
  • Режим вставки vi: <Ctrl+t>
  • Режим команды Vi: <Ctrl+t>

Отменить

Отмена предыдущего изменения.

  • Команда: <Ctrl+z>
  • Emacs: <Ctrl+_>, <Ctrl+x,Ctrl+u>
  • Режим вставки vi: <Ctrl+z>
  • Режим команды Vi: <Ctrl+z>, <u>

Отменить Все

Отмените все предыдущие изменения строки.

  • Режим команды Vi: <U>

UnixWordRubout

Очистите входные данные от начала текущего слова до курсора. Если курсор находится между словами, входные данные очищаются от начала предыдущего слова до курсора. Очищенный текст помещается в кольцо завершения.

  • Emacs: <Ctrl+w>

ValidateAndAcceptLine

Попытка выполнения текущих входных данных. Если текущий вход не завершен (например, отсутствует закрывающая скобка, скобка или кавычка), запрос продолжения отображается в следующей строке, а PSReadLine ожидает, пока ключи изменятся.

  • Emacs: <Ctrl+m>

ViAcceptLine

Примите строку и переключитесь в режим вставки.

  • Режим команды Vi: <Enter>

ViAcceptLineOrExit

Аналогично DeleteCharOrExit в режиме Emacs, но принимает строку вместо удаления символа.

  • Режим вставки vi: <Ctrl+d>
  • Режим команды Vi: <Ctrl+d>

ViAppendLine

Под текущей строкой вставляется новая строка.

  • Режим команды Vi: <o>

ViBackwardDeleteGlob

Удаляет предыдущее слово, используя в качестве разделителя слова только пробелы.

  • Режим команды Vi: <d,B>

ViBackwardGlob

Перемещает курсор обратно в начало предыдущего слова, используя в качестве разделителей только пробелы.

  • Режим команды Vi: <B>

ViDeleteBrace

Найдите соответствующую фигурную скобку, круглые скобки или квадратную скобку и удалите все содержимое внутри, включая фигурную скобку.

  • Режим команды Vi: <d,%>

ViDeleteEndOfGlob

Удалить до конца слова.

  • Режим команды Vi: <d,E>

ViDeleteGlob

Удалите следующую маску (слово с разделителями пробелами).

  • Режим команды Vi: <d,W>

ViDeleteToBeforeChar

Удаляет до заданного символа.

  • Режим команды Vi: <d,t>

ViDeleteToBeforeCharBackward

Удаляет до заданного символа.

  • Режим команды Vi: <d,T>

ViDeleteToChar

Удаляет до заданного символа.

  • Режим команды Vi: <d,f>

ViDeleteToCharBackward

Удаляет назад до заданного символа.

  • Режим команды Vi: <d,F>

ViInsertAtBegining

Переключитесь в режим вставки и расположите курсор в начале строки.

  • Режим команды Vi: <I>

ViInsertAtEnd

Переключитесь в режим вставки и поместите курсор в конце строки.

  • Режим команды Vi: <A>

ViInsertLine

Над текущей строкой вставляется новая строка.

  • Режим команды Vi: <O>

ViInsertWithAppend

Добавление из текущей позиции строки.

  • Режим команды Vi: <a>

ViInsertWithDelete

Удалите текущий символ и переключитесь в режим вставки.

  • Режим команды Vi: <s>

ViJoinLines

Соединяет текущую и следующую строку.

  • Режим команды Vi: <J>

ViReplaceLine

Удалите всю командную строку.

  • Режим команды Vi: <S>, <c,c>

ViReplaceToBeforeChar

Заменяет до заданного символа.

  • Режим команды Vi: <c,t>

ViReplaceToBeforeCharBackward

Заменяет до заданного символа.

  • Режим команды Vi: <c,T>

ViReplaceToChar

Удаляет до заданного символа.

  • Режим команды Vi: <c,f>

ViReplaceToCharBackward

Заменяет до заданного символа.

  • Режим команды Vi: <c,F>

ViYankBeginningOfLine

Yank от начала буфера до курсора.

  • Режим команды Vi: <y,0>

ViYankEndOfGlob

Yk от курсора до конца СЛОВ.

  • Режим команды Vi: <y,E>

ViYankEndOfWord

Yank от курсора до конца слов.

  • Режим команды Vi: <y,e>

ViYankLeft

Символы Yank слева от курсора.

  • Режим команды Vi: <y,h>

ViYankLine

Yank весь буфер.

  • Режим команды Vi: <y,y>

ViYankNextGlob

Переход от курсора к началу следующих слов.

  • Режим команды Vi: <y,W>

ViYankNextWord

Yk слова после курсора.

  • Режим команды Vi: <y,w>

ViYankPercent

Yank to/from matching скобки.

  • Режим команды Vi: <y,%>

ViYankPreviousGlob

Yank от начала word(s) до курсора.

  • Режим команды Vi: <y,B>

ViYankPreviousWord

Yk слова перед курсором.

  • Режим команды Vi: <y,b>

ViYankRight

Символы Yank под курсором и справа от курсора.

  • Режим команды Vi: <y,l>, <y,Spacebar>

ViYankToEndOfLine

Yank от курсора до конца буфера.

  • Режим команды Vi: <y,$>

ViYankToFirstChar

Yank от первого символа, не являющегося пробелом, до курсора.

  • Режим команды Vi: <y,^>

Янки

Добавьте последний убитый текст во входные данные.

  • Emacs: <Ctrl+y>

YankLastArg

Yank последний аргумент из предыдущей строки журнала. При первом вызове аргумента ведет себя так же, как YankNthArg. Если вызывается несколько раз, вместо этого он выполняет итерацию по журналу, а аргумент задает направление (отрицательное указывает обратное направление).

  • Команда: <Alt+.>
  • Emacs: <Alt+.>, <Alt+_>, <Escape,.>, <Escape,_>

YankNthArg

Yank первый аргумент (после команды) из предыдущей строки журнала. С аргументом yank аргумент n (начиная с 0), если аргумент является отрицательным, начните с последнего аргумента.

  • Emacs: <Ctrl+Alt+y>, <Escape,Ctrl+y>

YankPop

Если предыдущая операция была Yank или YankPop, замените предыдущий фрагмент текста следующим убитым текстом из круга завершения.

  • Emacs: <Alt+y>, <Escape,y>

Функции перемещения курсора

НазадChar

Переместите курсор на один символ влево. Это может привести к перемещению курсора в предыдущую строку многострочного ввода.

  • Команда: <LeftArrow>
  • Emacs: <LeftArrow>, <Ctrl+b>
  • Режим вставки vi: <LeftArrow>
  • Режим команды Vi: <LeftArrow>, <Backspace>, <h>

НазадWord

Переместите курсор обратно в начало текущего слова или, если между словами, в начало предыдущего слова. Word границы определяются настраиваемым набором символов.

  • Команда: <Ctrl+LeftArrow>
  • Emacs: <Alt+b>, <Escape,b>
  • Режим вставки vi: <Ctrl+LeftArrow>
  • Режим команды Vi: <Ctrl+LeftArrow>

Символы, определяющие границы слов, настраиваются в свойстве WordDelimiters объекта PSConsoleReadLineOptions . Сведения о просмотре или изменении свойства WordDelimiters см. в разделах Get-PSReadLineOption и Set-PSReadLineOption.

BeginningOfLine

Если вход содержит несколько строк, перейдите к началу текущей строки или, если уже в начале строки, перейдите к началу ввода. Если входные данные имеют одну строку, перейдите к началу ввода.

  • Команда: <Home>
  • Emacs: <Home>, <Ctrl+a>
  • Режим вставки vi: <Home>
  • Режим команды Vi: <Home>

EndOfLine

Если вход содержит несколько строк, перейдите в конец текущей строки или, если она уже находится в конце строки, перейдите в конец входных данных. Если входные данные имеют одну строку, перейдите к концу входных данных.

  • Команда: <End>
  • Emacs: <End>, <Ctrl+e>
  • Режим вставки vi: <End>

ForwardChar

Переместите курсор на один символ вправо. Это может привести к перемещению курсора в следующую строку многострочного ввода.

  • Команда: <RightArrow>
  • Emacs: <RightArrow>, <Ctrl+f>
  • Режим вставки vi: <RightArrow>
  • Режим команды Vi: <RightArrow>, <Space>, <l>

ForwardWord

Перемещение курсора вперед в конец текущего слова или, если между словами, в конец следующего слова. Word границы определяются настраиваемым набором символов.

  • Emacs: <Alt+f>, <Escape,f>

Символы, определяющие границы слов, настраиваются в свойстве WordDelimiters объекта PSConsoleReadLineOptions . Сведения о просмотре или изменении свойства WordDelimiters см. в разделах Get-PSReadLineOption и Set-PSReadLineOption.

GotoBrace

Перейдите к соответствующей фигурной скобке, скобке или квадратной скобке.

  • Команда: <Ctrl+]>
  • Режим вставки vi: <Ctrl+]>
  • Режим команд Vi: <Ctrl+]>

GotoColumn

Перейти к столбцу, указанному аргументом arg.

  • Режим команд Vi: <|>

GotoFirstNonBlankOfLine

Переместите курсор на первый непустой символ в строке.

  • Режим команды Vi: <^>, <_>

MoveToEndOfLine

Перемещение курсора в конец входных данных.

  • Режим команды Vi: <End>, <$>

Следующая линия

Переместите курсор на следующую строку.

  • Функция не связана с ней.

NextWord

Переместите курсор вперед в начало следующего слова. Word границы определяются настраиваемым набором символов.

  • Команда: <Ctrl+RightArrow>
  • Режим вставки Vi: <Ctrl+RightArrow>
  • Режим команд Vi: <Ctrl+RightArrow>

Символы, определяющие границы слов, настраиваются в свойстве WordDelimiters объекта PSConsoleReadLineOptions . Сведения о просмотре или изменении свойства WordDelimiters см. в разделах Get-PSReadLineOption и Set-PSReadLineOption.

NextWordEnd

Перемещение курсора вперед в конец текущего слова или, если между словами, в конец следующего слова. Word границы определяются настраиваемым набором символов.

  • Режим команд Vi: <e>

Символы, определяющие границы слов, настраиваются в свойстве WordDelimiters объекта PSConsoleReadLineOptions . Сведения о просмотре или изменении свойства WordDelimiters см. в разделах Get-PSReadLineOption и Set-PSReadLineOption.

Предыдущая строка

Перемещение курсора в предыдущую строку.

  • Функция не связана с ней.

ShellBackwardWord

Переместите курсор обратно в начало текущего слова или, если между словами, в начало предыдущего слова. Word границы определяются маркерами PowerShell.

  • Функция не связана с ней.

ShellForwardWord

Переместите курсор вперед в начало следующего слова. Word границы определяются маркерами PowerShell.

  • Функция не связана с ней.

ShellNextWord

Перемещение курсора вперед в конец текущего слова или, если между словами, в конец следующего слова. Word границы определяются маркерами PowerShell.

  • Функция не связана с ней.

ViBackwardChar

Переместите курсор на один символ влево в режиме редактирования Vi. Это может привести к перемещению курсора в предыдущую строку многострочного ввода.

  • Режим вставки Vi: <LeftArrow>
  • Режим команды Vi: <LeftArrow>, <Backspace>, <h>

ViBackwardWord

Переместите курсор обратно в начало текущего слова или, если между словами, в начало предыдущего слова. Word границы определяются настраиваемым набором символов.

  • Режим команд Vi: <b>

Символы, определяющие границы слов, настраиваются в свойстве WordDelimiters объекта PSConsoleReadLineOptions . Сведения о просмотре или изменении свойства WordDelimiters см. в разделах Get-PSReadLineOption и Set-PSReadLineOption.

ViForwardChar

Переместите курсор на один символ вправо в режиме редактирования Vi. Это может привести к перемещению курсора в следующую строку многострочного ввода.

  • Режим вставки Vi: <RightArrow>
  • Режим команды Vi: <RightArrow>, <Spacebar>, <l>

ViEndOfGlob

Перемещает курсор в конец слова, используя в качестве разделителей только пробелы.

  • Режим команд Vi: <E>

ViEndOfPreviousGlob

Перемещается в конец предыдущего слова, используя только пробелы в качестве разделителя слов.

  • Функция не связана с ней.

ViGotoBrace

Похож на GotoBrace, но основан на символах, а не на маркерах.

  • Режим команд Vi: <%>

ViNextGlob

Переходит к следующему слову, используя только пробелы в качестве разделителя слов.

  • Режим команд Vi: <W>

ViNextWord

Переместите курсор вперед в начало следующего слова. Word границы определяются настраиваемым набором символов.

  • Режим команд Vi: <w>

Символы, определяющие границы слов, настраиваются в свойстве WordDelimiters объекта PSConsoleReadLineOptions . Сведения о просмотре или изменении свойства WordDelimiters см. в разделах Get-PSReadLineOption и Set-PSReadLineOption.

Функции журнала

BeginningOfHistory

Переход к первому элементу в журнале.

  • Emacs: <Alt+<>

ClearHistory

Очищает журнал в PSReadLine. Это не влияет на журнал PowerShell.

  • Команда: <Alt+F7>

EndOfHistory

Переход к последнему элементу (текущему входу) в журнале.

  • Emacs: <Alt+>>

ForwardSearchHistory

Выполнение добавочного прямого поиска по журналу.

  • Команда: <Ctrl+s>
  • Emacs: <Ctrl+s>

HistorySearchBackward

Замените текущие входные данные элементом "previous" из журнала PSReadLine, который соответствует символам между начальным и входным вводом и курсором.

  • Команда: <F8>

HistorySearchForward

Замените текущие входные данные элементом "next" из журнала PSReadLine, который соответствует символам между начальным и входным вводом и курсором.

  • Команда: <Shift+F8>

NextHistory

Замените текущие входные данные элементом next из журнала PSReadLine.

  • Команда: <DownArrow>
  • Emacs: <DownArrow>, <Ctrl+n>
  • Режим вставки vi: <DownArrow>
  • Режим команды Vi: <DownArrow>, <j>, <+>

PreviousHistory

Замените текущие входные данные элементом previous из журнала PSReadLine.

  • Команда: <UpArrow>
  • Emacs: <UpArrow>, <Ctrl+p>
  • Режим вставки vi: <UpArrow>
  • Режим команды Vi: <UpArrow>, <k>, <->

ReverseSearchHistory

Выполните добавочный поиск в обратном направлении по журналу.

  • Команда: <Ctrl+r>
  • Emacs: <Ctrl+r>

ViSearchHistoryBackward

Запрашивает строку поиска и инициирует поиск после AcceptLine.

  • Режим вставки vi: <Ctrl+r>
  • Режим команды Vi: </>, <Ctrl+r>

Функции завершения

Завершить

Попробуйте выполнить завершение текста, окружающего курсор. При наличии нескольких возможных завершений для завершения используется самый длинный однозначный префикс. При попытке выполнить самое длинное однозначное завершение отображается список возможных завершений.

  • Emacs: <Tab>

Попробуйте выполнить завершение текста, окружающего курсор. При наличии нескольких возможных завершений для завершения используется самый длинный однозначный префикс. При попытке выполнить самое длинное однозначное завершение отображается список возможных завершений.

  • Cmd: <Ctrl+@>, <Ctrl+Spacebar>
  • Emacs: <Ctrl+Spacebar>

Возможные завершения

Отображение списка возможных завершений.

  • Emacs: <Alt+=>
  • Режим вставки vi: <Ctrl+Spacebar>
  • Режим команды Vi: <Ctrl+Spacebar>

TabCompleteNext

Попытайтесь завершить текст вокруг курсора следующим доступным завершением.

  • Команда: <Tab>
  • Режим команды Vi: <Tab>

TabCompletePrevious

Попытайтесь завершить текст, окружающий курсор, с помощью предыдущего доступного завершения.

  • Команда: <Shift+Tab>
  • Режим команды Vi: <Shift+Tab>

ViTabCompleteNext

При необходимости завершает текущую группу редактирования и вызывает tabCompleteNext.

  • Режим вставки vi: <Tab>

ViTabCompletePrevious

При необходимости завершает текущую группу редактирования и вызывает tabCompletePrevious.

  • Режим вставки vi: <Shift+Tab>

Прочие функции

AcceptNextSuggestionWord

Примите следующее слово встроенного или выбранного предложения.

  • Функция не связана.

AcceptSuggestion

Примите текущее встроенное или выбранное предложение.

  • Функция не связана.

CaptureScreen

Запустите интерактивный снимок экрана: стрелки вверх и вниз выбирают линии, введите копии выделенного текста в буфер обмена в виде текста и HTML.

  • Функция не связана.

ClearScreen

Очистите экран и нарисуйте текущую линию в верхней части экрана.

  • Команда: <Ctrl+l>
  • Emacs: <Ctrl+l>
  • Режим вставки vi: <Ctrl+l>
  • Режим команды Vi: <Ctrl+l>

DigitArgument

Запустите новый аргумент digit для передачи другим функциям. Его можно использовать в качестве множителя для следующей функции, вызываемой нажатием клавиши. Например, при нажатии <Alt+1><Alt+0> задается значение аргумента digit равным 10. Затем нажатие клавиши # отправляет 10 # символов (##########) во входную строку. Аналогичным образом его можно использовать с другими операциями, такими как <Delete> или Left-Arrow.

  • Cmd: <Alt+0>, , <Alt+1>, <Alt+3><Alt+2>, <Alt+4>, <Alt+5>, <Alt+6>, <Alt+7>, <Alt+8>, <Alt+9>,<Alt+->
  • Emacs: <Alt+0>, , <Alt+1>, <Alt+3><Alt+2>, <Alt+4>, <Alt+5><Alt+6>, <Alt+7>, , <Alt+8>, <Alt+9>,<Alt+->
  • Режим команды Vi: <0>, <1>, <2>, <3>, <4><5>, , <6>, <7>, <8>,<9>

InvokePrompt

Удаляет текущий запрос и вызывает функцию запроса для повторного отображения запроса. Полезно для пользовательских обработчиков ключей, изменяющих состояние. Например, измените текущий каталог.

  • Функция не связана.

ScrollDisplayDown

Прокрутите экран вниз на один экран.

  • Команда: <PageDown>
  • Emacs: <PageDown>

ScrollDisplayDownLine

Прокрутите экран вниз на одну строку.

  • Команда: <Ctrl+PageDown>
  • Emacs: <Ctrl+PageDown>

ScrollDisplayToCursor

Прокрутите экран до курсора.

  • Emacs: <Ctrl+End>

ScrollDisplayTop

Прокрутите экран до верхней части экрана.

  • Emacs: <Ctrl+Home>

ScrollDisplayUp

Прокрутите экран вверх на один экран.

  • Команда: <PageUp>
  • Emacs: <PageUp>

ScrollDisplayUpLine

Прокрутите экран вверх на одну строку.

  • Команда: <Ctrl+PageUp>
  • Emacs: <Ctrl+PageUp>

SelfInsert

Вставьте ключ.

  • Функция не связана с ней.

ShowKeyBindings

Показать все привязанные ключи.

  • Команда: <Ctrl+Alt+?>
  • Emacs: <Ctrl+Alt+?>
  • Режим вставки Vi: <Ctrl+Alt+?>

ViCommandMode

Переключите текущий режим работы с Vi-Insert на Vi-Command.

  • Режим вставки Vi: <Escape>

ViDigitArgumentInChord

Запуск нового аргумента цифры для передачи другим функциям в одном из аккордов vi.

  • Функция не связана с ней.

ViEditVisually

Измените командную строку в текстовом редакторе, заданном параметром $env:EDITOR или $env:VISUAL.

  • Emacs: <Ctrl+x,Ctrl+e>
  • Режим команд Vi: <v>

ViExit

Выходит из оболочки.

  • Функция не связана с ней.

ViInsertMode

Переключитесь в режим вставки.

  • Режим команд Vi: <i>

WhatIsKey

Прочтите ключ и сообщите, к чему он привязан.

  • Команда: <Alt+?>
  • Emacs: <Alt+?>

Функции выделения

ExchangePointAndMark

Курсор помещается в расположение метки, а метка перемещается в расположение курсора.

  • Emacs: <Ctrl+x,Ctrl+x>

SelectAll

Выделите всю строку.

  • Команда: <Ctrl+a>

SelectBackwardChar

Измените текущий выделенный фрагмент, чтобы включить предыдущий символ.

  • Команда: <Shift+LeftArrow>
  • Emacs: <Shift+LeftArrow>

SelectBackwardsLine

Измените текущее выделение для включения из курсора в начало строки.

  • Команда: <Shift+Home>
  • Emacs: <Shift+Home>

SelectBackwardWord

Измените текущий выделенный фрагмент, чтобы включить предыдущее слово.

  • Команда: <Shift+Ctrl+LeftArrow>
  • Emacs: <Alt+B>

SelectForwardChar

Измените текущий выделенный фрагмент, чтобы включить следующий символ.

  • Команда: <Shift+RightArrow>
  • Emacs: <Shift+RightArrow>

SelectForwardWord

Измените текущее выделение, чтобы включить следующее слово с помощью ForwardWord.

  • Emacs: <Alt+F>

SelectLine

Измените текущий выделенный фрагмент для включения от курсора до конца строки.

  • Команда: <Shift+End>
  • Emacs: <Shift+End>

ВыберитеДалеесле

Измените текущий выделенный фрагмент, чтобы включить следующее слово.

  • Команда: <Shift+Ctrl+RightArrow>

SelectShellBackwardWord

Измените текущее выделение, чтобы включить предыдущее слово с помощью ShellBackwardWord.

  • Функция не связана с ней.

SelectShellForwardWord

Измените текущее выделение, чтобы включить следующее слово с помощью ShellForwardWord.

  • Функция не связана с ней.

SelectShellNextWord

Измените текущее выделение, чтобы включить следующее слово с помощью оболочкиNextWord.

  • Функция не связана с ней.

SetMark

Отметьте текущее расположение курсора для использования в последующей команде редактирования.

  • Emacs: <Ctrl+@>

Прогнозные функции IntelliSense

Примечание

Для использования этих функций необходимо включить прогнозную технологию IntelliSense.

AcceptNextWordSuggestion

Принимает следующее слово встроенного предложения из прогнозного intelliSense. Эту функцию можно привязать с помощью клавиш CTRL+F , выполнив следующую команду.

Set-PSReadLineKeyHandler -Chord "Ctrl+f" -Function ForwardWord

AcceptSuggestion

Принимает текущее встроенное предложение прогнозной intelliSense, нажимая клавишу RightArrow , когда курсор находится в конце текущей строки.

функции Поиск

CharacterSearch

Чтение символа и поиск следующего вхождения этого символа. Если аргумент указан, выполните поиск вперед (или назад, если отрицательное значение) для n-го вхождения.

  • Команда: <F3>
  • Emacs: <Ctrl+]>
  • Режим вставки Vi: <F3>
  • Режим команд Vi: <F3>

CharacterSearchBackward

Чтение символа и поиск следующего вхождения этого символа в обратном направлении. Если аргумент указан, выполните поиск в обратном направлении (или вперед, если отрицательное значение) для n-го вхождения.

  • Команда: <Shift+F3>
  • Emacs: <Ctrl+Alt+]>
  • Режим вставки Vi: <Shift+F3>
  • Режим команд Vi: <Shift+F3>

RepeatLastCharSearch

Повторите последний записанный поиск символов.

  • Режим команд Vi: <;>

RepeatLastCharSearchBackwards

Повторите последний записанный поиск символов, но в обратном направлении.

  • Режим команды Vi: <,>

RepeatSearch

Повторите последний поиск в том же направлении, что и раньше.

  • Режим команды Vi: <n>

RepeatSearchBackward

Повторите последний поиск в том же направлении, что и раньше.

  • Режим команды Vi: <N>

SearchChar

Прочтите следующий символ, а затем найдите его, в дальнейшем, а затем откажитесь от символа. Это предназначено для функций t.

  • Режим команды Vi: <f>

SearchCharBackward

Прочтите следующий символ, а затем найдите его, вернитесь назад, а затем откажитесь от символа. Это предназначено для функциональных возможностей T.

  • Режим команды Vi: <F>

SearchCharBackwardWithBackoff

Прочтите следующий символ, а затем найдите его, вернитесь назад, а затем откажитесь от символа. Это предназначено для функциональных возможностей T.

  • Режим команды Vi: <T>

SearchCharWithBackoff

Прочтите следующий символ, а затем найдите его, в дальнейшем, а затем откажитесь от символа. Это предназначено для функций t.

  • Режим команды Vi: <t>

SearchForward

Запрашивает строку поиска и инициирует поиск после AcceptLine.

  • Режим вставки vi: <Ctrl+s>
  • Режим команды Vi: <?>, <Ctrl+s>

Пользовательские привязки ключей

PSReadLine поддерживает пользовательские привязки ключей с помощью командлета 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

Вы можете увидеть еще много примеров в файле SamplePSReadLineProfile.ps1 , который установлен в папке модуля PSReadLine.

Большинство привязок ключей используют некоторые вспомогательные функции для редактирования командной строки. Эти 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)

IEnumerable[Microsoft.PowerShell.KeyHandler]
  GetKeyHandlers(string[] Chord)

Эти две функции используются .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)

Это main точка входа в PSReadLine. Он не поддерживает рекурсию, поэтому не полезен в пользовательской привязке ключа.

void RemoveKeyHandler(string[] key)

Эта функция используется Remove-PSReadLineKeyHandler и, вероятно, не слишком полезна в пользовательской привязке ключа.

void Replace(int start, int length, string replacement)

Замените некоторые входные данные. Эта операция поддерживает отмену и повтор. Этот вариант предпочтительнее удаления, а затем вставки, так как он рассматривается как одно действие для отмены.

void SetCursorPosition(int cursor)

Переместите курсор на заданное смещение. Перемещение курсора не отслеживается для отмены.

void SetOptions(Microsoft.PowerShell.SetPSReadLineOption options)

Эта функция является вспомогательным методом, используемым командлетом Set-PSReadLineOption, но может быть полезна для пользовательской привязки ключа, которая хочет временно изменить параметр.

bool TryGetArgAsInt(System.Object arg, [ref] int numericArg,
  int defaultNumericArg)

Этот вспомогательный метод используется для пользовательских привязок, которые учитывают DigitArgument. Типичный вызов выглядит следующим образом:

[int]$numericArg = 0
[Microsoft.PowerShell.PSConsoleReadLine]::TryGetArgAsInt($arg,
  [ref]$numericArg, 1)

Примечания

Журнал команд

PSReadLine хранит файл журнала, содержащий все команды и данные, введенные из командной строки. Файлы журнала — это файл с именем $($host.Name)_history.txt. В системах Windows файл журнала хранится по адресу $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. В системах, отличных от Windows, файлы журнала хранятся в $env:XDG_DATA_HOME/powershell/PSReadLine или $env:HOME/.local/share/powershell/PSReadLine.

Журнал может содержать конфиденциальные данные, включая пароли. PSReadLine пытается отфильтровать конфиденциальную информацию. Все командные строки, содержащие следующие строки, не записываются в файл журнала.

  • password
  • asplaintext
  • token
  • apikey
  • secret

Отзывы & участие в PSReadLine

PSReadLine на GitHub

Вы можете отправить запрос на вытягивание или отправить отзыв на странице GitHub.

См. также:

  • PSReadLine находится под сильным влиянием библиотеки строк чтения GNU.