Saya sering menggunakan ctrl+cuntuk menyalin teks dari beberapa aplikasi gui dan kemudian menempelkannya ke emulator terminal saya (terminator), menggunakan menu klik kanan mouse dan menempelkan. Terkadang saya lupa bahwa clipboard berisi beberapa baris, yang ketika disisipkan ke bash menyebabkan setiap baris "dieksekusi"
Apakah ada solusi untuk mencegah pasta multi-line sepenuhnya?
bash
command-line
x11
clipboard
terminal-emulator
Martin Vegter
sumber
sumber
sleep 999999
kemudian lakukan paste jika terlihat ok. perintah sleep tidak membaca baris dan dibuang ketika Anda menekanctrl+c
.bash
akan memiliki dukungan untuk pasta yang diberi tanda kurung ,zsh
sudah ada melalui plugin pihak ke-3 .printf '\e[?2004h'
pada kebanyakan emulator terminal seperti xterm memungkinkan mode kurung di-bracket di mana terminal mengurung teks yang disisipkan sehingga aplikasi dapat mendeteksi di mana pasta mulai dan di mana itu berakhir. xterm juga mendukung mode lain dengan\e[?2005h
semua karakter yang disisipkan diawali^V
(dipahami oleh banyak aplikasi dan disiplin garis tty sebagailitteral-next
).Jawaban:
Jawaban ini bukan yang paling spesifik untuk pertanyaan pengguna. Silakan lihat jawaban kedua saya. Saya meninggalkan ini di sini karena ini membahas masalah yang lebih umum .
Per komentar untuk posting asli Anda, Anda perlu (1) terminal emulator yang mendukung tanda kurung sisipkan dan (2) dukungan yang sesuai untuk apa pun yang berjalan di terminal, yaitu,
vim
,bash
,zsh
. Terminal emulator yang mendukung pasta kurung (daftar akan diperbarui berdasarkan komentar pada posting ini):xterm
- sejak ??gnome-terminal
- sejak ??putty
- sejak 0.63 (tanggal rilis 2013-08-06)Aplikasi yang mendukung mode kurung:
vim
zsh
Sebab
bash
, StéphaneChazelas telah menyusun skrip shell untuk memfasilitasi deteksi mode itu dan mengambil tindakan yang sesuai.Jawaban yang lebih spesifik - mencegah agar garis tidak terpotong - tidak dapat dijawab tanpa mengetahui tentang program unix yang berjalan saat Anda menekan tempel.
Seorang manajer clipboard mungkin apa yang Anda butuhkan.
sumber
^V
sebagailiteral-next
. Tapi bagaimana cara^V
masuk ke aliran input aplikasi?bash
prompt readline akan melihatnya (dan akan memperlakukan adalah sebagai literal-berikutnya)). Jika dalam mode icanon, garis disiplin dari perangkat tty dalam akan menghapusnya (selamalnext
karakternya^V
), sama seperti ketika Anda mengetik Ctrl-V X secara manual ..^V
kecuali Anda menggunakanquoted paste
mode xterm (diaktifkan dengan mengirim\e[?2005h
). Ituperl
skrip dapat disesuaikan sehingga menghilangkan semua kecuali baris pertama dalam pasta multi-line (meskipun tidak andal untuk pasta besar), tetapi karena sudah, karena mengutip baris baru untuk readline (seperti jika Anda telah menekan Ctrl V Ctrl-J), ini mencegah baris dieksekusi (mereka baru saja ditambahkan ke buffer pengeditan dan Anda masih perlu menekan Enter untuk menjalankannya).