2013-10-10 15 views
24

Tôi đang sử dụng oh-my-zsh trong Arch linux với chủ đề robbyrussell được tải. Khi tôi cố gắng hoàn thành tab, tôi kết thúc với các ký tự còn lại được thêm vào dấu nhắc. Nếu tôi xóa các ký tự được hoàn thành tự động, các ký tự còn lại sẽ không xóa.Ký tự còn lại khi tab hoàn thành với ZSH

Ví dụ, nếu tôi gõ vào:

~ /etc 

sau đó tab, nó quay sang

~ /e/etc/ 

với một danh sách các tùy chọn bên dưới. Thậm chí nếu tôi xóa /etc/, các /e vẫn và tôi đang mắc kẹt với:

~ /e 

tôi không thể xóa các /e. Tôi phải thực hiện một lệnh để loại bỏ các ký tự còn lại.

Bất kỳ ý tưởng gì đang xảy ra ở đây?

+0

Nếu không có thêm thông tin, đó có thể là một ký tự bị thiếu hoặc hai dấu nhắc của bạn. Đọc [câu hỏi này] (ví dụ: http://stackoverflow.com/questions/7957435/zsh-auto-complete-screws-up-command-name/10644062#10644062). Bạn đang sử dụng oh-my-zsh mới nhất? Bạn đã sửa đổi lời nhắc chưa? Tôi có thể tải xuống oh-my-zsh của mình từ GitHub để kiểm tra và có trình bày chính xác về thiết lập của bạn không? :) – simont

Trả lời

0

Hóa ra đó là sự cố ngôn ngữ. Chạy locale-gen không hoạt động cho đến khi tôi xóa một số tập tin cấu hình ở đâu đó và chạy lại nó.

Lời khuyên của bạn tốt cho lời nhắc. Cảm ơn bạn.

+0

Bạn có thể cụ thể hơn về giải pháp, những người dùng khác như tôi có thể gặp khó khăn khi hiểu cách bạn giải quyết vấn đề. –

+2

Tôi muốn tôi có thể cụ thể hơn, nhưng ban đầu tôi đã thay đổi từ UTF8 sang tiếng Latinh trong /etc/locale.gen và khi tôi chuyển sang UTF8, tôi bắt đầu gặp sự cố. Tôi đã xóa rất nhiều tệp và tôi không thể tìm thấy bài viết cho tôi biết chính xác tệp nào đã giải quyết nó cho tôi. Cuối cùng nó đã xuống để có /etc/locale.gen chính xác và chạy locale-gen là root. Tôi đã cài đặt Arch mới trên cùng một hộp và đã không có vấn đề đó một lần nữa kể từ đó. –

17

Như được đề xuất bởi simont, có thể dấu nhắc bạn đang sử dụng đang sử dụng các ký tự không thể in (như mã thoát màu) nhưng không cho biết các ký tự đó không thể in được. Vì vậy, khi lời nhắc được vẽ lại, thiết bị đầu cuối tin rằng dấu nhắc rộng hơn thực tế.

Bạn chỉ ra rằng chuỗi ký tự trong lời nhắc zsh có độ rộng bằng 0 bằng cách sử dụng các dấu phân cách %{%}. Ví dụ dấu nhắc của tôi là:

%{%(?.%F{green}.%F{red})%}➜%{%f%} 

Các (?...) là một ternary mà bộ màu sắc của cửa sổ và nó đã được đánh dấu lên để cho biết rằng nó là zero chiều rộng. Trong cùng một cách, %f đặt lại màu và cũng đã được đánh dấu.

Bạn có thể kiểm tra các thay đổi cho lời nhắc của mình bằng cách cập nhật biến PS1, để bạn có thể thử các sắp xếp khác nhau và xem những gì phù hợp với mình.

Bạn có thể đánh dấu bất kỳ ký tự nào theo cách này, vì vậy hãy cẩn thận khi đặt lời nhắc quá ngắn!

5

tôi đã cùng một vấn đề, vì vậy vào cuộc tìm kiếm của tôi cho một giải pháp tôi đã gặp bài viết này: https://wiki.archlinux.org/index.php/Locale

Và, vì nó đã được đề xuất, để cho phép một số địa phương trên toàn hệ thống, bạn chỉ cần bỏ ghi chú mong muốn locale trên /etc/locale.gen, ví dụ, trong trường hợp của tôi:

en_US.UTF-8 UTF-8 

Sau khi lưu các thay đổi trên tập tin, thực hiện (như root) trên dòng lệnh:

locale-gen 

Khởi động lại và hoạt động!(Ít nhất là đối với tôi)

48

Có vẻ như tôi có vấn đề với cấu hình miền địa phương và cấu hình UTF8 phi

Trong trường hợp của tôi sửa chữa là:

export LC_ALL="en_US.UTF-8" 

và giữ cho nó vĩnh viễn cách thêm dòng để zshrc : info

echo "export LC_ALL=en_US.UTF-8" >> .zshrc 

khác ở Ubuntu doc ​​https://help.ubuntu.com/community/Locale

+1

đây phải là câu trả lời được chấp nhận. có một câu trả lời bình chọn tiêu cực như được chấp nhận là không may. – Harry

+0

Cảm ơn rất nhiều. Nó giúp tôi nhiều. – MOHRE

+0

Bỏ ghi chú dòng sau trong '.zshrc' mặc định cũng có vẻ như là lừa cho tôi: ' xuất LANG = en_US.UTF-8' – skube

0

Tôi đã có một vấn đề tương tự, mặc dù không phải với oh-my-zsh nhưng nhắc nhở; đối với tôi giải pháp đã được xóa khỏi cấu hình của tôi:

ZLE_PROMPT_INDENT=0 
Các vấn đề liên quan