Saya memiliki garis seperti ini:
function my_function(argument, another argument, but there are spaces)
Saya ingin mengganti karakter spasi (di dalam nama argumen) dengan garis bawah. Dengan demikian saya ingin menggunakan:
:s/\ /_/g
tetapi bagaimana saya bisa memilih untuk tidak menerapkannya ke seluruh baris, tetapi mulai dari, katakanlah, posisi kursor? (Atau kata ketiga)?
\%#
. Jadi, Anda bisa menggunakan::s/\v(%#.*)@<= /_/g
. Yang bisa digambarkan sebagai spasi diawali oleh (@<=
) karakter setelah posisi kursor.\%#
trik, saya akan menerima jawabannya jika Anda tidak menulis satu pun ... Tapi bisakah kalian menjelaskan regexp dengan sedikit lebih eksplisit?Jawaban:
Anda dapat menggunakan solusi berikut:
Pertama digunakan v$untuk memilih teks dari kursor ke akhir baris. Kemudian gunakan perintah berikut:
The
\%V
mengindikasikan untuk mengubah teks di daerah yang sebelumnya visual yang dipilih, lihat:h /\%V
.Jika saya ambil contoh Anda:
Jika kursor saya ada di kolom ke-40 dan saya menggunakan perintah yang baru saya tulis, saya dapat
Sebagai jawaban atas komentar Anda, Anda juga dapat menggunakan
\%#
yang cocok dari posisi kursor\%>23c
yang cocok setelah kolom ke-23.\%>'m
yang cocok setelah posisi tandaLihat
:h /\%#
,:h /\%>c
dan:h /\%>'m
.@ User9433424 memberi cara untuk digunakan
\%#
dalam komentarnya. Untuk pola dengan tanda, Anda dapat mengaturnya dengan akal madan kemudian menggunakan:Penjelasan tentang pola yang diberikan oleh @ User9433424 adalah sebagai berikut:
Anda akan ingin melihat
:h \v
dan:h /\@<=
sumber
Anda dapat menggunakan tampilan di belakang (
:h \@<=
) untuk memastikan ada '(', dan batas akhir kata sebelumnya:h \>
) untuk memastikan substitusi terjadi di tempat yang Anda inginkan.Jadi, dengan teks:
menjalankan perintah:
akan menghasilkan:
Ini mungkin lebih mudah daripada harus memposisikan kursor setiap kali, asalkan substitusi selalu memiliki titik awal yang diketahui.
sumber