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


PSReadLine

about_PSReadLine

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

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

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

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

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

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

Примечание

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

В классе [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>

НазадDeleteWord

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

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

Обратная линия

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

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

BackwardKillWord

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

  • Команда: <Ctrl+Backspace>
  • 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,Space>

DeleteCharOrExit

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

  • Emacs: <Ctrl+d>

DeleteEndOfWord

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

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

DeleteLine

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

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

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

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

  • Команда: <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. Входные данные, вставленные с помощью метода вставки правой кнопкой мыши консольного приложения, копируются во входной буфер по одному символу за раз. Входной буфер передается в средство синтаксического анализа при копировании символа новой строки. Таким образом, входные данные анализируются по одной строке за раз. Разница между методами вставки приводит к различным вариантам выполнения.

PasteAfter

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

  • Режим команд 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

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

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

SwapCharacters

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

  • 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,Space>

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>

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>

GotoBrace

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

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

GotoColumn

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

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

GotoFirstNonBlankOfLine

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

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

MoveToEndOfLine

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

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

NextLine

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

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

NextWord

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

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

NextWordEnd

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

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

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

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

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

ShellBackwardWord

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

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

ShellForwardWord

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

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

ShellNextWord

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

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

ViBackwardWord

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

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

ViEndOfGlob

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

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

ViEndOfPreviousGlob

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

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

ViGotoBrace

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

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

ViNextGlob

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

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

ViNextWord

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

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

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

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>

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

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

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

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

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

TabCompleteNext

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

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

TabCompletePrevious

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

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

ViTabCompleteNext

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

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

ViTabCompletePrevious

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

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

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

CaptureScreen

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

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

ClearScreen

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

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

DigitArgument

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

  • 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>, <8><7>,<9>

InvokePrompt

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

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

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+>'

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

Поиск символов

Чтение символа и поиск следующего вхождения этого символа. Если аргумент указан, выполните поиск вперед (или назад, если отрицательный) для 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)

Эта функция используется 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 поддерживает файл журнала, содержащий все команды и данные, введенные из командной строки. Он может содержать конфиденциальные данные, включая пароли. Например, при использовании командлета ConvertTo-SecureString пароль регистрируется в файле журнала в виде обычного текста. Файлы журнала — это файл с именем $($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

PSReadLine на GitHub

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

См. также:

На PSReadLine сильно влияет библиотека строк чтения GNU.