Tại sao chế độ dán khung được kích hoạt lẻ tẻ trong màn hình thiết bị đầu cuối của tôi?


23

Tôi sử dụng Ubuntu 14.04 và tôi gặp một vấn đề kỳ lạ với màn hình thiết bị đầu cuối đang làm phiền tôi rất nhiều. Ai đó có thể giúp tôi với nó hoặc giải thích cho tôi nếu tôi làm điều gì đó sai hoặc không theo cách linux? Tôi có một số giải pháp nhưng tôi muốn hiểu tại sao điều này xảy ra lặp đi lặp lại.

Tôi thường sao chép các lệnh bash từ ghi chú của mình hoặc từ Internet và đôi khi tôi nhận được các biểu tượng 0 ~ và 1 ~ kỳ lạ bao bọc những thứ tôi đã sao chép. Nó rất khó chịu và điều này xảy ra theo cách hoàn toàn ngẫu nhiên.

Sau một hồi tìm kiếm, tôi phát hiện ra rằng thứ này được gọi là chế độ dán lợ nên bây giờ tôi sử dụng lệnh này printf "\e[?2004l"để sửa thiết bị đầu cuối của mình nếu chế độ này được bật đột ngột.

Có thể vô hiệu hóa tính năng này vĩnh viễn bằng cách nào đó? Tôi đã đối mặt với nó trên tất cả các máy Ubuntu mà tôi làm việc bây giờ. Trước đây tôi đã sử dụng Ubuntu 10.10 và 12.04 và tôi chưa bao giờ gặp vấn đề như vậy trước đây.

Câu trả lời:


11

Bạn có thể vô hiệu hóa chế độ dán ngoặc.

Để thử tạm thời, trong bash:

bind 'set enable-bracketed-paste off'

Sau đó, nếu bạn thích cách nó hoạt động, bạn có thể đặt cài đặt trong ~/.inputrchoặc toàn hệ thống tại /etc/inputrc(hoặc bất cứ nơi nào có trên Ubuntu).


4
Tất cả điều này dường như làm cho tôi là làm cho nó vì vậy tôi không thể gõ chữ "p" (và chỉ một chữ thường "p"), hoặc dán nó giống như tất cả, và không có gì khác
Brian nói Rebstate Monica

@BrianLeishman Do cách đặc biệt bindphân tích các đối số mà nó không nhận ra, đó là điều sẽ xảy ra nếu bạn chạy lệnh này bằng Readline trước phiên bản 7 hoặc Bash trước 4.4. Câu trả lời này sẽ không làm được gì hữu ích cho đến khi phát hành Ubuntu tiếp theo (17.04).
Anthony G - công lý cho Monica

Cách printftiếp cận hoạt động, nhưng nó không hoạt động khi đặt vào của tôi .bashrcvà tính năng này bằng cách nào đó tự bật lại theo định kỳ. Cách bindtiếp cận phá vỡ bàn phím của tôi ( pphím không hoạt động , and putting that line in my ~ / .inputrc` hoạt động trong 10 giây và sau đó bảng điều khiển bắt đầu tắt -enaset-enaset-...sau 10 giây sử dụng. Cuối cùng tôi cũng đã nâng cấp thủ công lên bash 4.4 từ nguồn để khắc phục sự ngu ngốc vấn đề.
Đám mây

1
Lệnh đúng là bind 'set enable-bracketed-paste off'(với một khoảng trắng thay vì `-`` đầu tiên. Chỉ chỉnh sửa một ký tự dường như là không thể.
Mũi tên

7

Bạn có thể đặt lệnh đó trong của bạn bashrc. Sau đó, nó sẽ được áp dụng mỗi khi bạn mở thiết bị đầu cuối của bạn.

Chỉ cần gõ vi ~/.bashrcvà thêm printf "\e[?2004l"vào cuối và lưu tệp với:wq


Có, tôi đã làm điều này lúc đầu thực sự :) sau đó tôi chỉ tắt chế độ này như @jwd đề xuất.
artemdevel

1
echo 'printf "\e[?2004l"' >> ~/.bashrcthực hiện điều tương tự trong một dòng và bạn có thể xác minh với tail -n1 ~/.bashrc. Không có nhu cầu sử dụng vi.
pzkpfw

6

Để trả lời câu hỏi ban đầu của bạn về lý do tại sao điều này xảy ra, đây là một tình huống có thể xảy ra:

  • Máy tính ở nhà của tôi đã có phiên bản zsh mới hỗ trợ dán ngoặc (hãy gọi nó là shell A)
  • Tôi đã đưa vào một máy tính có vỏ được đặt thành phiên bản cũ hơn của bash, không hỗ trợ dán khung (shell B)

Vấn đề là, chương trình thiết bị đầu cuối của tôi vẫn cho rằng dán khung được bật khi sshing từ shell A sang shell B, vì vậy nó tiếp tục thêm các ký tự xung quanh nội dung được dán của bạn (các bit 0 ~ và 1 ~). Shell B không hỗ trợ chúng nên nó chỉ chuyển qua chúng không thay đổi. Bạn phải nói với thiết bị đầu cuối của bạn tắt dán khung bằng cách để vỏ của bạn in một chuỗi thoát đặc biệt - đó là những gì printf "\e[?2004l"làm.

Có một số cách để giải quyết vấn đề:

  1. Nếu bạn không quan tâm đến việc dán khung, hãy tắt nó trên shell A để nó không bao giờ được bật ở vị trí đầu tiên (câu trả lời của @ jwd)

  2. Nếu bạn muốn tiếp tục sử dụng dán khung trong shell A, nhưng vô hiệu hóa trên shell B, hãy thêm chuỗi thoát vào .bashrccâu trả lời của bạn (@ MOHRE)

  3. Nâng cấp shell B để hỗ trợ dán khung, do đó, nó diễn giải đúng các ký tự 0 ~ và 1 ~ đó.

Lưu ý bên lề: nếu bạn đang sử dụng màn hình GNU, bạn cần chạy printflệnh đó bên ngoài màn hình. Nó dường như không hoạt động trong khi bên trong.


Cảm ơn @rjh :) Nhưng tôi chưa bao giờ sử dụng zsh hoặc có vấn đề với ssh như bạn mô tả. Có vẻ như một cái gì đó đã được cấu hình sai trên Ubuntu nhiều năm trước.
artemdevel
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.