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