Pregunta

¿Hay una manera de Vim (o un plug-in) para buscar un término y una iteración en los resultados de búsqueda (como por n en Vim), por la columna, en lugar de la fila? Así que si mi archivo fue lo siguiente:

foo1  bar   bar
baz   baz   foo3
baz   baz   foo4
foo2  bar   bar

Si busco foo quiero repetir por los resultados con el fin 1,2,3,4. Normalmente n me movería a través de ellos con el fin 1,3,4,2.

Quiero que esto, por ejemplo, para navegar a través de resultados de búsqueda en un archivo enorme de anchura fija de datos o archivo CSV, donde las columnas representan campos.

(también me conformo con una forma de hacerlo en Emacs en su lugar:.)

¿Fue útil?

Solución

Después de ver esta cuestión, decidí probar y escribir un plugin vim para manejarlo. Es mi primer plugin vim, por lo que es probable que sea muy mala. Sin embargo, funciona por el ejemplo que diste.

Puede descargar el plugin desde vim.org: SearchCols.vim

Tenga en cuenta que también requiere los multvals plugin desde el mismo sitio: multvals. vim

Se crea una :SearchCols <string> de comandos, que se puede utilizar para buscar el <string> en columnas de ancho fijo para que la búsqueda se ve en la primera columna en primer lugar, a continuación, la segunda columna, etc. en lugar de la búsqueda fila por fila que es estándar para vim. Repita el comando a través de @: y luego @@ ya que es una de colon mando.

Los supuestos:

  • Asume que su archivo está formateado con columnas de ancho fijo de espacio en blanco delimitado, es decir, no hay espacios dentro de los elementos de datos, sólo en entre ellos.
  • Se asume que la primera línea de su archivo tiene el formato para que los anchos de columna se pueden deducir de ella.

mejoras obvio que se me ocurre sería que la búsqueda para el siguiente elemento más fácil de utilizar @: y @@, incluyendo la búsqueda destacando (el código está ahí pero está comentada, ya que utiliza :match y usted tendría que usar :match none a apagarlo), y eliminando la dependencia de multvals.vim.

Otros consejos

EDIT: acabo de encontrar una visión general de la utilización de expresiones regulares vim para las tablas aquí . Eso es mucho más limpio que mi intento de aficionados (aunque esto funciona también;)):

búsqueda de ^foo buscará la primera columna, mientras que la búsqueda de .*\ foo buscará la segunda columna, y .*\ .*\ foo buscará la tercera.

Esto no es completa, por supuesto, ya que coincide con una manzana entera desde el principio de la línea, por lo que encontrará foo3 y foo4 pero pone el cursor en la posición 0.

Sin embargo, puede automatizar esto con la función de grabación. Escriba exactamente lo siguiente en modo normal:

qa/.*\ .*\ foo
/foo
q

(donde he utilizado nuevas líneas para indicar que debe pulsar la tecla de retorno).

Esto pone dos búsquedas bajo el un registro (qa comienza a grabar bajo un QB en el punto b, etc). Ahora @a golpear y usted debe buscar sólo la tercera columna ....

Estoy seguro de que puede convertir esto en un comando que lleva un número de columna, pero me voy ahora, lo siento:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top