Tìm kiếm lịch sử ngược trong bash theo sau là các phím mũi tên khiến con trỏ hiển thị sai vị trí


10

Tôi đã nhận thấy rằng nhiều lần khi tôi tìm kiếm lịch sử ngược từ dòng lệnh thông qua CTRL+ r, nếu tôi muốn chỉnh sửa lệnh, đôi khi con trỏ nhảy sang vị trí sai khi tôi nhấn phím mũi tên hoặc nhập CTRL+ ahoặc CTRL+ e. Vị trí cụ thể mà nó nhảy có vẻ là một phần bù bằng với kích thước của dấu nhắc dòng lệnh của tôi như được đặt trong PS1.

Điều này gây khó khăn vì vị trí thực tế của con trỏ khác với vị trí được hiển thị trên màn hình; các chỉnh sửa trong tương lai của lệnh được hiển thị như thể con trỏ là nơi nó nhảy tới, nhưng lệnh thực tế vẫn giữ đúng vị trí mà không có bất kỳ bước nhảy nào.

Có ai biết những gì gây ra điều này hoặc làm thế nào để khắc phục nó?

EDIT: Nếu tôi thêm một dòng mới vào cuối của PS1vấn đề dường như biến mất. Tuy nhiên, tôi muốn nhập lệnh trên cùng dòng với dấu nhắc.

Câu trả lời:


6

Điều này thường được gây ra bởi các lệnh trong lịch sử của bạn dài hơn 1 dòng. Khi bạn chọn một mục ngắn hơn trong lịch sử, nó dường như không tính đến độ rộng của dấu nhắc trong việc hiển thị lại dòng lệnh, vì vậy mọi thứ sau lệnh dài đó đều khó hiểu.

Giải pháp dễ dàng tôi tìm thấy là nhấn phím home, chèn "echo" và nhấn enter. Sau đó nhớ lại lệnh cuối cùng và chỉnh sửa từ đó. (Đầu tiên loại bỏ tiếng vang. :)


Cảm ơn, tôi thực sự đã thử nó chỉ một lúc trước. Trong trường hợp của tôi, tôi đã bất cẩn và thổi bay một tập tin vì có một đường ống trong lệnh nuốt tiếng vang. Bạn đã đúng, điều này dường như chỉ ảnh hưởng đến các lệnh dài theo thử nghiệm của tôi.
jonderry

Một giải pháp tốt hơn so với tiếng vang mà tôi vừa tìm thấy: Nối '#' vào đầu dòng thay vì tiếng vang. Cách này bash đối xử với toàn bộ dòng như một bình luận.
jonderry

1
Tuy nhiên, tốt hơn: vấn đề dường như biến mất nếu dòng hiện tại được vẽ lại. Hoặc Cl để xóa màn hình và vẽ lại dòng hiện tại hoặc tạo ràng buộc chính cho chức năng không liên kết vẽ lại dòng hiện tại.
jonderry

Tôi đã quên đề cập đến giải pháp Cl vì tôi thực sự ghét mất bộ đệm cuộn, nhưng đúng vậy, đó là một trục trặc kết xuất tạm thời từ điều hướng lịch sử, do đó, việc vẽ lại sẽ khắc phục nó. vẽ lại dòng âm thanh như một giải pháp thậm chí tốt hơn!
cabbey

13

Có thể bạn có các chuỗi thoát không in trong PS1 không được đính kèm trong \ [và \].

Hãy chắc chắn rằng bạn kèm theo tất cả chúng như thế này:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

1
Hoạt động tuyệt vời nếu bạn chỉ bao gồm các chuỗi không in trong \[\](vì vậy bạn cần nhiều nhóm trích dẫn khối này)
Andomar
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.