Cara menyalin konten tempel di editor vi

165

Saya mencoba menggunakan Ctrl+ Vuntuk menempelkan konten dalam dokumen vi editor, tetapi Ctrl+ Vtidak ditafsirkan sebagai tempel.

Rpj
sumber
16
Sekedar catatan, alasan utama untuk menggunakan Vi adalah karena Vim tidak diinstal. Jika Anda telah menginstal Vim, mungkin sebaiknya Anda menggunakannya. Sebenarnya tidak ada keuntungan bagi Vi selain itu sudah ada pada setiap instalasi Unix. Cara terbaik untuk mempelajari Vim menurut saya adalah dengan membuka emulator terminal Anda (bukan dari dalam Vim) dan mengetikkannya. vimtutorIni akan membuat Anda lebih cepat ke tempat itu dapat digunakan untuk Anda dalam waktu sekitar 45 menit.
Ben Mordecai
1
+1 @BenMordecai - Saya sudah terbiasa dengan vi (dari yang lama), termasuk kapabilitas sub-shell yang nyaman, tetapi membutuhkan penyegaran. Sedikit bimbingan belajar. Pergi seperti angin. Terima kasih.
Cbhihe

Jawaban:

192

Pertama, pastikan Anda dalam mode edit (tekan i). Kemudian Anda dapat menempel dengan Ctrl+ Shift+ V, jika Anda berada di terminal seperti emulator gnome-terminal(atau pilih "Tempel" dari menu klik kanan).

Anda juga dapat mengetikkan :set pastevim sebelum Anda menempel untuk menonaktifkan indentasi otomatis, dll. Kemudian :set nopastesetelah Anda menempelkan konten.

Periksa juga pertanyaan ini di stackoverflow.com untuk informasi lebih lanjut.

Jika Anda ingin menyalin / menempelkan baris dalam vim(tidak seperti menempelkan konten clipboard), Anda ingin memeriksa perintah yank . Berikut adalah lembar contekan yang mungkin membantu.

Attila O.
sumber
1
Saya pikir jika kursor mouse aktif, Anda tidak dapat menempel menggunakan Ctrl + Shift + V.
Alvin Wong
14
Hanya sebuah catatan, Icase-sensitive. Huruf kecil iadalah cara normal memasuki mode penyisipan. Capital Imembawa kursor ke awal baris dan kemudian memasukkan Anda ke mode insert.
Ben Mordecai
64

Vi (dan Vim) bekerja sangat berbeda dibandingkan dengan editor teks biasa seperti Gedit. Ini juga memiliki kurva belajar yang cukup curam. Jika Anda ingin mempelajari beberapa perintah dasar, mulailah dengan tutorial interaktif ini .

Namun, untuk menjawab pertanyaan Anda. Konten clipboard sistem dapat diakses melalui register plus. Jadi untuk menempelkan sesuatu dari clipboard sistem yang Anda bisa, dari mode Normal, tekan: "+p(Bukan pada saat yang sama, tetapi satu demi satu).

