Saya menyalin bagian HTML dari halaman web dan ingin menyimpannya dalam file. Untuk itu saya memulai vim
sesi baru di jendela terminal, dengan nama file (baru) yang ditentukan pada commandline, tekan iuntuk masuk ke mode insert dan kemudian CtrlShift+ Vdan menunggu sambil [-- INSERT --]
muncul di bagian bawah dan menunggu ...
Karena vim
tidak responsif setelah beberapa detik, saya membuka 'Editor Teks' dari menu Aplikasi → Accessoiries menempelkan teks (yang muncul dalam sepersekian detik, menyimpannya dengan nama baru, menutup, dan membunuh sesi Vim yang masih belum selesai, 1,5 menit kemudian. Jumlah teks 186K di 3200 baris, tidak berlebihan saya akan mengatakan, atau dengan garis yang terlalu panjang.
Apakah ada cara untuk mempercepat penyisipan semacam ini di vim
dan / atau ada penjelasan mengapa ini sangat lambat dibandingkan dengan menggunakan, Editor Teks yang mengerikan dan berorientasi mouse?
(CPU% menurut top
tidak datang di atas 5%, meskipun saya memiliki beberapa prosesor bebas dalam sistem, jadi mungkin ada beberapa masalah I / O terikat, yang tidak ada ketika membaca teks yang sama dari file)
Info versi:
Ubuntu 12.04
Vim: 7.3, dengan tambalan seperti yang disediakan oleh Ubuntu 12.04
bash: 4.2.25
gnome-terminal: 3.4.1.1
vim
, melakukan paste, dan kemudian aktifkan kembali. Coba juga menggunakan:set paste
fitur ini untuk melihat apakah itu meningkatkan keadaan. Lihat:help paste
ini menjelaskan bagaimanavim
membuat perbedaan antara mengetik dan menempel.vi
untuk mencoba mengurai file ketika membaca (setelah menyimpan cara @ l0b0 disarankan), juga. Tapi itu bekerja dengan cepat.:set paste
tampaknya tidak benar-benar membuat perbedaan (saya tidak menggunakan stopwatch, hanya dinding-jam).Jawaban:
Untuk menyimpan banyak teks clipboard ke file dengan cepat, Anda dapat menjalankan
cat > file.txt
, menempelkan konten, lalu tekan Ctrl- d.Jika Anda telah menginstal xsel , Anda dapat melakukan
:r !xsel
untuk memasukkan pilihan "primer" (alias. "Mouse") di Vim, atau:r !xsel -b
untuk memasukkan buffer "clipboard" ( Ctrl- c). Anda juga dapat menyimpan pilihan langsung ke file denganxsel >file.txt
atauxsel -b >file.txt
. Ini menghilangkan kebutuhan untuk menyisipkan tindakan + EOF yang terpisah, dan menghindari mencetak seluruh buffer salinan di terminal.Jika Anda tidak memiliki xsel tetapi xclip, perintah yang sesuai adalah
xclip -out
untuk pemilihan utama, atauxclip -out -selection clipboard
untuk buffer clipboard.sumber
Ini adalah masalah buffer flush-to-disk. Vim mencoba menjaga keamanan pekerjaan Anda dan tidak menganggap Anda dapat mengetik beberapa ribu karakter per detik. Baca
:help swap-file
untuk beberapa perincian tentang buffering. Solusi untuk masalah Anda adalah ini:Matikan swapfile vim dengan:
atau dari dalam vim sebelum menempel:
Lihat
:help swapfile
untuk lebih jelasnya.Pilihan lain adalah dengan cukup mematikan sinkronisasi ke disk dari file swap dengan
:set swapsync=
tetapi opsi ini membutuhkan lebih banyak penekanan tombol untuk membatalkan dan saya malas. :)Mematikan swap tidak aman untuk operasi normal! Segera setelah tempel, gunakan
:set swapfile
atau:set swapsync=fsync
kembali ke perilaku normal (meskipun secara teknis, perilaku normal mungkin telah disinkronkan dan bukan fsync , periksa dengan:set swapsync?
sebelumnya jika Anda ingin menempuh rute ini).sumber
Jika Anda memiliki
xterm_clipboard
fitur, Anda dapat menggunakan*
dan+
mendaftar. Register ini antarmuka dengan buffer pemilihan utama X11, dan clipboard (masing-masing).Jadi, jika Anda menyalin sesuatu melalui CTRL+ c, Anda dapat menempelkannya di vim dengan "+p.
Jika Anda hanya menyorotnya tanpa menyalin, Anda dapat menempelkannya dengan "*p.
Anda juga dapat menjadikan
*
buffer sebagai buffer default dengan melakukan:set clipboard=unnamed
. Kemudian setiap yank ( y), paste ( p), dll, yang tidak menentukan register akan menggunakan*
register. Vim 7.3.74 juga ditambahkanclipboard=unnamedplus
, yang akan menggunakan+
register secara default.Anda juga dapat menyalin hal-hal ke dalam primary seleksi & clipboard buffer oleh YanKing, misalnya: "+yy.
Perhatikan, bahwa sebagaimana disebutkan, semua kemampuan ini memerlukan
xterm_clipboard
fitur. Anda dapat melihat apakah Anda memiliki fitur ini dengan melakukan:version
inside vim, atauvim --version
dari shell, dan mencari+xterm_clipboard
. Jika dikatakan-xterm_clipboard
, Anda tidak memilikinya dan harus mengkompilasi ulang vim.sumber
xterm_clipboard
hanya jika menjalankan vim dari terminal.xterm
.xterm_clipboard
berlaku untuk emulator terminal apa pun, bukan hanya xterm. Saya sendiri menggunakan urxvt.