Sortieren einer Spalte, ohne andere Spalten zu ändern

10

Ich war mir kürzlich der Filtertechnik bewusst !und ich liebe sie. Leider kann ich es nicht in einem Visual-Block-Modus verwenden. Hoffe, einige Experten hier würden mir helfen.

Grundsätzlich möchte ich eine Spalte wie die dritte unten (nur eine MWE) direkt sortieren. Und ich möchte die anderen Spalten beim Sortieren nicht stören.

Ich habe versucht, !die visuell (Blockmodus) ausgewählte dritte Spalte durch das sortDienstprogramm zu filtern ( ) . Die Sortierung geht jedoch eher über die Auswahl hinaus, dh alle Zeilen werden vertauscht, nicht nur die Auswahl, sondern auch die Sortierung anhand der ersten Spalte!

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

Ich habe die letzte Spalte mit dem visuellen Block ausgewählt und gesagt, !sort --reversewelche als angezeigt wird

'<,'>!sort --reverse

Und das Ergebnis ist seltsam im Gegensatz zu dem, was ich erwartet hatte. Das Ergebnis hat die gesamten Zeilen sortiert / vertauscht, nicht nur eine Spalte, und das auch, basierend auf der ersten Spalte, unabhängig von meiner Auswahl in der dritten Spalte!

 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   

Sofern nicht anders unmöglich, möchte ich eine reine vim + sort-Lösung anstelle der relativ fortschrittlichen Tools wie sed/ awk. Es ist wichtiger, mich selbst zu kennen, wie begrenzt der visuelle Blockmodus im Vergleich zum visuellen Modus ist.

Liebt Wahrscheinlichkeit
quelle
Dies löst Ihr Problem nicht, aber beachten Sie, dass ein interner sortBefehl von vim verfügbar ist, sodass Sie den externen Befehl nicht aufrufen müssen, um !sorteine reguläre Sortierung durchzuführen.
Dalker
2
Filter funktionieren nur in Zeilen .
Romainl
@Dalker Ja, danke. Aber das habe ich schon versucht, was zu einem ähnlichen Ergebnis führte.
Liebt Wahrscheinlichkeit
@romainl Ist es das? Keine Hoffnungsschimmer? Ich finde das selten bei Vim !! Aber ist es nicht seltsam zu sagen, dass "Filter nur in Zeilen funktionieren ", nachdem Sie etwas anderes ausgewählt haben und bis zur Ausgabe keine Anzeichen eines Problems vorliegen? Wenn es keine Warnung / keinen Fehler gibt, würde ich sogar argumentieren, dass es sich um einen BUG handelt.
Liebt Wahrscheinlichkeit
Ein Käfer? Haha nein. Das Verhalten ist nicht nur dokumentiert ( :help filter), sondern auch standardisiert (sorry, ich weiß nicht, wie ich diesen POS verknüpfen soll). Sie können sich nicht beschweren, wenn Sie nicht RFTM.
Romainl

Antworten:

9

Ich denke, Ihre beste Hoffnung ist das vis.vim- Plugin. Dieses Plugin bietet einen Befehl B, mit dem ein Befehl auf einen Block angewendet werden kann.

Hier wählen Sie nach der Installation des Plugins Ihren Block aus und verwenden dann:

:'<,'>B !sort

Beachten Sie, dass der Befehl beliebig sein kann, sodass Sie stattdessen !sortviele andere Verarbeitungen für den Block ausführen können, z. B. das Speichern in einer anderen Datei ( :'<,'>B w foo.txt) oder das Anwenden einer Ersetzung ( :'<,'>B s/foo/bar/g).

statox
quelle
1
@LovesProbability, Wenn Sie versuchen, die dritte Spalte zu sortieren, ohne die ersten beiden Spalten zu ändern, kann dieser Thread hilfreich sein.
Jair López
@ JairLópez Ohne Beleidigung ist es wirklich lustig, wie meine Frage von jemandem an einen anderen Ort kopiert wird, wo er gebeten wurde, zur Originalquelle zurückzukehren (dh diese Seite neben einer umformulierten Kopie dieser Antwort) und schließlich Sie bitten mich, dort eine Antwort zu finden.
Liebt Wahrscheinlichkeit
Vielen Dank für Ihren Kommentar, ich habe es getan, weil (1) sowohl Ihre Frage als auch diese Antwort interessant waren; (2) vielleicht bist du nicht allein und es gibt vielleicht mehr Leute, die daran interessiert sind; (3) Dies ist eine großartige Gelegenheit, um jemandem zu helfen, zu verstehen, wie $im blockweisen visuellen Modus verwendet wird.
Jair López