Katakanlah saya memiliki sepuluh baris dan saya ingin menambahkan teks ke beberapa kata yang muncul di baris tersebut? Tidak harus di awal baris.
Dari:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
untuk:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
Apakah hal itu juga mungkin untuk tidak hanya prepend bar(
tetapi sebenarnya surround foo
dengan bar(foo)
?
Saya juga ingin cara cepat untuk menambahkan //
komentar ke beberapa baris (komentar bergaya C).
Saya menggunakan Vim / GVim 7.2.
Jawaban:
Pergi ke yang pertama
foo
, tekan Ctrl- vuntuk masuk ke mode blok visual dan tekan ke bawah sampai semua baris denganfoo
ditandai. Kemudian tekan Shift- iuntuk memasukkan di awal (blok). Setelah Anda selesai dan menekan Esc, karakter yang disisipkan akan ditambahkan ke setiap baris di sebelah kiri blok yang ditandai.Untuk menyisipkan di bagian akhir, tekan lagi Ctrl- v, gerakkan ke atas / bawah untuk menandai semua garis yang terpengaruh, lalu tekan Endatau $untuk memperpanjang pilihan hingga akhir baris. Sekarang Anda dapat menekan Shift- auntuk menambahkan di akhir semua baris, seperti sebelumnya dengan Shift- i.
Pemilihan visual juga dapat dilakukan dengan perintah gerakan normal. Jadi untuk mengomentari seluruh blok di C Anda bisa pindah ke kurung kurawal dan ketik Ctrl- v % Shift- i // Esc.
sumber
i
tidak ada yang terjadi. Ketika saya menekanshift+i
pilihan menghilang tetapi saya dapat memasukkan teks (di tempat saat ini di mana hanya kursor).Untuk menjawab pertanyaan pertama Anda, di bawah ini
akan mencari
foo
, dan mengelilingi pola yang cocok denganbar()
. Mereka/g
akan melakukan ini beberapa kali dalam satu baris.Karena Anda hanya mencocokkan
foo
, Anda dapat melakukan yang sederhana:s/foo/bar(foo)/g
. Namun, cara di atas akan berhasil jika Anda memutuskan untuk mencocokkan pada ekspresi reguler daripada kata sederhana (misf[a-z][a-z]
.). '&' Di atas mewakili apa yang Anda cocokkan.sumber
:
dans
menentukan baris mana yang dioperasikannya. Tidak ada yang berarti hanya jalur saat ini.1,30
berarti baris 1 hingga 30 (inklusif).'<,'>
berarti garis-garis dalam pemilihan visual saat ini.Untuk mengawali serangkaian baris, saya menggunakan salah satu dari dua pendekatan berbeda:
Salah satu pendekatan adalah pemilihan blok (disebutkan oleh sth). Secara umum, Anda dapat memilih bidang persegi panjang yang ctrl-Vdiikuti dengan gerakan kursor. Setelah Anda menyorot persegi panjang, menekan shift-Iakan menyisipkan karakter di sisi kiri persegi panjang, atau shift-Aakan menambahkannya di sisi kanan persegi panjang. Jadi Anda bisa menggunakan teknik ini untuk membuat persegi panjang yang menyertakan kolom paling kiri dari garis yang ingin Anda awali, tekan shift-I, ketik awalan, dan kemudian tekan escape.
Pendekatan lainnya adalah dengan menggunakan substitusi (seperti yang disebutkan oleh Brian Agnew). Substitusi Brian akan mempengaruhi seluruh file (% dalam perintah berarti "semua baris"). Untuk mempengaruhi hanya beberapa baris, pendekatan termudah adalah dengan menekan shift-V(yang memungkinkan mode visual-line) saat berada di baris pertama / terakhir, dan kemudian pindah ke baris terakhir / pertama. Kemudian ketik:
^ Adalah regex (dalam hal ini, awal baris). Dengan mengetik ini dalam mode garis visual, Anda akan melihat '<,'> disisipkan sebelum s secara otomatis. Ini berarti kisaran substitusi akan menjadi pemilihan visual.
Kiat tambahan: jika awalan Anda berisi garis miring, Anda dapat menghindarinya dengan garis miring terbalik, atau Anda dapat menggunakan karakter tanda baca yang berbeda sebagai pemisah dalam perintah. Misalnya untuk menambahkan komentar baris C ++, saya biasanya menulis:
Untuk menambahkan sufiks, pendekatan substitusi umumnya lebih mudah kecuali semua garis Anda memiliki panjang yang persis sama. Cukup gunakan $ untuk pola alih-alih ^ dan string Anda akan ditambahkan alih-alih tertunda.
Jika Anda ingin menambahkan prefiks dan sufiks secara bersamaan, Anda dapat melakukan sesuatu seperti ini:
. * Cocok dengan seluruh baris. & Di pengganti menempatkan teks yang cocok (seluruh baris) kembali, tetapi sekarang itu akan memiliki prefiks dan sufiks Anda ditambahkan.
BTW: ketika mengomentari kode, Anda mungkin ingin menghapusnya nanti. Anda dapat menggunakan visual-block ( ctrl-V) untuk memilih garis miring dan kemudian menekan d untuk menghapusnya, atau Anda dapat menggunakan substitusi (mungkin dengan pemilihan garis visual, dibuat dengan shift-V) untuk menghapus garis miring seperti ini:
sumber
: normal untuk menyelamatkan!
: norm (al) memutar ulang perintah seolah-olah Anda telah mengetiknya:
Atau dalam satu baris:
Jika Anda menjalankan Windows, ketik, ctrlqbukan ctrlv.
sumber
Namun kemungkinan lain (mungkin tidak terlalu berguna dalam kasus pengujian Anda, tetapi berguna dalam situasi lain) adalah menutup area yang ingin Anda ubah dengan tanda.
:'a,'b s/foo/bar(&)/
Saya biasanya menyukai mode blok visual jika semuanya terlihat di layar, dan saya biasanya lebih suka tanda jika start dan stop dipisahkan oleh banyak layar.
sumber
m
bukan'
untuk mengatur penanda baru.'
adalah untuk melompat ke garis penanda yang ada.`
melompat ke garis dan kolom penanda itu.Ekspresi reguler sederhana lainnya adalah:
sumber
Untuk komentar C-style, gunakan jawaban regexp oleh Brian, dan cocokkan pada akhir baris
$
, dan sisipkan.sumber