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 sort
utilidad. 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 --reverse
que 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.
fuente
sort
comando interno vim disponible, por lo que no necesita invocar el externo!sort
para realizar una ordenación regular.:help filter
) sino también estandarizado (lo siento, no sé cómo vincular ese POS). No puede quejarse si no RFTM.Respuestas:
Creo que su 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:
Tenga en cuenta que el comando puede ser cualquier cosa, por lo que en lugar de
!sort
usted 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
)fuente
$
se usa en modo visual bloqueado.