Ordinamento di una colonna senza alterare altre colonne


10

Di recente ero a conoscenza della !tecnica di filtraggio e la adoro. Sfortunatamente, non sono in grado di usarlo in modalità blocco visivo. Spero che alcuni esperti qui mi aiutino.

Fondamentalmente, voglio ordinare sul posto una colonna come la terza di seguito (solo un MWE). E non voglio disturbare le altre colonne durante l'ordinamento.

Ho provato a filtrare ( !) la terza colonna visivamente (modalità blocco) selezionata tramite l' sortutilità. Ma l'ordinamento si estende piuttosto oltre la selezione, cioè tutte le righe vengono scambiate, non solo la selezione, anche l'ordinamento in base alla prima colonna!

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

Ho selezionato l'ultima colonna usando il blocco visivo e ho detto !sort --reverseche appare come

'<,'>!sort --reverse

E il risultato è strano al contrario di quello che mi aspettavo. Il risultato ha le intere righe ordinate / scambiate, non solo una colonna, e anche quella, in base alla prima colonna indipendentemente dalla mia selezione della terza colonna!

 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   

Salvo diversamente impossibile, vorrei una soluzione vim + sort pura, piuttosto che strumenti relativamente avanzati come sed/ awk. È ancora più importante conoscere me stesso, quanto è limitata la modalità di blocco visivo, rispetto a dire, la modalità visiva.


Questo non risolve il problema, ma nota che è disponibile un sortcomando interno vim , quindi non è necessario invocare l'esterno !sortper eseguire un ordinamento regolare.
Dalker,

2
I filtri funzionano solo su linee .
rom

@Dalker Sì, grazie. Ma l'ho già provato, il che ha dato un risultato simile.
Ama la probabilità il

@romainl È così? Nessun raggio di speranza? Raramente trovo che accada con Vim !! Tuttavia, non è strano dire "I filtri funzionano solo sulle linee " dopo aver selezionato qualcos'altro e nessun segno di problema fino all'output? Se non viene visualizzato un avviso / errore, direi anche che è un ERRORE.
Ama la probabilità il

Un insetto? Haha no. Il comportamento non è solo documentato ( :help filter) ma anche standardizzato (scusate, non so come collegare in profondità quel POS). Non puoi lamentarti se non RFTM.
Romainl,

Risposte:


9

Penso che la tua migliore speranza sia il plug-in vis.vim . Questo plugin fornisce un comando Bche consente di applicare un comando a un blocco.

Qui dopo aver installato il plug-in, selezionare il blocco e quindi utilizzare:

:'<,'>B !sort

Nota che il comando può essere qualsiasi cosa, quindi al posto !sorttuo potresti fare molte altre elaborazioni sul blocco come salvarlo su un altro file ( :'<,'>B w foo.txt) o applicare una sostituzione ( :'<,'>B s/foo/bar/g)


1
@LovesProbability, Se stai cercando di ordinare la terza colonna senza alterare le loro prime due colonne, questo thread potrebbe essere utile.
Jair López,

@ JairLópez Senza offesa, è davvero divertente il modo in cui la mia domanda viene copiata da qualcuno da qualche altra parte, dove gli è stato chiesto di tornare alla fonte originale (cioè questa pagina a fianco di una copia riformulata di questa risposta), e infine mi chiedi di andare a trovare una risposta lì.
Ama la probabilità il

Grazie per il tuo commento, l'ho fatto perché (1) sia la tua domanda che questa risposta erano interessanti; (2) forse non sei solo e potrebbero esserci più persone interessate; (3) questa è una grande opportunità per aiutare qualcuno a capire come $viene usato in modalità visuale a blocchi.
Jair López,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.