Tại sao CTRL-r hành động kỳ lạ (chỉ hiển thị một phần của lệnh) trên OS X


10

Ctrl+ rlà một công cụ nhỏ tuyệt vời để tìm kiếm .bash_historycác lệnh đã chạy trước đó của bạn .

Tuy nhiên, khi tôi sử dụng nó trong OS X Terminal.app tôi thấy hành vi kỳ lạ và tôi đã tự hỏi liệu có ai khác nhìn thấy điều tương tự hoặc biết cách khắc phục nó không.

  1. Ctrl+r
  2. gõ vào một cái gì đó như find
  3. ồ, nhìn này ... đó là mệnh lệnh tôi muốn find . -exec grep -q "hello world" '{}' \; -print
  4. Tôi muốn chạy lệnh đó nhưng thay đổi thế giới xin chào sang thứ khác.
  5. Vì vậy, tôi nhấn hoặc
  6. Bây giờ lệnh là SORTA trên dòng lệnh nhưng nó luôn trông giống như một phiên bản bị ngắt của lệnh, như thế này : -q "blog_posts_by" '{}' \; -print, trong đó toàn bộ lệnh có ở đó và tôi có thể sử dụng các phím con trỏ để di chuyển trên dòng, nhưng không phải tất cả nó được in Có một sự ngắt kết nối giữa những gì được hiển thị trên dòng và những gì thiết bị đầu cuối thực sự nghĩ rằng tôi đang chỉnh sửa.

Có ai có manh mối tại sao điều này có thể xảy ra? Đây không phải là một hiện tượng dễ dàng để tìm kiếm các trang web.


Điều này chỉ xảy ra trên các dòng dài hơn sau đó chiều rộng cửa sổ hạn của bạn?
Essobi

Phiên bản nào của Terminal.App/OSX bạn đang chạy BTW? Phiên bản Bash? Bạn có thể cho chúng tôi xem .bashrc của bạn không?
Essobi

Câu trả lời:


14

Bạn có thể có các chuỗi thoát cho các màu trong lời nhắc của bạn không được phân định chính xác. Họ cần phải được bao bọc trong \[\].

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ `

Độ dài của các chuỗi ký tự không in không được bao gồm trong độ dài của dấu nhắc khi chúng được bao quanh và vị trí của các lệnh trước đó cần được tính toán để hiển thị đúng khi chúng bao bọc.


OK, tôi đã có thêm một vài vấn đề nữa, đã được người trả lời giải quyết trên luồng StackOverflow này - stackoverflow.com/questions/35563/
bryan kennedy

Điều này cũng áp dụng cho các dòng mới trong lời nhắc. Tôi đã có một chuỗi điều khiển màu sắc bị bỏ bởi vì nó là lúc bắt đầu PS1, nhưng không phải là một lần nữa sau dòng char mới bên trong.
Walf

0

Điều này có thể là do cách các phím thoát được định cấu hình trên Terminal của bạn, điều tôi thường làm là sử dụng mũi tên trái hoặc phải trên iTerm hoặc Terminal.app vì tôi không phải là người thích quay lại ngay lập tức, điều đó có hiệu quả với bạn không ?


0

Một nguyên nhân có thể khác cho vấn đề này là có TERMgiá trị sai . Chẳng hạn, điều này xảy ra với tôi khi tôi đang sử dụng màu trong PS1, nhưng tôi TERMđã được đặt thành xterm. Tôi đã thay đổi nó xterm-256colorvà sau đó CTRL-r bắt đầu hoạt động chính xác trở lại.

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.