.png)
Con grep
puedo hacer un grep -v "my search"
para obtener todas las líneas sin "mi búsqueda".
Consed
Puedo sed '/baz/!s/foo/bar/g'
encontrar texto de reemplazo en líneas sin "baz".
¿Hay alguna manera de hacer lo mismo en Vim? ¿Y es posible hacerlo sin la sintaxis "s///" y solo usando la sintaxis de búsqueda "/"?
Respuesta1
:g/pattern/
coincide con todas las líneas donde se encuentra el patrón.
:v/pattern/
hace lo contrario. Ver :h global
para más detalles.
Puedes usarlo así:
:v/pattern/norm Ipattern not found - <CR>
anteponer "patrón no encontrado -" a cada línea que no tenga "patrón" o
:v/pattern/s/nrettap/pattern
reemplazar "nrettap" con "patrón" en cada línea que no tenga "patrón".
Ejemplos artificiales, sí.
Respuesta2
Para buscar las líneasnoque contenga foo, por ejemplo, haga:
/^\(\(.*foo.*\)\@!.\)*$
Fuente:http://vim.wikia.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches
Respuesta3
Usando el comando :vEditar El enfoque tradicional para encontrar líneas que no coinciden con un patrón es usar el:v comando:
:v/Warning/p
Un buen truco cuando se trabaja con un archivo de registro grande en el que desea filtrar tantas líneas irrelevantes como sea posible antes de comenzar su búsqueda real es guardar el archivo con un nombre temporal y eliminar todas las líneas que no coincidan allí:
:sav junk.log
:v/warning/d
Ahora está editando un clon de su archivo original con todas las líneas que no coinciden con la "advertencia" eliminadas y puede editarlo a voluntad.
Árbitro:https://vim.fandom.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches
Respuesta4
Otro enfoque es hacer "grep externo"; del manual (:help :grep
):
5.2 External grep
Vim can interface with "grep" and grep-like programs (such as the GNU
id-utils) in a similar way to its compiler integration (see |:make| above).
*:gr* *:grep*
:gr[ep][!] [arguments] Just like ":make", but use 'grepprg' instead of
'makeprg' and 'grepformat' instead of 'errorformat'.
When 'grepprg' is "internal" this works like
|:vimgrep|. Note that the pattern needs to be
enclosed in separator characters then.
If the encoding of the program output differs from the
'encoding' option, you can use the 'makeencoding'
option to specify the encoding.
*:lgr* *:lgrep*
:lgr[ep][!] [arguments] Same as ":grep", except the location list for the
current window is used instead of the quickfix list.
Para mí, grepprg
está configurado en el valor predeterminado (ver con :set grepprg
) que usa el externo grep
, y así podría hacerlo
:grep -v 'my_pattern' %
donde %
se refiere al nombre del archivo actual (ver :help :_%
).
Después de esto, se puede usar :copen
o :lopen
para buscar los resultados en las listas de arreglos rápidos o de ubicaciones (dependiendo de si se ha usado :grep
o , respectivamente).:lgrep
NOTA
El grep externo siempre funcionará en elsalvadoarchivo, y no en el búfer. Tenga esto en cuenta cuando obtenga resultados inconsistentes.