2009-03-25 5 views
28

Ho alcune errate corrispondenze if e fi in uno script. Mi piacerebbe spogliare tutto tranne il if's's e il fi's. Solo così posso vedere la struttura. Perché sto lavorando così duramente con un editor così potente? Mi serve un operatore BIGFATOR per regexp o qualche epifania che mi è sfuggito ... Non mi interessa la pontificazione sulle espressioni regolari, solo qualcosa di pratico in VIM7.2.Esiste un comando Verg regexp O corretto? Qual è il modo migliore per trovare incompatibili se altro?

: g/[^ \ t] se [/ print

stamperà i se

: g/[^ \ t] fi/stampa

stamperà il fi

Quello che voglio fare è o le condizioni

: g/[^ \ t] fi BIGFATOROPERATOR [^ \ t] fi/stampa

Ho avuto successo nel seguente modo ... ma sento che sto lavorando troppo!

: chiamare TripMatch ('[^ \ t] * se [', 'altro', 'fi [\ t $]')

funzione! TripMatch (str1, str2, str3)

let var1 = a: str1

let var2 = a: str2

let VAR3 = a: str3

lasciare max = linea ("$")

sia n = 1

per n in range (1, max)

let curren TLIN = getline (n)

if currentline =~? var1 

    echo n "1:" currentline 

else 

    if currentline =~? var2 

     echo n "2:" currentline 

    else 

     if currentline =~? var3 

     echo n "3:" currentline 

     else 

     let foo = "do nothing" 

     endif 

    endif 

endif  

endfor

endfunction

risposta

53
:g/[ ^\t]if\|[ ^\t]fi/print 

BIGFATOROPERATOR è \|. Si chiama alternation operator. In PCRE, è semplice |. È scappato in Vim/ex perché | è usato altrove per i comandi generali (o qualcosa - FIXME).

+1

Stai evitando il | personaggio in questo? – ojblass

+2

Nella mia difesa c'è un sacco di rumore alla ricerca di queste cose ... e ho imparato molto nel processo. – ojblass

12

Se si desidera rimuovere tutte le altre linee a parte quelli con se, altro o fi è possibile utilizzare questo

%v/\(if\|else\|fi\)/d 

'v' è l'opposto di 'g' e rimuoverà tutte le righe che don' t corrisponde alla regexp.

Per aggiungere a ciò che lo strager ha detto, il carattere pipe '|' è sfuggito a Vim, immagino perché Vim suppone che cercherete caratteri letterali più spesso di quanto avrete bisogno di estesi RegExps.

È possibile effettuare Vim usare le espressioni regolari meno sfuggite impostando il livello di 'magia' a 'molto', quando in modalità ex:

L'utilizzo di "\ v" significa che nel modello dopo tutto ASCII caratteri esclusi '0' - '9', 'a' - 'z', 'A' - 'Z' e '_' hanno un significato speciale. "Molto magico"

See: lui/magico per ulteriori informazioni

Non è consigliabile impostare il livello di magia di default a 'molto' nel vostro vimrc anche se (come le note di file di aiuto) .

+0

operatore di alternanza ancora una volta ... dove mi sono perso questo nella mia educazione? – ojblass

+0

Il carattere di pipe senza escape viene utilizzato per stringere insieme i comandi Ex. Ad esempio : bufdo retab | aggiornamento eseguirà: retab e: aggiornamento su ogni buffer. –

5
:h /\| 

Se vi siete persi \ |, probabilmente hanno perso molti altri pattern "gettoni".

Problemi correlati