Salin teks satu baris panjang dari terminal dengan baris perubahan yang tidak diinginkan

14

locate ... | less menghasilkan jalur panjang, yang ditampilkan sebagai beberapa garis di terminal, meskipun sebenarnya satu garis.

Saya menyalin jalur dari terminal dengan memilih teks dengan mouse dan menekan Ctrl+ Shift+ C. Ketika saya menempelkannya ke file teks, saya mendapatkan perubahan-baris yang tidak diinginkan dalam teks, persis seperti yang ditunjukkan pada terminal.

Tapi saya ingat kadang-kadang saya bisa menyalin output jalur panjang dengan locate ... | less, tanpa memperkenalkan perubahan garis yang tidak diinginkan, dan kadang-kadang saya tidak bisa. Saya tidak menyadari jika saya melakukan sesuatu yang berbeda.

Jadi saya bertanya-tanya bagaimana cara memastikan masalah tidak akan terjadi? Terima kasih!

OS Saya: Ubuntu 12.04.

Terminal saya: Terminal Gnome 3.4.1.1

Tim
sumber
Tetapi Ctrl + Shift + C kadang-kadang dapat menyalin garis panjang tanpa menyalin garis perubahan. Masalahnya masih berbeda, saya pikir.
Tim
Jadi Q Anda lebih banyak tentang mengapa atau bagaimana mengendalikan perilaku ini?
slm
Iya. Saya menyalin teks keluar dari terminal menggunakan tombol pintas (yang saya kira adalah cara tercepat), bukan dengan mengarahkan output ke file
Tim
Apakah ada sesuatu yang lebih tentang ketika perilaku itu satu arah vs yang lain?
slm

Jawaban:

3

Alih-alih menyalin apa yang ditampilkan di terminal (hanya yang cocok dengan layar), salin teks yang sebenarnya. Gunakan salah satu utilitas eksternal xsel atau xclip (mereka memiliki sebagian besar fitur yang sama, saya akan menggunakan xsel dalam jawaban ini) untuk menyalin data dari atau ke papan klip X. Untuk menyalin ke clipboard, sampaikan konten yang diinginkan pada input standar. Saat menempel dari clipboard, konten ditulis ke output standar.

Dalam kurang, gunakan |perintah untuk menyalurkan sekelompok garis melalui perintah. Gulir ke baris pertama yang ingin Anda tindak lanjuti, ketik mmuntuk menetapkan tanda, gulir ke baris terakhir, dan ketik |mxsel -bdan tekan Enter. Dua tanda sudah ditentukan sebelumnya: ^untuk awal file, $untuk akhir file. Jadi, untuk menyalin seluruh file, gunakan <|$xsel -b. Untuk menyalin satu baris, gunakan mm|mxsel -bdan Enter.

Hapus -bopsi untuk menyalin ke pemilihan utama alih-alih clipboard.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3

Perilaku nyata ini adalah sebagai berikut:

jika Anda berada di lessdan Anda memiliki file dengan garis yang sangat panjang, maka jika Anda menggulir ke garis yang panjang ke bawah dan menggulir kembali ke atas, Anda memiliki beberapa baris, saat menyalin seluruh teks. Setelah itu, ketika Anda menggulirkan garis yang terpecah ke bawah di bagian bawah terminal dan menggulirkan garis ke atas lagi, jeda baris akan dihapus lagi.

Untuk visualisasi:

masukkan deskripsi gambar di sini

bobbel
sumber
2

Anda dapat menyalin garis keluaran tanpa baris baru tambahan ( penghentian baris) jika teks langsung ditampilkan ke terminal.
Terminal dapat melacak di mana garis akhir yang sebenarnya berada.

Tetapi jika jalurnya adalah keluaran oleh lessatau pagerprogram serupa , terminal tidak tahu di mana baris baru berada. Pager menggunakan terminal sebagai layar penuh karakter, dan memberitahu terminal "letakkan karakter ini di sana" dan operasi seperti menggulir. Tapi, untuk terminal, tidak ada cara untuk melihat di mana baris baru dimaksudkan.

Volker Siegel
sumber
2
Saya menemukan bahwa kadang-kadang saya menyalin jeda baris dan kadang tidak. Itu tidak konsisten sepanjang waktu. Hari ini keduanya terjadi ketika saya Ctrl-shift-c dari locate <something> | lessdalam dua kasus yang berbeda.
Tim
Kurang menarik layarnya sendiri, biasanya, sehingga terminal tidak melihat di mana garis berakhir. Tetapi lebih sedikit yang bisa dikonfigurasikan, sebenarnya tidak melakukan apa pun untuk file pendek yang pas dengan layar. Jadi, mungkin saja perbedaan di antara kasus-kasus itu lebih sedikit pada mode yang berbeda. (lihat echo $LESS, mungkin ada opsi menarik untuk kurang.)
Volker Siegel
@Tim ini telah menggangguku selama bertahun-tahun juga. Mungkin jawaban @ niknah menyarankan penyebabnya? Saya sering beralih di antara -Smode jadi mungkin itu membuatnya lebih buruk juga.
Dan Gravell
1
@Tim: Saya menemukan sesuatu yang mungkin atau mungkin tidak benar pada OS Anda & kurang versi: perilaku salinan bervariasi tergantung pada bagaimana saya tiba di garis target dalam waktu kurang. Jika saya mencari ke depan maka salinan tidak termasuk baris baru pembungkus (yaitu, itu menyalin konten garis panjang asli). Namun, jika saya telah mencari ke belakang melalui file untuk sampai ke baris target, maka salinan menyertakan baris baru dan membagi garis panjang menjadi beberapa baris terpisah. Tampak konsisten di Mac dan Linux untuk saya.
erik.weathers
2

Di less, jika Anda memilih beberapa baris teks yang dibungkus dan kemudian menyalinnya, itu akan turun sebagai satu baris.

Jika Anda menekan PgUplalu menyalin teks yang sama, itu akan turun sebagai beberapa baris.

PgDnbaik-baik saja, panah baik-baik saja. Tetapi PgUpmenyebabkan teks terpecah.

niknah
sumber
Itu bukan penyebab sebenarnya dari perilaku itu. Lihat jawaban saya: unix.stackexchange.com/a/445590/105308
bobbel
0

Jika tujuannya adalah untuk menyalin & menempel, saya menggunakan catbukan lessatau moredan kemudian terminal menangkapnya karena sebenarnya bukan daripada yang sedang ditampilkan.

Amos
sumber