Cerca la stringa e ottieni il conteggio nell'editor vi


105

Voglio cercare una stringa e trovare il numero di occorrenze in un file utilizzando l'editor vi.


11
La risposta selezionata ( :g/xxxx/d) è terribile, pericolosa e inferiore alle altre in questa pagina. Si prega di deselezionarlo.
— Bruno Bronosky

1
sono d'accordo e ti dice solo "righe eliminate" non "occorrenze eliminate"
— user1709076

Risposte:


4
:g/xxxx/d

Questo cancellerà tutte le linee con motivo e riporterà quante cancellate. Annulla per riaverli dopo.


6
Naturalmente, può semplicemente omettere la "d" in modo da non dover eseguire l'operazione.
— Rook

15
Nota che questo ti dice solo quante righe, non quante occorrenze. Penso che Dirk sia una soluzione migliore.

4
La mia soluzione di seguito conta correttamente più occorrenze all'interno di una riga e non c'è nulla da annullare.
— Mohit Chakraborty

6
Molto pericoloso: o
— Ankit Zalani

1
Questa non dovrebbe essere la risposta accettata / più popolare. Cosa stanno facendo i Moderatori SO? :(
— user1412066


121

Hai bisogno della nbandiera. Per contare le parole usa:

:%s/\i\+/&/gn   

e una parola particolare:

:%s/the/&/gn        

Vedere la count-itemssezione documentazione.

Se digiti semplicemente:

%s/pattern/pattern/g

poi la riga di stato ti darà anche il numero di corrispondenze in vi.


Sembra che questa risposta sia per gli utenti di Vim e non per Vi :(
— kadeshpa

Hai solo vi sul tuo sistema? Quale versione?
— Direttamente il

Qualcuno ha etichettato la tua domanda con vim dentro ... L'ho rimosso.
— ojblass

38

:% s / string / string / g darà la risposta.


Quale risposta migliore. +5 se possibile
— ojblass

Immagino che funzionerebbe solo quando non viene utilizzato ". *" Nel pattern
— AK

10
Non c'è bisogno di ripetere la stringa, fallo e basta %s/string//ng.
— slm

23

(simile a quanto disse Gustavo, ma in aggiunta:)

Per qualsiasi ricerca precedente , puoi fare semplicemente:

:%s///gn

Un pattern non è necessario, perché è già nel registro di ricerca ( @/).

"%" - fai s/in tutto il file
"g" - ricerca globale (con più risultati in una riga)
"n" - impedisce qualsiasi sostituzione di s/- nulla viene eliminato! niente deve essere annullato!
(vedi: :help s_flagper maggiori informazioni)

(In questo modo, funziona perfettamente con " Cerca testo selezionato visivamente ", come descritto in vim-wikia tip171 )


3

uso

:% S / modello / \ 0 / g

quando la stringa del pattern è troppo lunga e non ti piace digitarla di nuovo.


1

Risposta breve :

:% S / string-to-be-cercato // gn

Per imparare :

Ci sono 3 modalità nell'editor VI come di seguito inserisci qui la descrizione dell'immagine

  • :stai entrando Commandin Command-linemodalità da a . Ora, qualunque cosa tu scriva dopo :è su CLI (Command Line Interface)
  • %sspecifica tutte le linee. Specificare l'intervallo come %mezzo per la sostituzione nell'intero file. La sintassi per la sostituzione di tutte le occorrenze è:%s/old-text/new-text/g
  • gspecifica tutte le occorrenze nella riga. Con la gbandiera si può sostituire l'intera linea. Se questo gflag non viene utilizzato, verrà sostituita solo la prima occorrenza nella riga.
  • n specifica il numero di occorrenze di output
  • //la doppia barra rappresenta l'omissione di replacement text. Perché vogliamo solo trovare.

Una volta ottenuto il numero di occorrenze, è possibile premere il Ntasto per visualizzare le occorrenze una alla volta.

Per trovare e contare in un particolare intervallo di righe da 1 a 10:

: 1,10s / ciao // gn

  • Si noti %che l'intero file viene sostituito da ,numeri di riga separati.

Per trovare e sostituire in un particolare intervallo di righe da 1 a 10:

: 1,10s / HELO / ciao / gn


0

Suggerisco di fare:

  1. Cerca con *per fare una "ricerca delimitata" per quello che c'è sotto il cursore, o per fare una /patternricerca standard .
  2. Utilizzare :%s///gnper ottenere il numero di occorrenze. Oppure puoi usare :%s///nper ottenere il numero di righe con occorrenze.

** Ho davvero potuto trovare un plug-in che desse messaggi di "corrispondenza N di N 1 su N 2 linee" con ogni ricerca, ma ahimè.

Nota: non essere confuso dalla formulazione complicata dell'output. Il primo comando potrebbe darti qualcosa di simile a 4 matches on 3 linesdove potrebbe darti il ​​secondo 3 matches on 3 lines. Sebbene tecnicamente accurato, quest'ultimo è fuorviante e dovrebbe dire "3 linee corrispondono". Quindi, come puoi vedere, non c'è davvero mai bisogno di usare quest'ultima (solo 'n') forma. Ottieni le stesse informazioni, più chiaramente e di più utilizzando il modulo "gn".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.