Có thể làm cho tự động hoàn thành trong Powershell hoạt động như trong bash?


19

Tôi yêu Powershell, nhưng đến từ nền tảng Linux, có một vài điều thực sự làm tôi khó chịu. Ví dụ như cách hoàn thành tự động mặc định hoạt động.

Ví dụ: Get-PS mở rộng thành "Get-PSBreakpoint", đây là lệnh khớp đầu tiên. Trong bash nếu chỉ có một lệnh khớp bash sẽ mở rộng thành lệnh khớp. Nếu có một vài tab nhấn một lần không làm gì, chạm hai lần vào tab sẽ hiển thị danh sách các lệnh khớp nhưng không mở rộng. Có cách nào để khiến Powershell cư xử như thế này không?

Và một điều nữa, nếu tôi đã viết một dòng và di chuyển điểm đánh dấu trở lại lệnh trước đó (điểm đánh dấu là nơi ^):

Tự động "Get-PSS ^ | Remove-PSSession" hoàn thành thành "Get-PSSession ^", xóa tất cả các lệnh theo dõi. Trong bash, các lệnh trailing sẽ vẫn không bị ảnh hưởng. Có cách nào để Powershell không xóa các lệnh trailing khi tự động hoàn thành không?

Phần thưởng sẽ là để có được CTRL + L để xóa màn hình. CTRL + A để đi đến đầu dòng và CTRL + E để đi đến cuối dòng.


Tôi đã đăng câu trả lời cho câu hỏi của bạn nhưng điều buồn cười là tôi đã trả lời câu hỏi này vì tôi đang tìm kiếm điều hoàn toàn ngược lại ... Tôi muốn hoàn thành kiểu PowerShell trong bash :)
Robert S Ciaccio

Hoàn thành kiểu PowerShell có sẵn trong bash - hãy tìm menu hoàn thành chức năng
Jason Shirk

May mắn thay, chúng tôi đã bash trên windows 10 bây giờ.
byxor

Câu trả lời:


11

Kiểm tra PSReadline .

Từ bài viết:

Mô-đun này thay thế trải nghiệm chỉnh sửa dòng lệnh trong PowerShell.exe. Nó cung cấp:

  • Tô màu cú pháp
  • Thông báo lỗi cú pháp đơn giản
  • Trải nghiệm nhiều dòng tốt (cả chỉnh sửa và lịch sử)
  • Các ràng buộc chính có thể tùy chỉnh
  • Chế độ Cmd và emacs (chưa được thực hiện đầy đủ, nhưng cả hai đều có thể sử dụng được)
  • Nhiều tùy chọn cấu hình
  • Hoàn thành kiểu Bash (tùy chọn trong chế độ Cmd, mặc định ở chế độ Emacs)
  • Tìm kiếm lịch sử tương tác kiểu Bash / zsh (CTRL-R)
  • Emacs yank / kill ring
  • Chuyển động và tiêu diệt "từ" mã thông báo PowerShell
  • Hoàn tác / làm lại
  • Tự động lưu lịch sử, bao gồm chia sẻ lịch sử qua các phiên trực tiếp
  • Hoàn thành "Menu" (hơi giống Intellisense, chọn hoàn thành bằng mũi tên) qua Ctrl + Space

Tôi sử dụng nó hàng ngày!


4
Khi bạn cài đặt PSReadLine, bạn phải bật hoàn thành tab kiểu bash bằng cách thêm phần này vào hồ sơ của bạn: Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris

3
PSReadLine hiện được cài đặt theo mặc định trên Windows 10. Chỉ cần đặt dòng cấu hình mà @brianpeiris đã đề cập vào hồ sơ của bạn và bạn sẽ ổn.
Don Cruickshank

Hãy thử sử dụng CompleteMenuthay vì Completeđể có trải nghiệm giống như bash hơn, nó cho phép bạn sử dụng các phím mũi tên để điều hướng các lựa chọn
stib

3

Có lẽ bạn nên xem qua Powertab , bản mở rộng PowerShell Tab có thể tùy chỉnh.


