Эквивалент bash Ctrl-R в PowerShell

19

Кто-нибудь знает способ иметь функцию поиска обратной команды bash [Ctrl-r][Ctrl-o]), которые так полезны, в Windows PowerShell?

C-rэто более мощная arrow upманипуляция с историей, она похожа на emacs C-rв том, что она ищет внутри команд, которые вы ввели ранее. Затем C-oвыполняет эту команду и сразу же помещает в строку следующую команду после этого. Так что вы можете эффективно повторять пройденные серии команд. Также он просматривает сохраненную историю, а не историю сеанса. ( ~/.bash_historyфайл). Что бесконечно полезно.

Благодарю.

ps: в качестве бонуса было бы здорово и завершение вкладки, не работающее циклами.

v.oddou
источник
Что Ctrl O делает, что вы хотите повторить? Больше информации у нас всегда хорошо ...
Остин Т Френч
Да, отредактировал вопрос :)
v.oddou
2
Я не верю, что эта функция поддерживается. В PowerShell 3 есть вызываемый хук, PSConsoleHostReadlineкоторый может быть полезен. Хорошее место для начала было бы использовать PSReadLine , который использует этот хук. PSReadLine не поддерживает ctrl-o, но поддерживает ctrl-r (предположительно - у меня это не сработало). Я могу взглянуть на реализацию Ctrl-O на Рождество, потому что это звучит полезно.
dangph
2
Ах, PSReadLine, это похоже на мой ответ, вы должны опубликовать его как ответ. у него нет Co, но есть Cr, который является наиболее важным. Он также имеет настройку завершения вкладки, которую я хотел в бонусе.
v.oddou
2
PSПеречитайте автора здесь - @ v.oddou - Ctrl + K должен быть привязан к KillLine в режиме Emacs. Ctrl + R должен работать без ввода текста в первую очередь. Я счастлив добавить Ctrl + O - не стесняйтесь, чтобы открыть вопрос на GitHub.
Джейсон Ширк

Ответы:

15

Введите первые буквы команды и нажмите F8.

Или вы можете нажать F7и ввести первые буквы.

Более подробная информация: http://technet.microsoft.com/en-us/magazine/ff678293.aspx

Georgik
источник
F7 ничего не делает ...
Даниэль К.
Не могли бы вы предоставить больше информации? Может быть, это может быть полезно для других. Какая версия Powershell и какая версия Windows? Powershell по умолчанию довольно ограничен. Лучше использовать MobaXterm или ConEmuMaximus 5, чтобы улучшить UX
georgik
@CatBoss F7 работает в cmd
phuclv
1
@ LưuVĩnhPhúc, тогда ответ должен сказать так, потому что вопрос о Powershell ....
Даниэль К.
Смотрите ответ ниже - не тратьте свое время на F8, если вы находитесь на PowerShell 5+
Николас ДиПиацца
6

WMF 5.0 RTM , который включает в себя Windows PowerShell 5 , теперь поддерживает ту же функцию поиска обратных команд bash CTRL+R. Я использовал это в Windows 10 Anniversary Edition, и моя память мышц bash очень счастлива.

Поддержка на самом деле исходит от модуля PowerShell PSReadLine, который, как я вижу, упоминался в некоторых комментариях вопроса. Хорошо, что PSReadLine теперь включен в базовую установку WMF 5.0 , по крайней мере, в Windows 10.

Если вы используете PowerShell 3 или более позднюю версию , вы также можете установить PSReadLine и получить функцию поиска по истории.

Примечание: я не узнал, как заставить это работать в ISE, поскольку CTRL+Rсопоставлено с чем-то другим (Показать / Скрыть Панель Сценария).

Lantrix
источник
4

Для управления вашей историей вы можете использовать командлеты истории, перечислите их с помощью этой команды:

Get-Command *-history

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

Get-history | Select-String "command"

function f ($Name) { Get-history | Select-String $name }
nohwnd
источник