J'étais récemment au courant de la !
technique de filtrage et je l'adore. Malheureusement, je ne peux pas l'utiliser en mode de blocage visuel. J'espère que certains experts ici m'aideront.
Fondamentalement, je veux trier sur place une colonne telle que la troisième ci-dessous (juste un MWE). Et je ne veux pas déranger les autres colonnes quand je trie.
J'ai essayé de filtrer ( !
) la troisième colonne sélectionnée visuellement (en mode bloc) via l' sort
utilitaire. Mais le tri s'étend plutôt au-delà de la sélection, c'est-à-dire que toutes les lignes sont permutées, pas seulement la sélection, ce tri aussi basé sur la première colonne!
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
J'ai sélectionné la dernière colonne à l'aide de visual-block et j'ai dit !sort --reverse
qui apparaît comme
'<,'>!sort --reverse
Et le résultat est étrange contrairement à ce que j'attendais. Le résultat a trié / échangé les lignes entières, pas seulement une colonne, et cela aussi, basé sur la première colonne indépendamment de ma sélection de troisième colonne!
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
Sauf impossibilité contraire, je souhaiterais une solution de tri pur vim +, plutôt que des outils relativement avancés tels que sed
/ awk
. Il est plus important de me connaître, à quel point le mode de blocage visuel est limité, par rapport au mode visuel, par exemple.
la source
sort
commande interne vim est disponible, vous n'avez donc pas besoin d'invoquer l'externe!sort
pour effectuer un tri régulier.:help filter
) mais également standardisé (désolé, je ne sais pas comment lier en profondeur ce point de vente). Vous ne pouvez pas vous plaindre si vous ne faites pas de RFTM.Réponses:
Je pense que votre meilleur espoir est le plugin vis.vim . Ce plugin fournit une commande
B
qui permet d'appliquer une commande à un bloc.Ici, après l'installation du plugin, vous sélectionnez votre bloc, puis utilisez:
Notez que la commande peut être n'importe quoi, donc au lieu de
!sort
vous pourriez faire beaucoup d'autres traitements sur le bloc comme l'enregistrer dans un autre fichier (:'<,'>B w foo.txt
) ou appliquer une substitution (:'<,'>B s/foo/bar/g
)la source
$
est utilisé en mode visuel par blocs.