Secara default, perintah tempel menggunakan "
register ("tidak bernama") . Secara efektif, perintah apa pun yang menulis ke register juga menulis ke register yang tidak disebutkan namanya, sehingga menarik, menghapus, dan mengubah semua memengaruhinya. Inilah sebabnya mengapa urutan yank-delete-paste Anda menempelkan teks yang dihapus alih-alih teks yang ditarik.
The 0
mendaftar dapat membantu di sini. Perintah menarik apa pun yang tidak menentukan register, masukkan teks yang ditarik ke dalam register 0
(sebagai tambahan "
). Ini tidak terpengaruh oleh operasi hapus atau ubah, jadi Anda dapat menggunakannya untuk menempelkan satu baris yang disentak beberapa kali walaupun Anda melakukan penghapusan atau perubahan tingkat menengah.
yy
: Register 0
dan "
keduanya sekarang memiliki jalur menarik.
- Pindah ke baris untuk mengganti.
dd
: Daftar "
sekarang memiliki baris yang dihapus, tetapi daftar 0
masih memiliki baris yang ditarik.
"0P
: Tempelkan baris yang awalnya ditarik dari register 0
.
- Pindah ke baris berikutnya untuk mengganti.
dd"0P
(sama seperti di atas)
(Karena cara kerja posisi kursor saat mengganti baris terakhir dari buffer, Anda akan ingin menggunakannya "0p
sebagai ganti "0P
.)
Ini sangat dekat jawaban Bruce Ediger , kecuali bahwa Anda tidak harus menentukan register saat awalnya menarik. Menggunakan satu atau lebih register bernama bisa sangat berguna meskipun jika Anda perlu (misalnya) mengganti beberapa baris dengan AAA
, tetapi baris lain dengan BBB
(masukkan AAA
register a
, dan BBB
dalam register b
(atau biarkan salah satu dari mereka dalam register 0
), kemudian tempel sesuai ).
Anda juga dapat menyisipkan dari 0
dalam line-bijaksana modus visual ( V
) untuk menyimpan keystroke: V"0p
.
Jika Anda tidak seperti memiliki jenis "0
, Anda mungkin menemukan pemetaan lebih nyaman:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Pendekatan alternatif adalah menghapus ke _
register (" lubang hitam") . Ketika Anda menghapusnya, "
register tidak terpengaruh, sehingga urutan yank-delete-paste Anda masih dapat menempelkan teks yang ditarik ke bawah dari register yang tidak disebutkan namanya.
yy
: Daftar 0
dan "
keduanya sekarang memiliki jalur menarik.
"_dd
: Tidak ada perubahan pada register.
P
: Tempel teks yang awalnya ditarik dari register "
.
Sekali lagi, Anda mungkin menemukan pemetaan lebih nyaman:
noremap <Leader>d "_d
yy
(pindahkan ke baris untuk diganti)S<C-r>0<Esc>
. Memiliki keuntungan diulang dengan.
perintah.Sepertinya Kevin memiliki jawaban yang cukup bagus, tetapi jika Anda ingin melihat setiap baris yang Anda hapus, ganti, ada solusi yang sedikit berbeda.
Resep semacam ini memungkinkan Anda untuk menggunakan pencocokan pola untuk menemukan garis yang akan dihapus dan diganti, dan Anda dapat kembali ke awal file (1G) dan mencari ke depan sesering mungkin. Jika saya memiliki 2 baris atau lebih untuk dikumpulkan dan ditempatkan berulang kali, saya gunakan
"ayy
untuk baris pertama,"byy
untuk baris kedua,"cyy
untuk baris ketiga, dan seterusnya. Saya membuat kebiasaan (yang mengurangi generalisasi resep) untuk mengurangi beban mental pada saya.sumber
"ayy
dan kemudiandd
,dd
tidak akan menggantikan apa yang ada dia
, tetapi jika saya ketikp
itu akan menyisipkan apa yang baru saja dihapus menggunakandd
. Dan jika saya ingin mengganti apa yang ada"ayy
dengan apa yang saya hapus, maka saya akan menggunakan"add
- apakah itu benar?Ada beberapa cara untuk melakukan ini
:s
, tergantung pada seberapa banyak pengetikan yang ingin Anda lakukan. Cara termudah adalah pencarian dan ganti sederhana:The
%
akan mencari seluruh file dan mengganti semua kejadian.Jika terlalu banyak mengetik untuk Anda, Anda dapat menarik string tujuan (
yy
) dan menggunakan"
register (default), memasukkannya dengan Ctrl+r ":Atau, jika Anda memiliki salinan string pengganti, Anda dapat menarik keduanya menjadi register terpisah dengan
"ayy
dan"byy
untuk menarik ke dalama
danb
register, masing-masing (Anda dapat menggunakan huruf apa pun untuk register Anda). Kemudian gunakan Ctrl+r adanCtrl+r b rekatkan ke kolom pencarian dan ganti.Bukan untuk menambah Bruce, tetapi jika Anda ingin memeriksa baris sebelum Anda menggantinya, tambahkan saja
c
opsi:sumber
Anda bisa menggunakannya
V
untuk menyorot garis yang ingin Anda ganti dalam Mode Visual dan kemudian tekanpp
untuk menempelkan garis itu.Ini hanya menambah satu keystroke, jadi sepertinya solusi yang cukup bagus.
sumber
V
p
.Saya menggunakan perintah
c
, "ubah", cukup sering untuk hal semacam ini, dikombinasikan dengan pencarian biasa. Anda dapat mencari file untuk setiap baris / bagian teks yang Anda minati dan kemudian menggunakann.
perintah berurutan (n
untuk selanjutnya dan kemudian.
mengulangi perubahan terakhir.)/^hello
- temukan garis yang dimulai dengan halo;c$goodbye
- ubah baris menjadi selamat tinggal;n.
- Temukan berulang, ulangi perubahanJika Anda ingin mengubah baris ke yang sudah ada dalam file, Anda bisa menyalinnya ke buffer input Anda (dengan asumsi GUI Anda mengizinkannya) dan kemudian menempelkan untuk mendapatkan konten dari perintah perubahan pertama.
Seperti semua hal vi, merupakan ide bagus untuk memiliki banyak opsi di saku Anda, tergantung pada jenis pengeditan yang ingin Anda lakukan.
sumber