2
Cảm ơn! Powertab thực sự làm cho cách mở rộng tab tốt hơn. Tuy nhiên, vấn đề hoàn thành một cái gì đó không ở cuối lệnh là ở đó.
Peter Moberg

2

hi peter chỉ cần nhấn F8 cho một cái gì đó như speedearch. Nó hoàn thành với các lệnh mà bạn chạy trước đó bắt đầu với những gì bạn có trong dòng. Vấn đề với việc xóa dấu vết là khó chịu, tôi viết một đề nghị trong Connect liên quan đến cùng một vấn đề. Trong thời gian chính bạn có thể sử dụng Powershell ISE, hoạt động tốt hơn một chút (không xóa các ký tự dấu).


2

Hệ thống con Command.exe cũ vẫn tham gia vào PowerShell và buộc nhiều hành vi khó chịu. Nhưng kể từ PowerShell v3, GUI (PowerShell ISE) hiện có thể sử dụng được và nó bao gồm trải nghiệm hoàn thành + tô màu hiện đại hơn nhiều.

nhập mô tả hình ảnh ở đây


2

PowerShell sử dụng các tính năng giao diện điều khiển tương tự như Command Prompt đáng kính; vì vậy, bạn có Home / End thông thường và:

  • F3 đưa ra lệnh trước
  • F1 để sao chép một ký tự từ lệnh trước
  • F7 cửa sổ lịch sử bật lên

... nhưng không có cơ sở để hiển thị tất cả các hoàn thành có thể, theo như tôi biết.


Điều này vẫn còn rất hạn chế so với bash cũ tốt. Ví dụ, thật tuyệt vời khi có thể nhập ctrl + r (speedearch) trong bash và chỉ cần bắt đầu nhập và một lệnh phù hợp trước đó sẽ hiển thị.
Peter Moberg

1

Powerhell thông thường sử dụng cmd làm cửa sổ nhắc lệnh. Đó là lý do tại sao nó có một di sản khổng lồ (các chương trình chuyển tiếp hành vi của cmd cũ theo thời gian) không thể thay đổi vì so sánh ngược.

Tôi khuyên bạn nên sử dụng powershell_ise thay vì powershell (nó bao gồm trong gói powershell tiêu chuẩn). Phiên bản 3.0 (không chắc chắn về phiên bản trước) hỗ trợ Intellisense từ hộp. Điều này rất gần với phong cách hoàn thành bash. Chỉ cần nhấn Ctrl + Space thay vì Tab. Tôi gặp vấn đề với việc hoàn thành tùy chỉnh trên PowerTab, nhưng Intellisense chỉ hoạt động tốt với nó. Powershell_ise cũng duy trì các lệnh theo dõi, có chế độ chọn bình thường, hỗ trợ Ctrl + C, Ctrl + V, Ctrl + A để chọn lệnh đã nhập, do đó Ctrl + A, nhảy để cầu xin dòng, Ctrl + A, đến cuối (hoặc Trang chủ /Kết thúc).


0

PowerShell sử dụng trình phân tích cú pháp riêng của nó cho các lệnh, vì vậy theo một nghĩa nào đó, nó là một trình bao khác với cmd.exe, mặc dù chúng có chung một thiết bị đầu cuối (cửa sổ gui).

Do sự khác biệt đó, PowerShell cho phép bạn ghi đè chức năng hoàn thành tab bằng chức năng của riêng bạn. Tôi đã không có thời gian để tự làm hỏng điều này, nhưng về cơ bản, bạn sẽ ghi đè chức năng tabexpansiontrong hồ sơ của mình, giống như cách bạn có thể ghi đè promptchức năng.

Tôi đã tìm thấy bài viết này , bởi Lee Holmes (tác giả của Windows PowerShell Cookbook tuyệt vời ), mô tả một ghi đè mở rộng tab rất giống với những gì bạn đang tìm kiếm. Bạn có thể có thể điều chỉnh nó để cung cấp cho bạn chính xác những gì bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.