me gustaría hacer la operación inversa realizada porcomando de Vim para borrar todos menos líneas seleccionadas
:g/pattern/d
es decir, eliminar todas las líneas en un archivo que no tiene pattern
me gustaría hacer la operación inversa realizada porcomando de Vim para borrar todos menos líneas seleccionadas
:g/pattern/d
es decir, eliminar todas las líneas en un archivo que no tiene pattern
Puede utilizar v
para seleccionar toda la línea, sin patrón:
:v/pattern/d
logrará lo que quiere hacer.
Ver :help :v
Una forma de hacer esto es con un filtro de shell:
:%!grep pattern
Este comando pasa toda su archivo (%
) a una carcasa (!
) que se extiende a través de lacomando y devuelve el resultado a la ventana del editor.
Con todo debido al respeto, la respuesta proporcionada por Xavier T es la correcta. vim proporciona ': v' para este problema exacto. –
Estoy de acuerdo. Sin embargo, la capacidad del filtro de shell es fantásticamente útil por derecho propio. –
Usted puede simplemente negar el patrón
:g!/pattern/d
Esto eliminará todos, pero las líneas seleccionadas.
El uso de este comando global parece preferible al comando de shell porque: (1) es un comando Vim interno y no depende de tener una utilidad grep externa, que podría ser un problema en los sistemas Windows, y (2) no está seguro de esto, pero el filtro de shell devuelve esencialmente un documento completamente nuevo, y el comando global simplemente elimina las líneas, creo que lo global es preferible para mantener el historial de deshacer más pequeño (y por lo tanto más rápido), y (3) simplemente es una buena idea adquirir el hábito de usar Vim globals (: g y: v) porque le permiten realizar acciones arbitrarias en líneas coincidentes, no solo eliminar. –