16

Я люблю Powershell, но, исходя из опыта работы с Linux, есть несколько вещей, которые действительно меня беспокоят. Как, например, как работает автозаполнение по умолчанию.

Например: Get-PS расширяется до «Get-PSBreakpoint», который является первой соответствующей командой. В bash, если есть только одна команда, соответствующая bash расширится до соответствующей команды. Если есть несколько нажатий на вкладку, когда однажды ничего не происходит, вкладка двойного касания покажет список соответствующих команд, но не расширяется. Есть ли способ заставить Powershell вести себя так?

И еще одна вещь, если я написал одну строку и переместил маркер обратно к более ранней команде (маркер находится там, где находится ^):

«Get-PSS ^ | Remove-PSSession» автоматически завершает «Get-PSSession ^», удаляя все завершающие команды. В bash завершающие команды все равно будут там не затронуты. Есть ли способ заставить Powershell не удалять завершающие команды при автозаполнении?

Бонусом было бы получить CTRL+L, чтобы очистить экран. CTRL+A, чтобы перейти к началу строки, и CTRL+E, чтобы перейти к концу строки.

7 ответов7

10

Проверьте PSReadline.

Из статьи:

Этот модуль заменяет опыт редактирования командной строки в PowerShell.exe. Это обеспечивает:

  • Синтаксическая раскраска
  • Простое синтаксическое сообщение об ошибке
  • Хороший многострочный опыт (как редактирование, так и история)
  • Настраиваемые привязки клавиш
  • Режимы Cmd и emacs (ни один из них еще не полностью реализован, но оба могут использоваться)
  • Множество опций конфигурации
  • Завершение стиля Bash (необязательно в режиме Cmd, по умолчанию в режиме Emacs)
  • Интерактивный поиск истории в стиле Bash/ Zsh (CTRL-R)
  • Emacs yank/ kill ring
  • PowerShell на основе токенов "слово" движение и убить
  • Отменить повторить
  • Автоматическое сохранение истории, включая совместное использование истории между сеансами в реальном времени
  • Завершение "Меню" (что-то вроде Intellisense, выберите завершение стрелками) через Ctrl+ Пробел

Я использую это ежедневно!

3

Возможно, вам стоит взглянуть на Powertab, настраиваемое расширение для вкладки PowerShell.

2

Старая подсистема command.exe по-прежнему участвует в PowerShell и вызывает много неприятных действий. Но начиная с PowerShell v3, графический интерфейс (PowerShell ISE) теперь можно использовать, и он включает в себя гораздо более современный опыт завершения + раскрашивание.

1

PowerShell использует те же функции консоли, что и почтенная командная строка; так у вас есть обычный Home/End, и:

  • F3, чтобы вызвать предыдущую команду
  • F1, чтобы скопировать один символ из предыдущей команды
  • F7 всплывающее окно истории

... но, насколько я знаю, нет возможности показать все возможные варианты.

1

Привет, Питер, просто нажми F8 для чего-то вроде speedsearch. Он завершается командами, которые вы запускаете ранее, которые начинаются с того, что у вас есть в строке. Проблема с удалением трейлинга раздражает, я пишу предложение в Connect по поводу той же проблемы. В основном вы можете использовать Powershell ISE, который ведет себя немного лучше (не удаляйте висячие символы).

1

Обычный powershell использует cmd в качестве окна командной строки. Вот почему он имеет огромное наследие (программы ретранслируют поведение старого cmd целую вечность), который нельзя изменить из-за обратной сопоставимости.

Я рекомендую вам использовать powershell_ise вместо powershell (он входит в стандартную комплектацию powershell). Версия 3.0 (не уверенная в предыдущем) поддерживает Intellisense из коробки. Это очень близко к стилю завершения bash. Просто нажмите Ctrl+ Пробел вместо Tab. У меня возникают проблемы с пользовательскими дополнениями в PowerTab, но Intellisense прекрасно с ним работает. Powershell_ise также сохраняет конечные команды, имеет нормальный режим выбора, поддерживает Ctrl+ C, Ctrl+ V, Ctrl+ A для выбранной введенной команды, поэтому Ctrl+ A, переход к началу строки, Ctrl+ A, до конца (или Home/Конец).

0

PowerShell использует собственный синтаксический анализатор для команд, поэтому в некотором смысле это оболочка, отличная от cmd.exe, даже если они используют один и тот же терминал (окно графического интерфейса).

Из-за этого различия PowerShell позволяет вам переопределить функциональность завершения табуляции своей собственной функцией. У меня не было времени возиться с этим самостоятельно, но вы в основном переопределяете функцию tabexpansion в своем профиле, так же, как вы можете переопределить функцию prompt .

Я нашел эту статью, написанную Ли Холмсом (автором отличной книги Windows PowerShell Cookbook), в которой описывается переопределение табуляции, очень похожее на то, что вы ищете. Вы могли бы, вероятно, настроить его, чтобы дать вам именно то, что вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .