Apakah ada pola seperti ^ dalam vim?

20

Dalam mode normal Vim, yang 0perintah membawa Anda ke kolom pertama pada baris dan ^membawa Anda ke awal logis dari baris (misalnya karakter non-spasi pertama). Di dunia regex, ^cocok dengan karakter pertama di telepon, spasi putih atau tidak. Apakah Vim memiliki pola yang berperilaku seperti perintah '^' - cocok dengan awal logis suatu baris?

Michael
sumber
Saya pikir ^ dalam regex biasanya cocok dengan awal baris, bukan karakter pertama. ^. akan cocok dengan awal dan kemudian karakter pertama, bukan awal dan kemudian karakter kedua.
bdsl

Jawaban:

17

Tidak ada jalan pintas untuk mencocokkan karakter non-spasi pertama pada suatu garis, Anda harus membuat sendiri pola tersebut, seperti:

^\s*restofpattern

Jika Anda tidak ingin memasukkan spasi putih dalam pertandingan Anda, Anda harus menggunakan pernyataan nol-lebar, seperti:

\(^\s*\)\@<=restofpattern

Tidak persis cantik, tapi setidaknya itu menyelesaikan pekerjaan.

Karl Bielefeldt
sumber
6

Untuk mencocokkan karakter non- spasi pertama , Anda hanya perlu menggunakan \Sseperti biasa.


Jika Anda menggunakan ^dalam regex di vim, itu akan cocok dengan awal baris yang sebenarnya, bahkan jika itu berisi spasi putih.

Misalnya, baris ini dimulai dengan spasi:

 <- there's a space there you can't see :)

Perintah vim ini akan menghapus spasi terdepan:

:%s/^ //

menghasilkan sebagai berikut:

<- there's a space there you can't see :)

Jadi, regex akan berperilaku seperti yang Anda harapkan, bahkan jika perintahnya tidak.

Michael Hampton
sumber
Saya kira Anda akan menjelaskan downvote. Jawaban ini, sejauh yang saya tahu, benar.
Michael Hampton
1
Saya tidak downvote, tetapi dengan klarifikasi: Saya bertanya-tanya apakah Vim memiliki operator yang cocok dengan karakter non-spasi pertama dari garis. The ^operator (seperti semua implementasi regex waras), akan cocok dengan karakter pertama bahkan jika itu adalah spasi.
Michael
Nah, bagaimana Anda berharap melakukannya secara normal? Biasanya dalam sebuah regex Anda akan menggunakan sesuatu seperti \Suntuk mencocokkan karakter non-spasi pertama.
Michael Hampton
2
\Sakan cocok dengan karakter non-spasi apa pun . Dengan kata lain, saya bertanya-tanya apakah Vim memiliki singkatan nol-lebar untuk ini: ^\W*\S.
Michael
1
Tidak ada mesin yang saya sadari menyediakan fungsi itu, tetapi sekali lagi - kapan Anda akan peduli pada mesin tujuan umum? Vim bukan mesin regex tujuan umum. Ini adalah editor yang memiliki mesin regex jadi saya bertanya-tanya apakah itu memiliki konstruksi khusus untuk sesuatu yang hanya penting di dalam editor.
Michael