visual-block – Ordenar una columna sin alterar otras columnas

Pregunta:

¡Recientemente me di cuenta del filtrado ! técnica, y me encanta. Desafortunadamente, no puedo usarlo en un modo de bloqueo visual. Espero que algunos expertos aquí me ayuden.

Básicamente, quiero ordenar en el lugar una columna como la tercera a continuación (solo un MWE). Y no quiero molestar a las otras columnas cuando ordeno.

Traté de filtrar ( ! ) La tercera columna seleccionada visualmente (modo de bloque) a través de la utilidad de sort . Pero la ordenación se extiende más allá de la selección, es decir, todas las filas se intercambian, no solo la selección, ¡también la ordenación basada en la primera columna!

1.  LARGEST         40
2.  SECOND-LARGEST  168     
3.  MID             2.8     
4.  MID             540     
5.  MID             14.84   
6.  MID             40      
7.  SECOND-LEAST    64      
8.  LEAST           8

Seleccioné la última columna usando visual-block, y dije !sort --reverse que se muestra como

'<,'>!sort --reverse

Y el resultado es extraño, opuesto a lo que esperaba. El resultado tiene todas las filas ordenadas / intercambiadas, no solo una columna, ¡y eso también, basado en la primera columna independientemente de mi selección de tercera columna!

 8.  LEAST           8    
 7.  SECOND-LEAST    64      
 6.  MID             40      
 5.  MID             14.84   
 4.  MID             540     
 3.  MID             2.8     
 2.  SECOND-LARGEST  168     
 1.  LARGEST         40   

A menos que sea imposible de otra manera, me gustaría una solución pura de vim + sort, en lugar de las herramientas relativamente avanzadas como sed / awk . Es más importante conocerme a mí mismo, lo limitado que es el modo de bloqueo visual, en comparación con, digamos, el modo visual.

Respuesta:

Creo que tu mejor esperanza es el complemento vis.vim . Este complemento proporciona un comando B que permite aplicar un comando a un bloque.

Aquí, después de instalar el complemento, seleccionaría su bloque y luego usaría:

:'<,'>B !sort

Tenga en cuenta que el comando puede ser cualquier cosa, por lo que en lugar de !sort , podría hacer muchos otros procesos en el bloque, como guardarlo en otro archivo ( :'<,'>B w foo.txt ) o aplicar una sustitución ( :'<,'>B s/foo/bar/g )

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım