vim dan clipboard sistem

9

Saya dapat menyimpan file, menyalin dan menempelkan teks dengan tombol tengah atau shift-insert.

Bagaimana saya bisa menyalin teks dalam vim dan menempelnya dari clipboard sistem?

hibah
sumber
kadang-kadang saya gunakan sed -n5,10puntuk mencetak baris 5-10 sehingga saya bisa lebih mudah menyalin dan menempel tanpa vim bereaksi ke mouse.
Hibah
sebenarnya dari dalam vim perintahnya seperti:!sed -n 5,10p %
grantbow
Terima kasih atas semua komentar dan jawabannya. xclip kadang berguna, terima kasih @ sergiy-kolodyazhnyy. Ketika saya bekerja pada mesin yang berbeda, terkadang saya tidak memiliki kendali atas vim mana yang diinstal tetapi memiliki instruksi untuk memeriksa jawaban @muru sangat membantu, terima kasih @ ashutosh-tripathy. Saya perlu menggunakan perintah register vim lebih sering untuk mengingatnya ketika saya membutuhkannya. Seperti yang saya sebutkan dalam pertanyaan di atas, jika saya ingin melakukannya dengan cepat dan file tersebut kecil, perintah di dalam vim terlihat seperti:!cat %
grantbow

Jawaban:

12

Anda harus memiliki Vim dengan clipboarddan xtermclipboardfitur disusun dalam. Di Ubuntu, ini hanya tersedia dengan paket vim GUI ( vim-gnome, vim-gtk, vim-athena, dll).

Setelah Anda menginstal salah satunya, Anda dapat menyalin ke (dan menempel dari) register clipboard ( *dan +). Dari posting yang sangat informatif tentang Vi dan Vim ini :

Untuk sistem berbasis X11 (mis. Linux dan sebagian besar sistem mirip UNIX lainnya ) ada 2 clipboard, yang tidak tergantung satu sama lain:

  • PRIMARY - Ini adalah copy-on-pilih, dan dapat ditempelkan dengan tombol tengah mouse.
  • CLIPBOARD - Ini disalin dengan (biasanya) ^C, dan ditempel dengan ^V(Ini seperti MS Windows).

Vim memiliki 2 register khusus yang sesuai dengan clipboard ini:

  • *menggunakan PRIMARY; mnemonic: s tar adalah s elect (untuk copy-on- s elect)
  • +menggunakan CLIPBOARD; mnemonic: CTRL + C (untuk keybind umum)

Untuk menyalin ke register, Anda mendahului perintah copy ( y) dengan "dan nama register ( *, misalnya). "*y, lalu klik tengah untuk menempel, atau "+ydan ShiftInsertmenempel.

muru
sumber
3

Solusi yang cukup menarik berasal dari pertanyaan ini . Instal xclip, kemudian salurkan output dari perintah ke xclip ( cat file | xclip -selection clipboardmisalnya), lalu tempel di mana saja, (jika itu di terminal - gunakan Ctrl ShiftV ). Sekarang, ternyata Anda sebenarnya dapat mempersingkat perintah itu xclip -sel clip, yang tidak terlihat jelas dari membaca halaman manual atau contoh di sana.

Sergiy Kolodyazhnyy
sumber
2
Cara lain adalah jika Anda menggunakan layar atau tmux, bersama dengan plugin ini . Bagaimanapun, sesuatu perlu diinstal.
muru
Apa clipboard sebenarnya yang digunakan di x server? Saya tidak menemukan apa pun di dalamnya /dev, tetapi teks masih tersimpan di suatu tempat, bukan?
Sergiy Kolodyazhnyy
Saya selalu berasumsi itu akan ada dalam memori. Itu sepertinya pertanyaan yang bagus untuk Unix & Linux .
muru
3

Saya mengalami masalah karena vim saya tidak mendukung clipboard :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Saya menginstal vim-gnome (yang mendukung clipboard) dan kemudian memeriksa lagi:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Sekarang saya dapat menyalin dan menempel menggunakan "+ y dan" + p masing-masing.

Tripati Ashutosh
sumber