Bisakah saya menggunakan mouse untuk memilih teks dengan benar dalam waktu kurang?

9

Saya baru saja menemukan bahwa saya dapat menambahkan baris berikut ke ~/.vimrc.

set mouse=a
:vmap <C-C> "+y

Ini memiliki efek mampu memilih teks dengan mouse (yaitu dalam mode visual), dan kemudian menyalin teks yang sebenarnya ke papan klip X dengan Ctrl+ c. Ini berbeda dari salinan default dari terminal, karena ini adalah teks asli yang saya salin, bukan apa yang dilihat terminal. Misalnya, jika ada tab dalam teks, maka sebelumnya saya akan menyalinnya sebagai spasi.

Apakah ada cara untuk membuat kurang berperilaku dengan cara yang sama? yaitu saya bisa menyalin kata demi kata apa yang ada di file teks saya melihat kurang?

Sparhawk
sumber
Sudahkah Anda mencoba dengan gpm?
YoMismo
@YoMismo No. Saya tidak begitu yakin bagaimana itu akan membantu, karena emulator terminal masih mengandung spasi literal, bukan tab, dalam contoh di atas.
Sparhawk
Maaf, saya pikir Anda bekerja di konsol, bukan terminal X: - /
YoMismo

Jawaban:

5

Bukan tugas kurang

Tidak,
saya tidak berpikir Anda bisa melakukannya secara langsung, karena lebih sedikit tidak memiliki kursor untuk memulai.
Perlu satu untuk menavigasi untuk memulai dan mengakhiri teks untuk memilih.
lessbukan alat yang tepat untuk navigasi level karakter.

Tab sudah diperluas

Anda dapat menggunakan tombol shiftdan mouse untuk membuat pilihan; Ini ditangani oleh terminal, bukan dengan kurang. Tetapi terminal tidak tahu bagaimana spasi dan tab di mana diatur - kurang interpretasi tab secara internal, dan hanya menulis karakter " " normal di layar.

Ada alat seperti screen, tmux dan byobu, yang dapat melakukan banyak hal mengesankan di bidang ini. Saya tidak memeriksa, tetapi saya berasumsi bahwa terminal multiplexer ini tidak memiliki jalan lain - menjadi terminal, pada akhirnya - dan akan berperilaku sama.

Gunakan vim

Jika Anda menunjukkan file dalam less, ada solusi yang bagus:
Tekan tombol vdi lessuntuk membuka file saat di vim- asuming Anda $EDITORdll diatur untuk vim.

Ini tidak berfungsi ketika menampilkan stdin dari pipa atau lebih, meskipun ada solusi .

Menggulir mouse, setidaknya

Tetapi Anda setidaknya dapat menggulir dengan roda mouse:

Tampaknya bahkan diaktifkan secara default, tetapi peristiwa roda mouse ditekan oleh opsi yang berbeda.

Untuk tes cepat, coba:

LESS=-r man less

Opsi -X( --no-init) memblokir gulir - periksa isi variabel lingkungan Anda LESS:

$ echo $LESS

Opsi -q( --quiet, --silent) juga menyebabkan masalah, menurut SU: Bagaimana cara membuat roda mouse gulir pager kurang menggunakan bash dan gnome-terminal?

Volker Siegel
sumber
Jawaban yang bagus The vkey fantastis! (Saya telah mengambil kebebasan dari solusi keren untuk membuatnya bekerja di jalur pipa juga.) FWIW di terminal emulator (terminator) saya tidak harus menahan shift ketika saya memilih teks.
Sparhawk
@Sparhawk Hei, solusinya setidaknya sama fantastis!
Volker Siegel
2
Selain itu, ada pager yang disebut vimpageryang dapat Anda gunakan untuk mengganti lessseluruh penjualan. Ini sebenarnya hanya menggunakan vimdibungkus dengan skrip kecil.
HalosGhost
1
@HalosGhost Terima kasih untuk itu. vimpagerterlihat cukup keren, tetapi saya memang memiliki masalah dengan menarik yang membuat saya lebih suka menggunakan lebih sedikit v.
Sparhawk
@Sparhawk Secara teknis, Anda dapat membandingkan vimrc yang digunakan, atau menggunakan bagian-bagian dari vimrc normal Anda vimpagersampai bekerja; (Saya berusaha keras untuk tidak mengaktifkan semua vimplugin saya ketika memulai vimpager...)
Volker Siegel
3

