Saya punya daftar kata-kata:
bau
ceu
diu
fou
gau
Saya ingin mengubah daftar itu menjadi:
byau
cyeu
dyiu
fyou
gyau
Saya gagal mencoba perintah:
:%s/(\w)(\w\w)/\1y\2/g
Mengingat ini tidak berhasil, apa yang harus saya ubah untuk membuat regex capture groups bekerja di Vim?
regex
vim
capturing-group
regex-group
Kristen
sumber
sumber
:%norm ay<CR>
.l
, masuk ke mode Blok Visual denganCtrl+v
, tandai seluruh kolom denganShift+g
diikuti olehl
, lalu masuk ke mode Sisipkan denganShift+i
dan masukan 'y'. 7 penekanan tombol termasuk penyelesaianEsc
untuk keluar dari mode Sisipkan. Tidak memposting sebagai jawaban karena ini bukan tentang menangkap grup (yang saya cari ketika saya menemukan ini). :-)Jawaban:
Salah satu cara untuk memperbaikinya adalah dengan memastikan bahwa pola tertutup oleh tanda kurung yang lolos :
Sedikit lebih pendek (dan lebih magic -al) adalah dengan menggunakan
\v
, yang berarti bahwa dalam pola setelah semua karakter ASCII kecuali'0'-'9'
,'a'-'z'
,'A'-'Z'
dan'_'
memiliki arti khusus:Lihat:
:help \(
:help \v
sumber
Jika Anda tidak ingin melarikan diri dari kelompok penangkap dengan garis miring terbalik (inilah yang Anda lewatkan), cukup ubah
\v
mesin ekspresi reguler Vim menjadi mode yang sangat ajaib :sumber
:exmode
; apakah ada cara untuk melakukannya di gvim menemukan / mengganti kotak dialog?\v...
penemuan pekerjaan regexp; dalam string pengganti,&
bekerja tetapi\
dilindungi (\1\r
hilang):s
) melaluiinputdialog()
dan sedikit Vimscript.\1 \r
perawatan adalah bug gvim. Saya akan mencoba mempostingnya di beberapa daftar spesifik vim. Sementara itu saya akan mencoba satu vimscript-inputdialog saya.Anda juga dapat menggunakan pola ini yang lebih pendek:
%s
menerapkan pola ke seluruh file.^.
cocok dengan karakter pertama dari garis.&y
menambahkany
setelah pola.sumber
Anda juga harus melarikan diri dari paranthesis Pengelompokan:
Itu yang berhasil.
sumber