2012-06-12 32 views
9

Gần đây tôi đã chuyển sang PowerShell kể từ khi bash Cygwin của tôi bắt đầu cho tôi lỗi biên dịch vô nghĩa khi sử dụng maven. Tôi đã tìm thấy làm thế nào để lưu và khôi phục lại lịch sử lệnh của tôi trong (https://stackoverflow.com/questions/9259723/is-there-a-windows-shell-tool-can-keep-history), mà dường như làm việc (sử dụng "Lịch sử" sẽ hiển thị các lệnh gần đây sau khi bắt đầu sạch sẽ).Truy cập lịch sử PowerShell bằng mũi tên lên

Điều tôi dường như không thể làm là truy cập lịch sử này bằng mũi tên lên như bạn sẽ làm nếu lệnh được sử dụng trong phiên hiện tại.

Bất kỳ ý tưởng nào?

+0

Bạn có thoát phiên PS và bắt đầu lại từ đầu không? –

+0

Có. thoát và khởi động lại. – Siebe

+0

Tôi sợ những gì bạn đang yêu cầu không tồn tại. Nếu bạn không thoát khỏi phiên, thì chức năng mũi tên lên sẽ xuất hiện trong hộp giống như trong _cmd.exe_. –

Trả lời

2

Bạn không thể. Không có API để truy cập lịch sử của chương trình bảng điều khiển.

+0

Thực ra có vẻ như điều đó là không thể. oh well, tôi đoán tôi sẽ đi gỡ lỗi Cygwin sau đó, hoặc chỉ cần thực hiện một đợt để bọc các lệnh, như gõ 3 dòng lệnh mỗi khi tôi khởi động là một nỗi đau tổng số. – Siebe

+0

Bạn cũng có thể tạo một chức năng PowerShell. Bạn có thể đặt nó trong hồ sơ của bạn để có nó mỗi khi bạn bắt đầu PS. – Joey

+1

Tính đến tháng 10 năm 2013, điều này cuối cùng có thể sử dụng mô-đun PSReadLine tuyệt vời: https://github.com/lzybkr/PSReadLine (xem câu trả lời thay thế) – jhclark

19

Tôi khuyên bạn nên giết thói quen cũ này (tôi biết, họ chết cứng) và sử dụng tính năng cụ thể của PowerShell được xây dựng cho điều đó. Đó là trong thực tế, khá tuyệt vời. Đây là # * [tab], có 2 lựa chọn ở đây (tab trong ngoặc đơn ([tab]) có nghĩa là nút tab nên ép):

#pattern_from_command[tab] 

- chu kỳ> Powershell qua tất cả các lệnh trong lịch sử có chứa "pattern_from_command".

-> EG: Trong Powershell: nhập #echo, nhấn tab -> Powershell chu kỳ thông qua tất cả các lệnh trong lịch sử có chứa "echo" (tất nhiên nếu có).

#<id>[tab] 

-> Powershell hoàn thành lệnh có id < id >.

-> EG: Trong Powershell: gõ # 3, nhấn tab -> Powershell viết lệnh thứ ba (3) trong lịch sử vào dòng lệnh (mặc dù không thực hiện trực tiếp, chỉ cần nhấn enter để thực thi nó).

Tôi biết nó không giống như bạn sẽ làm trong bash, nhưng tôi nghĩ rằng nó có giá trị cố gắng và làm quen với.

HTH Bartek

+1

Về mặt kỹ thuật, đây là giải pháp cho vấn đề của tôi, nhưng tôi sẽ cung cấp cho nó bắn. Cảm ơn! – Siebe

+3

nhưng cần thêm phím bấm và nó cũng không phải rất thuận tiện. – netawater

+0

holycrap! thánh crap. hooly crap. Điều này thật tuyệt. Làm thế nào tôi không biết về điều này. –

6

Tính đến tháng 10 năm 2013, điều này hoàn toàn có thể sử dụng các mô-đun PSReadline tuyệt vời: http://github.com/lzybkr/PSReadLine

Bạn vẫn sẽ cần phải lưu lịch sử của bạn khi PowerShell phiên thoát của bạn và tải nó trong bạn profile.ps1 trước khi tải PSReadline (xem http://technet.microsoft.com/en-us/library/ee156792.aspx). Bạn có thể đăng ký một cái móc để lưu lịch sử của bạn khi PowerShell tồn tại bằng cách sử dụng một cái móc như thế này: Powershell profile "on exit" event?. Không giống như vanilla PowerShell, PSReadLine cho phép các phím lên/xuống truy cập bộ đệm lịch sử này.

+0

Tôi không thấy tính năng này trong PSReadline.Nó thêm chức năng tìm kiếm mẫu lịch sử phiên hiện tại vào mũi tên lên/xuống, nhưng nó không tham gia lịch sử đã lưu và lịch sử phiên hiện tại vào một hàng đợi duy nhất thông qua các phím mũi tên, trừ khi nó không được giải thích mà là để tập lệnh . Đó là những gì microsoft đã làm. –

+0

Charles: Đúng, tải lịch sử chưa được PSReadline thực hiện. Nếu không có PSReadline, ngay cả khi bạn tải lịch sử, nó sẽ được tải vào một bộ đệm riêng biệt hơn bộ đệm được sử dụng bởi các mũi tên lên/xuống - nghĩa là nếu bạn tải lịch sử PowerShell truyền thống, bạn không thể truy cập nó bằng cách sử dụng lên/xuống. Với PSReadline, nếu bạn tải lịch sử của bạn, nó * là * có sẵn bằng cách sử dụng các mũi tên lên/xuống. Vì vậy, giả sử bạn làm điều này "dòng tập thể dục" 2 dòng, PSReadline không cho phép bạn để có được hành vi này. Trả lời sửa đổi để làm rõ. – jhclark

+0

Tính đến mùa hè năm 2014, quản lý lịch sử hiện cũng được hỗ trợ trong PSReadline. – jhclark

Các vấn đề liên quan