Saya bekerja dengan dua file, dan saya perlu menyalin beberapa baris dari satu file dan menempelkannya ke file lain. Saya tahu cara menyalin (yy) dan menempel (p) di file yang sama. Tapi itu tidak berfungsi untuk file yang berbeda. Bagaimana ini dilakukan?
Juga, apakah ada cara untuk memotong-tempel? Saya sudah mencoba googling, tetapi sebagian besar sumber hanya berbicara tentang copy-paste.
vim
copy-paste
vi
cut
macha
sumber
sumber
Jawaban:
Karena Anda sudah tahu cara memotong / mencabut teks, berikut adalah beberapa ide untuk menempelkannya kembali ke file lain:
:e /path/to/other/file
) dan rekatkanBuka kedua file bersama di jendela terpisah dan bernavigasi di antara mereka menggunakan Ctrl+ w, Up/ Downbaik dengan:
vi -o /path/to/file1 /path/to/file2
sumber
Ctrl
+w
,s
.:sp myfile
yang membagi secara horizontal dan membuka file yang ditentukan, tetapi bagaimana yang akan saya lakukan jika saya lebih suka untuk membagi jendela secara vertikal?Jika Anda menggunakan Vim di Windows, Anda bisa mendapatkan akses ke clipboard (salin / tempel MS) menggunakan:
"*dd - potong garis (atau 3dd untuk memotong tiga baris)
"*yy - salin baris (atau 3yy untuk menyalin tiga baris)
"*p - rekatkan baris pada baris setelah kursor
"*P - rekatkan baris pada baris sebelum kursor
Anda dapat menempel di antara jendela Vim yang terpisah atau antara aplikasi Vim dan PC ( Notepad , Microsoft Word , dll.).
sumber
+
sebagai register clipboard sistem lintas platform (Windows dan Linux) vs.*
, yang merupakan Windows saja (+
berfungsi sama di Windows*
).Gunakan variasi
d
sukadd
memotong.Untuk menulis berbagai baris ke file lain, Anda dapat menggunakan:
Di mana
<n>
dan<m>
adalah angka (atau simbol) yang menunjuk sejumlah garis.Untuk menggunakan papan klip desktop, lihat
+g
perintahnya.sumber
ma
,, pindah ke baris terakhirmb
,. Kemudian tambahkan huruf a'
ke tanda ketika Anda menggunakan perintah di atas::'a,'b w filename
Anda dapat membuka file dan jenis lainnya
:r file_to_be_copied_from
. Atau Anda bisa buffer. Atau buka file pertama, buka baris yang ingin Anda salin, ketik"qY
, buka file yang ingin Anda tempel dan ketik"qP
."
buffer_name, salinan ke buffer.Y
adalah menarik danP
diletakkan. Semoga itu bisa membantu!sumber
Inilah satu cara untuk melakukannya;
Anda dapat melihat kedua file juga. Membagi layar dengan misalnya Ctrl+ w s.
Sedangkan untuk memotong, dmemotong dan menempatkan barang-barang yang dipotong di buffer yank. ddakan "memotong" garis.
sumber
Ini semua adalah saran bagus, tetapi jika Anda tahu lokasi teks di file lain gunakan sed dengan mudah.
:r! sed -n '1,10 p' < input_file.txt
Ini akan menyisipkan 10 baris dalam file yang sudah terbuka di posisi kursor saat ini.sumber
:r ! head -n2 file.py
Saat mengedit file, buat tanda di mana Anda ingin memulai dan mengakhiri menggunakan
ma
- menetapkana
tandamb
- menetapkanb
tandaKemudian, untuk menyalinnya ke file lain, cukup gunakan
w
perintah:sumber
Pembaruan 2017-05:
Saya baru saja menemukan bahwa jika Anda menambahkan baris berikut ke file vimrc Anda,
kemudian Vim menggunakan clipboard sistem.
Saya baru saja menemukan cara menarik tidak akan bekerja pada cara di mana saya menyalin konten antara berbagai jendela contoh Vim. (Setidaknya, itu tidak bekerja berdasarkan pengetahuan Vim saya. Saya tidak tahu apakah ada cara lain untuk memungkinkannya bekerja).
Cara mencabut hanya bekerja pada cara di mana banyak file dibuka di jendela yang sama menurut pengujian saya.
Jika Anda ingin melakukannya, Anda sebaiknya menggunakan cara cut-copy-past OS seperti Ctrl+ x, Ctrl+ c(di bawah Windows).
sumber
Remap ini bekerja seperti pesona bagi saya:
Jadi, ketika saya dalam mode visual, saya memilih garis yang saya inginkan dan tekan Ctrl+ clalu Ctrl+ vuntuk memasukkan teks ke file penerima. Anda bisa menggunakan "* y juga, tapi saya pikir ini terkadang sulit untuk diingat.
Ini juga berguna untuk menyalin teks dari Vim ke clipboard.
Sumber: Salin dan tempel di antara sesi menggunakan file sementara
sumber
Menyalin teks antara dua buffer (== file) yang dibuka dalam instance Vim yang sama tidak masalah:
Cukup tarik satu buffer dengan y( dengan asumsi Anda menandai area yang akan disalin dalam mode visual sebelumnya), lalu tempelkan ke buffer lain dengan p. Ini juga bekerja dengan tab yang berbeda selama mereka berada dalam instance Vim yang sama.
Cara membuka dua file dalam instance Vim yang sama tergantung pada sistem Anda:
vim file1 file2
--remote-silent
opsi untuk memastikan bahwa semua file dibuka dalam instance yang samaJika Anda membuka dua file dalam dua instance Vim yang berbeda, maka Anda harus menggunakan clipboard sistem: pada instance Vim pertama, tarik teks ke clipboard sistem menggunakan
"+y
(sekali lagi, tandai area yang akan ditarik dalam mode visual sebelum ), kemudian pergi ke Vim kedua dan paste clipboard ada:"+p
.sumber
Sasaran : menyimpan sepotong file ke file lain.
Solusi :
Simpan teks yang dipilih ke file baru. Ketik :wSpacedan nama file baru. Sebenarnya kamu akan lihat
:'<,'>w new.txt
Lalu tekan Enter
sumber
Skenario saya adalah saya perlu menyalin n jumlah baris di tengah, n tidak diketahui, dari file 1 ke file 2.
sumber
:echo has('clipboard')
harus kembali1
0
(misalnya Mac OS X, setidaknya v10.11 (El Capitan), v10.9 (Mavericks) dan v10.8 (Mountain Lion) - hadir dengan versi Vim yang tidak memiliki dukungan clipboard), Anda harus menginstal Versi Vim dengan dukungan clipboard, katakan viabrew install vim
(jangan lupa untuk meluncurkan kembali terminal Anda setelah instalasi)PS:
set mouse+=a
ke Anda.vimrc
- itu akan memungkinkan Anda untuk memilih garis di Vim menggunakan mouse, sementara tidak memilih elemen asing (seperti nomor baris, dll.) PEMBERITAHUAN: itu akan memblokir kemampuan untuk menyalin teks yang dipilih mouse untuk dipilih ke clipboard sistem dari Vim .sumber
Contoh: fileA dan fileB - mulai fileA pada baris 25, salin 50 baris, dan rekatkan ke fileB
sumber
Opsi di bawah ini berfungsi sebagian besar waktu dan juga untuk menempel kemudian.
Garis yang ditarik akan disimpan dalam buffer
'x'
. Itu dapat digunakan di mana saja di edit.Untuk menempelkan baris di file lain,
Contoh: Ketikkan perintah di bawah ini dalam edit saat ini
Operasi lengkap
buka file 1:
-Sekarang buka file kedua dari edit saat ini
-Pindahkan kursor ke baris tempat Anda harus menempel
--Lines dari buffer
'*a*'
akan disalin setelah pos kursor saat inisumber
Jika Anda ingin menyalin bagian dari file dan menempelkan konten itu di tengah file lain, Anda bisa melakukan ini.
Contoh:
Atau
Contoh:
Sekarang garis disalin ke file lain. Jika Anda ingin menghapus garis-garis itu setelah menyalin, Anda bisa melakukannya
Atau
Sekarang, buka file lain. Lalu pertahankan kursor pada garis tempat Anda ingin menempel.
Tipe
Sekarang, konten file temp disisipkan di sini. Anda dapat menghapus file temp dari baris perintah itu sendiri, setelah menempelkan konten.
Ini akan membantu jika Anda ingin menyalin dan menempel beberapa kali.
sumber
Cara lain bisa dengan membuka dua file dalam dua buffer split dan menggunakan "potongan" berikut setelah pemilihan visual dari garis yang menarik.
sumber
Masuk ke mode perintah dan jalankan
Misalnya untuk mengekstrak baris
20-30
darifilename
ke dalam file yang sedang dibukasumber