Saya bekerja dengan dua file, saya perlu untuk menyalin beberapa baris dari satu file dan paste ke dalam file yang lain. Aku tahu bagaimana untuk menyalin (yy) dan paste(p) dalam file yang sama. Tapi itu doesn't bekerja untuk file yang berbeda, bagaimana hal ini dilakukan??
Juga, apakah ada cara untuk cut-paste? Saya telah mencoba googling, tapi sebagian besar sumber daya hanya berbicara tentang copy-paste.
Karena anda sudah tahu bagaimana untuk memotong/mencabut teks, berikut adalah beberapa ide untuk merekatkannya kembali ke file yang lain:
Edit file pertama, menghentak teks yang anda inginkan. Kemudian buka kedua file dari dalam vi (:e /path/ke/lain-lain/file
) dan paste
Buka kedua file bersama-sama dalam membagi jendela dan menavigasi antara mereka menggunakan Pilih + w, Sampai/ baik oleh:
vi -o /path/ke/file1 /path/ke/file2
Dari dalam file pertama, Pilih + w, s
Jika anda menggunakan VIM di Windows, anda bisa mendapatkan akses ke clipboard (MS copy/paste) menggunakan:
"*aa -- potong garis (atau 3dd untuk memotong 3 baris)
"*yy - copy satu baris (atau 3yy untuk copy 3 baris)
"*p -- paste baris(s) pada baris setelah kursor
"*P -- paste baris(s) pada baris sebelum kursor
Yang memungkinkan anda paste antara terpisah VIM windows atau antara VIM dan aplikasi PC (notepad, word, dll).
Gunakan variasi dari d
seperti dd
untuk memotong.
Untuk menulis berbagai jalur ke file lain yang dapat anda gunakan:
:<n>,<m> w filename
Di mana <n>
dan <p>
adalah angka-angka (atau simbol) yang menetapkan berbagai lini.
Untuk menggunakan desktop clipboard, lihatlah +g
perintah.
Anda dapat membuka file lain dan ketik :r file_to_be_copied_from
. Atau anda dapat penyangga. Atau pergi ke file pertama, pergi pada baris yang ingin anda salin, ketik "qY
, pergi ke file yang ingin anda paste dan jenis "qP
.
"
buffer_name, salinan ke buffer. Y
yank P
adalah menempatkan. Harapan yang membantu!
Berikut ini's salah satu cara untuk melakukan itu;
Anda bisa memiliki kedua file dapat dilihat juga, membagi layar dengan misalnya PILIH + w s
Seperti untuk memotong, a pemotongan, dan tempat-tempat pemotongan barang dalam buffer yank. aa akan "memotong" garis.
Ini semua adalah saran yang bagus, tapi jika anda tahu lokasi teks dalam file lain menggunakan sed dengan mudah. :r! sed -n '1,10 p' < input_file.txt
Ini akan memasukkan 10 baris dalam file yang terbuka pada saat ini posisi dari kursor.
Saat mengedit file, membuat tanda di mana anda ingin mulai dan akhir untuk dapat menggunakan
ma
set a
mark
mb
- set b
mark
Kemudian, untuk di-copy ke file yang lain, hanya menggunakan w
perintah:
:'a,'bw /name/of/output/file.txt
201705 update:
Saya hanya menemukan bahwa jika anda menambahkan baris berikut ke vimrc file,
set clipboard=tidak disebutkan namanya
kemudian VIM adalah menggunakan sistem clipboard
Saya baru saja menemukan yank cara memenangkan't bekerja pada cara di mana saya copy isi antara berbagai VIM contoh jendela. (Setidaknya, itu doesn't bekerja berdasarkan VIM pengetahuan. Saya don't tahu jika ada cara lain untuk memungkinkan untuk bekerja).
Yank cara ini hanya bekerja pada cara di mana beberapa file yang dibuka di jendela yang sama menurut pengujian saya.
Jika anda ingin melakukan itu, anda'd lebih baik menggunakan OS cut-copy-cara masa lalu seperti ctrl+x, ctrl+c (Under Windows).
Ini memetakan bekerja seperti pesona untuk saya:
vmap <C-c> "*y " Yank current selection into system clipboard
nmap <C-c> "*Y " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p " Paste from system clipboard
Jadi, ketika saya'm pada mode visual, saya pilih garis-garis yang saya inginkan dan tekan Ctrl + c lalu Ctrl + v untuk menyisipkan teks di penerima file. Anda bisa menggunakan "*y juga, tapi saya pikir ini sulit untuk ingat kadang-kadang.
Ini juga berguna untuk menyalin teks dari vim ke clipboard.
Sumber: http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file
Menyalin teks antara dua buffer (== file) yang dibuka pada contoh yang sama dari VIM adalah tidak ada masalah: hanya yank di salah satu penyangga dengan y (dengan asumsi anda ditandai untuk-copy area di visual mode sebelumnya), kemudian paste ke yang lain penyangga dengan p. Juga bekerja dengan tab yang berbeda selama mereka'kembali pada contoh yang sama dari VIM.
Cara membuka dua file di contoh sama VIM tergantung pada sistem anda:
vim file1 file2
--remote-diam
pilihan untuk memastikan bahwa semua file yang mulai dibuka pada contoh yang samaJika anda membuka dua file dalam dua kasus yang berbeda dari VIM, maka anda harus pergi dengan clipboard sistem: pertama, VIM, yank teks ke clipboard sistem menggunakan "+y
(sekali lagi, tandai area yang akan menarik dalam mode visual sebelumnya), kemudian pergi untuk kedua VIM dan paste clipboard di sana: "+p
.
Belum't menemukan jawaban sederhana di sini jadi aku posting saya sendiri.
Tujuan: menyimpan sepotong dari satu file ke file lain.
Solusi:
:'<,'>w new.txt
Kemudian tekan Enter
Contoh: fileA dan fileB - mulai di fileA pada baris 25, copy 50 lines, dan paste ke fileB
fileA
Goto 25th line
25G
copy 50 lines into buffer v
"v50yy
Goto fileB
:e fileB
Goto line 10
10G
paste contents of buffer v
"vp
:echo('clipboard')
harus kembali 1
0
(misalnya OSX, setidaknya yosemite, Mavericks, Mountain Lion - dilengkapi dengan Vim versi, kurang dukungan clipboard), anda harus menginstal Vim versi dengan dukungan clipboard, mengatakan melalui brew install vim
(don't lupa untuk meluncurkan kembali terminal anda(s) setelah instalasi)P. S:
set mouse+=a
untuk anda .vimrc
- ini akan memungkinkan anda untuk memilih garis-garis di vim menggunakan mouse, sementara yang tidak memilih elemen asing (seperti nomor baris dll.) PERHATIKAN: ini akan memblokir kemampuan untuk menyalin mouse-teks yang dipilih ke clipboard sistem dari VimDi bawah opsi bekerja sebagian besar waktu dan juga untuk menyisipkan nanti.
"xnyy
x - buffer name
n - number of line to Yank - optional
Garis menarik akan disimpan dalam buffer 'x'
.
Hal ini dapat digunakan di mana saja di edit.
Untuk menyisipkan baris(s) di file lain,
:e filename&location
Contoh: Ketik perintah di bawah ini pada saat ini edit
:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor
Menyelesaikan operasi
buka file 1 :
vi Test1.sh
a10yy
-Yanked 10 lines
-sekarang buka kedua file dari saat mengedit
*:e /u/test/Test2.sh*
-memindahkan kursor ke baris di mana anda harus paste
*"ap*
--Garis dari buffer '*a*'
akan disalin setelah kursor saat ini pos
Jika anda ingin copy bagian dari file dan paste konten tersebut di tengah-tengah file yang lain, anda dapat melakukan cara ini.
:linenumber,linenumber write newfile
Contoh:
:2,34 write temp1
Atau
:'mark, 'mark write newfile
Contoh:
:'a,'b write temp1
Sekarang garis-garis yang disalin ke file lain. Jika anda ingin menghapus garis-garis setelah menyalin, anda dapat melakukan
:linenumber1,linenumber2 d
Atau
:'mark1,'mark2 d
Sekarang, pergi ke file lain. Kemudian menjaga kursor pada baris di mana anda ingin untuk paste.
Jenis
:r!cat temp1
Sekarang, isi dari file temp yang disisipkan di sini. Anda dapat menghapus temp file dari baris perintah itu sendiri, setelah paste konten.
:!rm temp1
Ini akan membantu jika anda ingin copy dan paste beberapa kali.