GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare e sostituire il testo in Vim

Come si cerca un testo in Vim?

Premere il tasto /, digitare il testo da cercare e premere invio. Questo è proprio come il comando less.

Ma questo metodo di ricerca del testo non ti consente di sostituire il risultato trovato.

Consentitemi di condividere come puoi trovare e sostituire in Vim .

:%s/foo/bar/gci

Il comando precedente eseguirà una ricerca senza distinzione tra maiuscole e minuscole per trovare tutte le occorrenze del termine di ricerca (foo) con il nuovo termine (bar). Con il flag c chiede conferma prima di sostituire qualsiasi sostituzione.

Lasciami andare nel dettaglio e spiegare le cose in modo più chiaro.

Utilizzare il comando sostitutivo per trovare e sostituire il testo in Vim

Immagino che tu sappia già che per eseguire un comando in Vim, devi essere in modalità normale (nota anche come modalità di comando). Premi il tasto Esc per entrare in questa modalità.

Vim ha un comodo comando :substitue , può essere utilizzato anche con la versione più breve :s .

Di seguito è riportata la sintassi generale del comando sostitutivo:

:[range]s/{pattern}/{string}/[flags] [count]

Analizziamo questa sintassi. Qualsiasi elemento tra parentesi quadre '[]' è facoltativo.

  • range :Questa parte della sintassi può essere utilizzata se si desidera la sostituzione tra dette righe. Se non menzioni un intervallo, sostituirà solo il testo sulla riga corrente . (Ho condiviso una tabella per l'intervallo)
  • pattern :qui è dove specifichi il testo che vuoi sostituire.
  • string :Questa è la stringa che sostituirà il pattern.
  • flags :Per sostituire tutte le occorrenze del modello di ricerca, usa il g bandiera. Puoi specificare se vuoi che la corrispondenza ignori maiuscole e minuscole, usa i bandiera. Per confermare manualmente ogni operazione di ricerca e sostituzione, utilizzare il c bandiera.
  • count :numero di righe in cui sostituire il testo.
Gamma Descrizione
. Linea corrente
$ Ultima riga
% Tutte le righe
x Numero riga x
.,+x Dalla riga corrente fino a ulteriori x righe

Esempi di ricerca e sostituzione in Vim

Esaminiamo alcuni esempi che dimostrano l'uso del comando sostitutivo in Vim.

Di seguito è riportato lo screenshot del file che userò per dimostrare l'utilizzo del comando sostitutivo in Vim.

Sostituzione del testo di base

Per questo esempio, mi sono assicurato che la stringa "Hello" si verificasse più volte in almeno una riga e più volte nel file.

Voglio sostituire 'Hello' con la stringa 'HI'. Di seguito è riportato il comando Vim per farlo:

:%s/Hello/HI/g

Sostituisci con conferma

Per sostituire il testo, ma vuoi una conferma ogni volta che lo fai, puoi usare il c nel comando sostitutivo.

:%s/Hello/HI/gc

Come puoi vedere dal video, Vim mi chiede una conferma ogni singola volta prima di sostituire uno schema.

Hai anche un prompt che assomiglia alla seguente riga:

replace with HI (y/n/a/q/l/^E/^Y)?

Le opzioni del prompt hanno il seguente significato:

  • y:sì
  • n:no
  • a:tutto
  • q:esci senza sostituire, ma non si annulla una volta che hai già sostituito il testo
  • l:sostituisci questo ed esci (pensa a 'ultimo')
  • ^E:Scorri verso l'alto (non funziona in vim-tiny )
  • ^Y:Scorri verso il basso (non funziona in vim-tiny )

Sostituzione senza distinzione tra maiuscole e minuscole

Quando vuoi sostituire il testo indipendentemente dal fatto che sia in maiuscolo o minuscolo, in tal caso (haha) dovresti usare il i flag nel comando sostitutivo.

:%s/hello/HI/gi

Se noti, tutte le occorrenze di "ciao" o "ciao" e persino "ciao" vengono sostituite con "CIAO". Questa è una sostituzione del modello senza distinzione tra maiuscole e minuscole.

Ogni "ciao" viene sostituito con "CIAO" anche se la maggior parte di "ciao" contiene una "H" maiuscola.

Sostituisci il testo in una singola riga in Vim

Per sostituire il testo in una singola riga, dobbiamo specificare l'intervallo che limita l'ambito della sostituzione alla riga corrente.

Per questo, è meglio usare il . descrittore di intervallo.

:.s/Hello/HI/g

Come puoi vedere, solo il pattern nella prima riga è stato sostituito perché ho usato il punto '.' descrittore di intervallo.

Suggerimento bonus:utilizzo di un delimitatore diverso

Osservando la sintassi del comando sostitutivo, ho menzionato che il modello e la stringa sono separati da una barra '/'.

Ma cosa succede se avessi un testo con molte barre in avanti in pattern/string, come un percorso, che si ripete ovunque nel file? Sfuggire alle barre in avanti può essere noioso e a volte può essere facilmente mancato.

Quindi, invece di utilizzare il carattere barra in avanti come delimitatore, puoi invece utilizzare un delimitatore diverso.

Alcuni caratteri delimitatori che ho visto essere usati sono # , _ e @ .

Ecco una gif che mostra una dimostrazione dell'utilizzo di @ come delimitatore invece di / .

Conclusione

La sostituzione del testo può essere un'occorrenza comune e Vim ti offre un modo potente per cercare e sostituire pattern con una stringa. Puoi anche mescolare regex nel comando di sostituzione di Vim.

Se sei interessato a imparare qualcosa di più delle semplici basi di Vim, ti consiglio vivamente di usare questo programma di Jovica Ilic.


Linux
  1. Utilizzo di sed per trovare e sostituire file di testo in Linux

  2. Utilizzo dei comandi Sed,ex e perl per trovare e sostituire un testo in Linux

  3. Come integrare il comando Mv dopo il comando Trova?

  4. Come sostituire tutte le occorrenze di una parola in tutti i file nella riga di comando di Linux

  5. Vi e Vim Editor:12 potenti esempi di ricerca e sostituzione

Come cercare per trovare una parola in Vim o Vi Text Editor

Come utilizzare sed per trovare e sostituire la stringa nei file

Come utilizzare i marcatori ed eseguire la selezione del testo in Vim

Come utilizzare il comando SED per trovare e sostituire la stringa nei file

Come trovare e sostituire testo, parola o stringa in un file

Come utilizzare Sed per trovare e sostituire una stringa in un file