Daniel Jonsson
sumber
3
Ini adalah sesuatu yang saya tidak tahu sampai sekarang. Juga, +1 untuk menautkan tutorial vim lain yang mengagumkan.
Attila O.
19
Berbicara tentang kurva belajar untuk editor, ada "kurva belajar klasik untuk beberapa editor umum", blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal
Di Terminal GNOME, pintasan untuk salin dan tempel adalah Ctrl-Shift-C dan Ctrl-Shift-V.
Flimm
1
Saya sudah mencoba menekan pada gilirannya <kbd> "</kbd>, <kbd> + </kbd> dan <kbd> p </kbd>, juga <kbd>" </kbd> dan <kbd> p < / kbd> dan tidak ada yang terjadi. Apa yang saya lakukan salah? Saya vitidak menggunakanvim
user907860
1
Itu jawaban yang tepat. Menggunakan mis. Ctrl-Shift-v hanya akan berfungsi dengan konten yang paling sederhana (jeda baris dan lekukan bisa benar-benar salah jika Anda berada di terminal, dan Anda lupa menggunakannya set :paste).
rsenna
29
  1. Jika Anda ingin menyalin konten tempel dalam file yang sama , gunakan yankdan paste.

  2. Jika Anda ingin menyalin konten tempel di terminal , buka file pertama, tarik teks yang Anda inginkan, lalu buka file kedua Anda dalam vim (mis. :tabnew /path/to/second/file) Dan tekan puntuk menempelkannya.

  3. Jika Anda ingin menyalin konten tempel dari vim ke program eksternal , Anda perlu mengakses clipboard sistem. Saya berasumsi Anda menggunakan Ubuntu. Versi GUI vim selalu memiliki dukungan clipboard, namun, jika Anda ingin menggunakan Vim dari terminal, Anda harus memeriksa dukungan X11-clipboard.

    Dari konsol, ketikkan:

    $ vim --version | grep xterm
    

    Jika Anda menemukan -xterm_clipboard , Anda memiliki dua opsi:

    1) Kompilasi sendiri vim, dengan flag xterm_clipboard menyala

    2) Hapus instalan vim, instal gvim (vim-gtk atau vim-gnome) sebagai gantinya. Anda dapat tetap menggunakan non-gui vim dengan memanggil vim dari terminal, seperti yang Anda lakukan sebelumnya. Kali ini ketika Anda memeriksa Anda harus menemukan + xterm_clipborad .

    Sekarang, ketika Anda menarik beberapa teks dalam register + di dalam editor vim Anda (misalnya "+ yy), itu juga akan disalin ke clipboard sistem yang dapat Anda ambil dari program eksternal Anda seperti editor gedit, dengan menggunakan Ctrl+ V.

  4. Jika Anda ingin menyalin konten tempel dari program eksternal ke vim , pertama-tama salin teks Anda ke clipboard sistem melalui Ctrl+ C, kemudian dalam mode insert editor vim , klik tombol tengah mouse (biasanya roda) atau tekan Ctrl+ Shift+ Vuntuk menempel.

    Ini adalah 4 kondisi penyalinan & rekat dasar yang terkait dengan vim. Saya harap ini membantu.

47dev47null
sumber
Apa gunanya: tabnew / path / ke / detik / file? Anda dapat mencapai hal yang sama persis dengan menarik / menyalin / memotong file pertama, membuka file kedua dengan: vi / path / ke / detik / file dan menempelkan (p / P) di dalamnya. Setidaknya dalam kasus saya ... Atau karena saya mengaktifkan fitur + xterm_clipboard vim? Atau ada lebih banyak hal yang bisa tabnew dari itu?
Cbhihe
1
Di Ubuntu vim-gtkmemiliki xterm_clipboarddukungan dan di Fedora xvimmemilikinya.
icc97
18

Saya selalu menggunakan Shift+ Insertketika saya ingin menempelkan teks ke terminal, berfungsi di semua program terminal.

(Yang juga merupakan alasan mengapa saya tidak pernah mendapatkan laptop di mana Anda tidak dapat menekan Inserttanpa menekan tombol sekunder)

Magnus Jonsson
sumber
2
Vi/ Vim! = terminal;)
0xC0000022L
1
ok ok, tapi masih berfungsi :)
Magnus Jonsson
+1 untuk ini .. Apa yang Anda gunakan untuk melakukan katakan Ctrl+A, Ctrl+Cjuga?
Arup Rakshit
Jika saya menggunakan terminal di dalam DE saya biasanya hanya memilih teks dengan mouse dan salin dengan Ctrl + Shift + C.
Magnus Jonsson
Shift + Insert juga berfungsi di gvim. (Saya menjalankan Ubuntu 13.10, jika itu ada bedanya.)
eksortso
10

Gunakan tombol tengah mouse untuk menyisipkan teks yang telah Anda sorot di tempat lain.

Ini berguna ketika Anda tidak memiliki akses ke clipboard sistem Anda (misalnya, dalam sesi SSH jarak jauh).

Harus dalam mode edit / sisipkan untuk Vim.

akan-ob
sumber
6

Setelah Anda masuk vi, tekan iuntuk masuk ke mode insert, klik kanan ke terminal, klik paste.

GC 13
sumber
Saya pikir huruf kecil i. Apa yang dilakukan huruf besar I?
Flimm
@ Flimm yang sudah dijelaskan dalam komentar oleh Ben Mordecai pada jawaban lain.
sierrasdetandil
Saya sudah mengedit jawaban menjadi huruf kecil i. Huruf besar Imemindahkan kursor ke awal baris sebelum memasuki mode insert, yang tidak diperlukan di sini.
Flimm
6

