Можна зробити так, щоб автодоповнення в Powershell працювало, як у bash?


19

Я люблю Powershell, але, походячи з фона Linux, є кілька речей, які насправді клопочуть мене. Наприклад, як працює автоматичне завершення за замовчуванням.

Наприклад: Get-PS розширюється до "Get-PSBreakpoint", що є першою командою узгодження. У bash, якщо є лише одна команда, збіг bash розшириться на відповідну команду. Якщо кілька вкладок натискання один раз нічого не робить, вкладка подвійного торкання покаже список відповідних команд, але не розширюється. Чи є спосіб змусити Повершелла поводитись так?

І ще одна річ, якщо я написав один рядок і переміщує маркер назад до попередньої команди (маркер, де ^ є):

Автоматично "Get-PSS ^ | Remove-PSSession" завершується до "Get-PSSession ^", видаляючи всі тривалі команди. Зрештою, трейлінг команди все ще залишатимуться без змін. Чи є спосіб змусити Powershell не видаляти проміжні команди при автоматичному завершенні?

Бонусом було б отримати CTRL + L, щоб очистити екран. CTRL + A - перейти до початку рядка, а CTRL + E - до кінця рядка.


Я опублікував відповідь на ваше запитання, але найсмішніше, що я прийшов до цього питання, тому що шукаю прямо протилежне ... Я хочу, щоб стиль PowerShell був завершений в баш :)
Robert S Ciaccio

Завершення стилю PowerShell доступне в стилі башти - шукайте функціональне меню
Jason Shirk

На щастя, у нас зараз виграє вікно 10.
byxor

Відповіді:


12

Перевірте PSReadline .

Зі статті:

Цей модуль замінює досвід редагування командного рядка в PowerShell.exe. Він передбачає:

  • Забарвлення синтаксису
  • Просте повідомлення про помилку синтаксису
  • Хороший багаторядковий досвід (як редагування, так і історія)
  • Настроювані прив'язки клавіш
  • Режими Cmd і Emacs (жоден ще не повністю реалізований, але обидва є корисними)
  • Багато варіантів конфігурації
  • Завершення стилю Bash (необов’язково в режимі Cmd, за замовчуванням в режимі Emacs)
  • Інтерактивний пошук історії стилю Bash / zsh (CTRL-R)
  • Emacs потягнути / вбити кільце
  • PowerShell на основі лексеми "слово" рухається і вбиває
  • Скасувати / повторити
  • Автоматичне збереження історії, включаючи обмін історією в прямому сеансі
  • Завершення меню (дещо як Intellisense, виберіть завершення стрілками) через Ctrl + Space

Я використовую його щодня!


4
Після встановлення PSReadLine, ви повинні увімкнути завершення вкладки стилю bash, додавши це до свого профілю:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris

3
PSReadLine тепер встановлений за замовчуванням у Windows 10. Просто поставте конфігураційну лінію, яку @brianpeiris згадав у ваш профіль, і ви готові йти.
Дон Круйшанк

Спробуйте скористатися CompleteMenuзамість того, Completeщоб отримати більш баш-досвід, він дозволяє використовувати клавіші зі стрілками для навігації по виборах
стиб

3

Можливо, вам слід ознайомитись з Powertab , налаштованим розширенням PowerShell Tab.


2
Спасибі! Powertab дійсно покращує розширення вкладки. І все-таки проблема, що завершує щось не наприкінці команди, є.
Пітер Моберг

2

привіт, Пітер, просто натисніть F8 для чогось типу швидкого пошуку. Він завершується командами, які ви виконуєте раніше, які починаються з того, що у вас є в рядку. Проблема з видаленням трейлінгу дратує, я пишу пропозицію в Connect щодо тієї ж проблеми. В основному ви можете використовувати Powershell ISE, які ведуть себе трохи краще (не видаляйте символи, що відкладаються).


2

Стара підсистема command.exe все ще бере участь у PowerShell і викликає безліч неприємних способів поведінки. Але, що стосується PowerShell v3, GUI (PowerShell ISE) тепер є корисним, і він включає набагато сучасніший досвід завершення + колоризацію.

введіть тут опис зображення


2

PowerShell використовує ті ж функції консолі, що і поважний командний рядок; тож у вас є звичайний Home / End і:

  • F3 вивести попередню команду
  • F1 скопіювати один символ із попередньої команди
  • F7 спливаюче вікно історії

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


Це все ще дуже обмежує порівняно зі старим добрим басом. Наприклад, справді чудово, що можна вводити ctrl + r (speedsearch) в bash, і просто почніть вводити текст, і з’явиться відповідна попередня команда.
Пітер Моберг

1

У звичайному вікні повноважень використовується cmd як вікно командного рядка. Ось чому він має величезну спадщину (програми ретрансляції поведінки старих cmd на віки), які неможливо змінити через відсталу порівнянність.

Рекомендую використовувати вместо powerhell ( powershell_ise) замість powershell (вона входить у стандартний пакет пауерлів). Версія 3.0 (не впевнена в попередньому) підтримує Intellisense з поля. Це дуже близько до стилю завершення баш. Просто натисніть Ctrl + Space, а не Tab. У мене виникають проблеми із спеціальними доповненнями на PowerTab, але Intellisense з цим працює чудово. Powershell_ise також зберігає трейлінг команди, мати нормальний режим вибору, підтримувати Ctrl + C, Ctrl + V, Ctrl + A для вибору введеної команди, тому Ctrl + A, перейти до випробовування рядка, Ctrl + A, до кінця (або додому / Кінець).


0

PowerShell використовує власний аналізатор для команд, тому в певному сенсі це оболонка, що відрізняється від cmd.exe, навіть якщо вони мають один і той же термінал (вікно gui).

Через цю різницю PowerShell дозволяє вам переосмислити функцію заповнення вкладок власною функцією. Я не встиг зіткнутися з цим сам, але ви, в основному, перекриваєте функцію tabexpansionу своєму профілі, так само як і ви можете перекрити promptфункцію.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.