2009-04-03 11 views
87

Quiero buscar una cadena y buscar el número de apariciones en un archivo utilizando el editor vi.Buscar cadena y obtener recuento en el editor vi

+2

La respuesta seleccionada (': g/xxxx/d') es terrible, peligrosa e inferior a otras en esta página. Por favor deseleccionarlo. –

+0

Estoy de acuerdo y solo dice 'líneas eliminadas' no 'apariciones se borraron' – user1709076

Respuesta

15
:g/xxxx/d 

Esto eliminará todas las líneas con patrón e informará cuántas eliminaron. Deshacer para recuperarlos después.

+4

Por supuesto, él solo puede omitir la "d" para que no tenga que volver a la operación. – Rook

+13

Tenga en cuenta que esto solo le indica cuántas líneas, no cuántas ocurrencias. Creo que la solución de dirk es mejor –

+4

Mi solución a continuación cuenta correctamente múltiples ocurrencias dentro de una línea y no hay nada que deshacer. –

37

:% s/string/string/g dará la respuesta.

+0

¡Qué mejor respuesta! +5 si es posible – ojblass

+0

Supongo que funcionaría solo cuando no se use '. *' En el patrón –

+9

No es necesario repetir la cadena, simplemente haga '% s/string // ng'. – slm

119

Necesita la bandera n. Para contar las palabras utilizan:

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

y una palabra en particular:

:%s/the/&/gn   

Ver count-items sección de documentación.

Si sólo hay que escribir en:

%s/pattern/pattern/g 

entonces la línea de estado le dará el número de coincidencias en vi así.

+0

Parece que esta respuesta es para usuarios de Vim y no para Vi :( – kadeshpa

+0

¿Solo tiene vi en su sistema? ¿Qué versión? – dirkgently

+0

Alguien etiquetó su pregunta con vim en ella ... Lo eliminé – ojblass

137

el camino es

:% s/patrón // gn

+6

+1 para l ess escribiendo y al grano. – Leafy

+0

Esta es la respuesta más auténtica sin utilizar ningún truco de sobre matar. – user1412066

2

uso

:% s/patrón/\ 0/g

cuando cadena de patrón es demasiado largo y no te gusta volver a escribirlo todo.

17

(similar a Gustavo dijo, pero, además:)

Para cualquier previamente de búsqueda, se puede hacer simplemente:

:%s///gn 

Un patrón no es necesario, porque ya está en la búsqueda -registro (@/).

"%" - hacer s/ en todo el archivo
"g" - Búsqueda global (con múltiples hits en una sola línea)
"n" - evita cualquier sustitución de s/ - se elimina nada! ¡nada se debe deshacer!
(ver: :help s_flag para más información)

(De esta manera, funciona perfectamente con "Búsqueda de texto seleccionado visualmente", como se describe en vim-wikia tip171)

0

Sugiero hacer:

  1. Busque con * para hacer una "búsqueda limitada" de lo que está debajo del cursor, o haga una búsqueda estándar /pattern.
  2. Usa :%s///gn para obtener el número de apariciones.O puede usar :%s///n para obtener el número de líneas con ocurrencias.

** realmente con lo que pude encontrar un plug-in que dar mensajes de "partido de N de N en N líneas" con cada búsqueda, pero por desgracia.

Nota: No se deje confundir por la redacción complicada de la salida. El comando anterior podría darle algo como 4 matches on 3 lines donde este último podría darle 3 matches on 3 lines. Si bien técnicamente es preciso, este último es engañoso y debería decir '3 líneas coinciden'. Entonces, como puede ver, realmente nunca hay necesidad de usar la última forma ('n' solamente). Obtienes la misma información, más claramente, y más usando la forma 'gn'.

Cuestiones relacionadas