Anda dapat menyalin baris teratas yang ditampilkan lesske pemilihan X11 CLIPBOARD dengan mengetikkan less:

|.head -n1|xclip -sel c<Enter><Enter>

Itu menyalurkan lebih sedikit buffer dari baris atas ke .tanda (sehingga berlaku seluruh konten layar) ke head -n1|xclip -sel cperintah (untuk menyimpan baris pertama dari itu dalam pilihan CLIPBOARD)

Anda dapat mengonfigurasi emulator terminal Anda untuk menempelkan string itu pada penekanan tombol yang diberikan, atau mengikatnya ke kombinasi tombol atau kunci dalam lessbinding kunci. Misalnya, untuk mengikatnya pada Alt+C:

printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -

Namun perhatikan, Anda akan menekan Entersetelah itu untuk menerima konfirmasi "| selesai (tekan RETURN)".

Dengan xterm, Anda juga dapat menentukan mode pemilihan baru misalnya di sini saat menahan Ctrl+Altketika memperluas pilihan yang memberitahu lessbaris mana yang akan disalin dari layar saat ini:

Tulis lesspasteskrip seperti:

#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c

Dan tentukan tabel terjemahan xterm (di sini pada command-line untuk pengujian, tetapi Anda ingin menambahkannya ke file sumber daya X):

xterm -xrm 'XTerm.VT100.translations: #override \
  Meta Ctrl<Btn1Down>: select-start()\n\
  Meta Ctrl<Btn1Motion>: select-extend()\n\
  Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
    insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'

Anda kemudian akan menandai baris yang akan ditempelkan dengan menyeret mouse dengan Ctrl+Altmenahan, dan setelah melepaskan Tombol 1, xterm akan memberi tahu lebih sedikit untuk menyalurkan layar saat ini ke lesspasteskrip kami dengan koordinat awal dan akhir dilewati sebagai satu argumen ( y1;x1 y2;x2).

(perhatikan bahwa itu mungkin tidak berfungsi dengan benar jika lessdiminta -suntuk menekan garis kosong (seperti yang tipikal ketika dipanggil oleh man), karena input yang diumpankan tidaklesspaste akan diperas garis kosongnya (sehingga offset jumlah baris mungkin salah)) .

Stéphane Chazelas
sumber
@Sparhawk, lihat edit.
Stéphane Chazelas
Sepertinya itu tidak berhasil untuk saya. Tidak ada yang baru di clipboard. Apakah lessseharusnya memberikan umpan balik? jtampaknya tidak melakukan apa pun untuk saya.
Sparhawk
@Sparhawk, apakah Anda memiliki bindings kunci khusus untuk less, jmenggulir ke bawah dengan satu baris ( forw-line) di pengikatan kunci default (sebenarnya J( forw-line-force) akan lebih baik di sini, saya akan mengedit). |harus memberi Anda umpan balik. (meminta tanda, dan kemudian perintah untuk masuk).
Stéphane Chazelas
Tidak, saya tidak, tapi saya menguji dengan teks yang kurang dari satu halaman, jadi mungkin itu sebabnya jtidak melakukan apa pun. Opsi pertama sekarang berfungsi (+1). Pilihan kedua tampaknya cukup rumit dengan beberapa peringatan, jadi saya tidak mencobanya. Saya pikir vcukup baik untuk saya.
Sparhawk