mencari garis yang berisi pola tetapi tidak mengandung pola kedua


15

Saya perlu mencari baris yang berisi beberapa kata tetapi tidak mengandung kata kedua.

Misalnya, cari baris yang berisi kata "Ini" tetapi bukan kata "merah"

sehingga untuk file yang berisi baris-baris ini

This is a blue coat
This is a red  coat
This is a purple coat
That is a coat

Pencarian akan menemukan baris pertama dan ketiga saja.

Terima kasih atas sarannya!


Anda dapat menggunakan plugin LogiPat yang didistribusikan dengan Vims yang lebih baru
Christian Brabandt

Jawaban:


23

Anda dapat menggunakan perintah ini untuk mencetak baris yang mengandung Thisdan tidak red:

:g/\(.*This\)\&\(.*red\)\@!
  • \&memisahkan cabang seperti logis ANDkarena kami ingin garis yang memenuhi dua kondisi (cabang),
  • \(.*This\)adalah cabang pertama, bisa saja Thistetapi lebih umum seperti itu,
  • \(.*red\)\@!adalah cabang kedua, \@!berarti "sama dengan nol lebar jika atom sebelumnya tidak cocok", seperti logika NOT.

Dengan kata lain:

\(.*This\)  \&  \(.*red\)\@!
°°°°°°°°°°  °°  °°°°°°°°°°°°
'This'      AND NOT 'red'

Terima kasih banyak, ini sangat mirip dengan kueri melalui teks yang diformat. Saya dapat menggunakan ini untuk menemukan fungsi dokumen yang hilang.
Joshua Detwiler

1

Lihatlah postingan ini.

Kombinasikan dengan jawaban @romainl dan Anda dapat melakukan apa pun yang Anda inginkan.

Contoh: Misalkan saya ingin menambahkan constfungsi yang tidak memilikinya.

    handleChange = value => {

Skrip VIM:

%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc

Keluaran:

    const handleChange = value => {

Penjelasan:

\([ ]*\)\(\w* = .*$\)

- Dapatkan saya semua baris yang memiliki word =

\&

- menggabungkan aturan

^\(\&\(.*const.*\)\@!.\)*$

- baris tidak boleh berisi const.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.