Instruksi terperinci untuk menyalin / menempelkan baris teks dalam vi menggunakan yankdanput

(gunakan perintah berikut dalam mode perintah vi)

Salin (YANK)

Untuk menyalin satu baris di vi:

  • Dalam mode perintah, pindahkan kursor ke baris yang perlu disalin dan ketik yyatau ketikY

Untuk menyalin 2 baris di vi:

  • Dalam mode perintah, pindahkan kursor ke baris pertama yang perlu disalin dan ketik 2yyatau ketik2Y

(juga, sejumlah baris dapat disalin)

Untuk menyalin semua baris dari lokasi saat ini ke akhir file:

  • Dalam mode perintah, pindahkan kursor ke baris pertama yang perlu disalin dan ketik yG

Untuk menyalin semua teks dari lokasi saat ini ke akhir kata saat ini:

  • Dalam mode perintah, pindahkan kursor ke lokasi dari mana teks perlu disalin dan ketik yw

Untuk menyalin semua teks dari lokasi saat ini ke akhir baris:

  • Dalam mode perintah, pindahkan kursor ke lokasi dari mana teks perlu disalin dan ketik y$

Tempel (PUT)

Untuk menempelkan teks di clipboard - setelah lokasi kursor:

  • Dalam mode perintah, ketik p

Untuk menempelkan teks di clipboard - sebelum lokasi kursor:

  • Dalam mode perintah, ketik P
slayernoah
sumber
1

Saya mempunyai masalah, karena instalasi 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
Ini memperbaiki masalah saya!
astrojuanlu
1

Dengan Vim 8+ di Linux atau Mac, Anda sekarang dapat menggunakan pasta asli OS ( ctrl+shift+Vdi Linux, cmd+Vdi Mac). Jangan menekan iuntuk Mode Sisipkan.

Ini akan menempelkan isi clipboard OS Anda, menjaga spasi dan tab tanpa menambahkan autoindenting. Ini setara dengan tua :set paste, i, ctrl+shift+V, esc, :set nopastemetode.

Anda bahkan tidak perlu menginstal fitur +clipboardatau +xterm_clipboardvim lagi. Fitur ini disebut "braket tempel". Untuk detail lebih lanjut, lihat https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763

wisbucky
sumber
Itulah jawaban yang saya cari. Karena Vim tidak default pada distro gnu / linux, itu perlu diinstal bahkan di ubuntu. Selain itu, tombol Vi turun tidak berfungsi di ubuntu dan tidak ada highlight.
itsnotmyrealname
0

Jika Anda melakukan root : Ctrl+ Shift+V

Jika Anda tidak melakukan root : Pusat klik mouse.

Pandangan elips
sumber
0

Saya hanya ingin mencatat bahwa menggunakan Vim via Git Bash di Windows, Anda bisa menggunakan patau klik tengah mouse tanpa berada dalam mode insert. Menggunakan Vim melalui Putty , Anda bisa klik kanan. Dan highlighting melakukan penyalinan.

Saya mencatat ini karena saya sampai di sini tidak melihat bahwa ini adalah SE untuk Ubuntu.

Perintah bermanfaat lainnya:

  • yy(# baris) - yank (copy)
  • dd(# baris) - hapus
  • p - tempelkan garis di bawah garis saat ini
  • Shift+ p- tempel baris di atas baris saat ini
  • u - batalkan
  • r - ulangi
  • i - memasukkan mode
  • v - mode visual
Tyler Christian
sumber
Itu tidak bekerja untuk saya di Windows Git Bash. Konsol mana yang Anda gunakan, mintty atau windows cmd?
wisbucky
Saya percaya itu permen.
Tyler Christian
0

Anda dapat menggunakan Ctrl+ Shift+ Vuntuk menempel di terminal versi vim, tetapi untuk versi GUI seperti vim Neovim-Qt, menempelkan teks dari clipboard sistem dengan Ctrl+ Shift+ Vtidak akan berfungsi. Anda harus mengakses clipboard "+atau "*editor vim.

Menambahkan pengikat kunci baru .vimrcakan cukup dengan perintah salin / tempel:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
Yossarian42
sumber