Mengapa mode tempel tanda kurung diaktifkan secara sporadis di layar terminal saya?

23

Saya menggunakan Ubuntu 14.04 dan saya memiliki masalah aneh dengan layar terminal saya yang banyak mengganggu saya. Bisakah seseorang membantu saya dengan itu atau menjelaskan saya jika saya melakukan sesuatu yang salah atau non-cara linux? Saya punya semacam solusi tetapi saya ingin mengerti mengapa ini terjadi berulang kali.

Saya sering menyalin perintah bash dari catatan saya atau dari Internet dan kadang-kadang saya mendapatkan simbol 0 ~ dan 1 ~ aneh yang membungkus hal-hal yang saya salin. Ini sangat menjengkelkan dan ini terjadi secara acak.

Setelah pencarian yang panjang saya menemukan bahwa hal ini disebut mode pasta bracked jadi sekarang saya menggunakan perintah ini printf "\e[?2004l"untuk memperbaiki terminal saya jika mode ini tiba-tiba diaktifkan.

Apakah mungkin menonaktifkan fitur ini secara permanen? Saya berhadapan dengannya di semua mesin Ubuntu tempat saya bekerja sekarang. Sebelumnya saya menggunakan Ubuntu 10.10 dan 12.04 dan saya belum pernah mengalami masalah seperti itu sebelumnya.

artemdevel
sumber

Jawaban:

11

Anda dapat menonaktifkan mode tempel kurung.

Untuk mencobanya sementara, di bash:

bind 'set enable-bracketed-paste off'

Kemudian, jika Anda suka bagaimana perilakunya, Anda dapat menempatkan pengaturan di ~/.inputrc, atau di seluruh sistem Anda /etc/inputrc(atau di mana pun itu berada di Ubuntu).

jwd
sumber
4
Semua ini sepertinya dilakukan untuk saya adalah membuatnya jadi saya tidak bisa mengetik huruf "p" (dan hanya huruf kecil "p"), atau menempelkannya sama sekali, dan tidak ada yang lain
Brian mengatakan Reinstate Monica
@BrianLeishman Karena cara aneh bindmem-parsing argumen yang tidak dikenali, itulah yang akan terjadi jika Anda menjalankan perintah ini menggunakan Readline sebelum versi 7 atau Bash sebelum 4.4. Jawaban ini tidak akan melakukan apa pun yang berguna sampai rilis Ubuntu berikutnya (17.04).
Anthony G - keadilan untuk Monica
The printfpendekatan bekerja, tapi itu tidak bekerja ketika dimasukkan ke dalam saya .bashrc, dan fitur entah bagaimana mati sendiri kembali secara berkala. The bindPendekatan istirahat keyboard (p tombol tidak bekerja , and putting that line in my ~ / .inputrc` karya, selama 10 detik, dan kemudian konsol dimulai barfing keluar -enaset-enaset-...selamanya setelah 10 detik dari penggunaan. Saya akhirnya hanya secara manual upgrade ke pesta 4,4 dari sumber untuk memperbaiki bodoh masalah
Cloud
1
Perintah yang benar adalah bind 'set enable-bracketed-paste off' (dengan spasi alih-alih `-`` pertama. Mengedit hanya satu karakter tampaknya tidak mungkin.
Panah
7

Anda dapat menempatkan perintah itu di bashrc. Maka itu akan berlaku setiap kali Anda membuka terminal Anda.

Cukup ketik vi ~/.bashrcdan tambahkan printf "\e[?2004l"di bagian akhir dan simpan file dengan:wq

MOHRE
sumber
Ya, sebenarnya saya melakukan ini pada awalnya :) kemudian saya hanya menonaktifkan mode ini seperti yang disarankan @jwd.
artemdevel
1
echo 'printf "\e[?2004l"' >> ~/.bashrcmelakukan hal yang sama dalam satu baris, dan Anda dapat memverifikasinya tail -n1 ~/.bashrc. Tidak perlu digunakan vi.
pzkpfw
6

Untuk menjawab pertanyaan awal Anda mengapa hal ini terjadi, berikut ini skenario yang mungkin:

  • Komputer di rumah saya memiliki versi baru zsh yang mendukung tempel tanda kurung (sebut saja shell A)
  • Saya sshed ke komputer dengan shell saya disetel ke versi bash yang lebih lama, yang tidak mendukung paste bracketed (shell B)

Masalahnya adalah, program terminal saya masih menganggap braket tempel diaktifkan ketika sshing dari shell A ke shell B, jadi itu terus menambahkan karakter di sekitar konten yang Anda tempelkan (0 ~ dan 1 ~ bit). Shell B tidak mendukung mereka sehingga hanya melewati mereka tanpa perubahan. Anda harus memberi tahu terminal Anda untuk mematikan pasta yang diberi tanda kurung dengan meminta shell Anda mencetak urutan pelarian khusus - yang memang printf "\e[?2004l"demikian.

Ada beberapa cara untuk mengatasi masalah ini:

  1. Jika Anda sama sekali tidak peduli dengan braket tempel, matikan pada shell A sehingga tidak pernah diaktifkan di tempat pertama (@ jwd's answer)

  2. Jika Anda ingin terus menggunakan kurung kurung pada shell A, tetapi nonaktifkan pada shell B, tambahkan urutan escape ke .bashrc(@ jawaban MOHRE) Anda

  3. Mutakhirkan shell B untuk mendukung pasta yang diberi tanda kurung, sehingga menafsirkan dengan benar 0 ~ dan 1 ~ karakter tersebut.

Catatan: jika Anda menggunakan layar GNU, Anda harus menjalankan printfperintah itu di luar layar. Sepertinya tidak berfungsi saat di dalam.

rjh
sumber
Terima kasih @ rjh :) Tapi saya tidak pernah menggunakan zsh atau memiliki masalah dengan ssh seperti yang Anda gambarkan. Sepertinya ada sesuatu yang salah konfigurasi di Ubuntu tahun lalu.
artemdevel