Ordenar una columna sin alterar otras columnas


10

Recientemente conocí la !técnica de filtrado , y me encanta. Desafortunadamente, no puedo usarlo en un modo de bloque 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 las ordeno.

Traté de filtrar ( !) la tercera columna visualmente seleccionada (modo bloque) a través de la sortutilidad. 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, sino que también se clasifica según 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 --reverseque aparece como

'<,'>!sort --reverse

Y el resultado es extraño en oposición a lo que esperaba. ¡El resultado tiene las filas completas ordenadas / intercambiadas, no solo una columna, y eso también, según 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 lo contrario, me gustaría una solución vim + sort pura, en lugar de las herramientas relativamente avanzadas como sed/ awk. Es más importante conocerme a mí mismo, cuán limitado es el modo de bloqueo visual, en comparación con el modo visual.


Esto no resuelve su problema, pero tenga en cuenta que hay un sortcomando interno vim disponible, por lo que no necesita invocar el externo !sortpara realizar una ordenación regular.
Dalker

2
Los filtros solo funcionan en líneas .
romainl

@Dalker Sí, gracias. Pero ya lo intenté, lo que dio un resultado similar.
Ama la probabilidad del

@romainl ¿Eso es todo? ¿Sin rayos de esperanza? ¡Raramente encuentro que eso esté sucediendo con Vim! Pero, no obstante, ¿no es extraño decir "Los filtros solo funcionan en líneas " después de seleccionar otra cosa y no hay signos de un problema hasta la salida? Si no aparece una advertencia / error, incluso argumentaría que es un ERROR.
Le encanta la probabilidad del

¿Un insecto? Jaja no. El comportamiento no solo está documentado ( :help filter) sino también estandarizado (lo siento, no sé cómo vincular ese POS). No puede quejarse si no RFTM.
romainl

Respuestas:


9

Creo que su mejor esperanza es el complemento vis.vim . Este complemento proporciona un comando Bque 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 !sortusted podría realizar 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)


1
@LovesProbability, si está intentando ordenar la tercera columna sin alterar sus dos primeras columnas, este hilo podría ser útil.
Jair López

@ JairLópez Sin ofender, es realmente divertido cómo alguien ha copiado mi pregunta en otro lugar, donde se le pidió que volviera a la fuente original (es decir, esta página junto a una copia reformulada de esta respuesta), y finalmente me pides que vaya a buscar una respuesta allí.
Ama Probabilidad

Gracias por tu comentario, lo hice porque (1) tanto tu pregunta como esta respuesta fueron interesantes; (2) tal vez no estás solo y podría haber más personas interesadas en ello; (3) esta es una gran oportunidad para ayudar a alguien a comprender cómo $se usa en modo visual bloqueado.
Jair López
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.