Сортування стовпця без зміни інших стовпців


10

Я нещодавно знав про !техніку фільтрування , і мені це подобається. На жаль, я не в змозі використовувати його у режимі візуального блоку. Сподіваюся, деякі фахівці тут допоможуть мені.

В основному, я хочу на місці сортувати стовпчик, наприклад, третій нижче (просто MWE). І я не хочу заважати іншим стовпцям під час сортування.

Я намагався відфільтрувати ( !) візуально (блок-режим) вибраний третій стовпчик через sortутиліту. Але сортування швидше виходить за межі вибору, тобто всі рядки замінюються, а не лише виділення, що теж сортується на основі першого стовпця!

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

Я вибрав останній стовпець, використовуючи візуальний блок, і сказав, !sort --reverseщо відображається як

'<,'>!sort --reverse

І результат дивний на противагу тому, що я очікував. В результаті впорядковані / замінені цілі рядки, а не лише один стовпець, і це теж, грунтуючись на першому стовпці, незалежно від мого вибору третього стовпця!

 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   

Якщо інше неможливо, я хотів би отримати чисте рішення vim + сортування, а не відносно сучасні інструменти, такі як sed/ awk. Важливіше самому знати, наскільки обмежений режим візуального блоку, порівняно, скажімо, візуальний режим.


Це не вирішує вашу проблему, але зауважте, що sortдоступна внутрішня команда vim , тому не потрібно викликати зовнішню !sortдля звичайного сортування.
Далкер

2
Фільтри працюють лише на лініях .
romainl

@Dalker Так, спасибі Але я вже спробував це, що дало подібний результат.
Любить ймовірність

@romainl Це все? Ні промені надії? Я рідко знаходжу це з Vim !! Але, тим не менш, хіба не дивно сказати "Фільтри працюють лише на лініях " після того, як ви вибрали щось інше і жодних ознак проблеми до виходу? Якщо це не з'являється попередження / помилка, я б навіть стверджував, що це БУГ.
Любить ймовірність

Жук? Ха-ха, ні. Поведінка не тільки задокументована ( :help filter), але і стандартизована (вибачте, я не знаю, як поглибити цей POS). Ви не можете скаржитися, якщо ви не RFTM.
romainl

Відповіді:


9

Я думаю, що найкраща надія - плагін vis.vim . Цей плагін забезпечує команду, Bяка дозволяє застосувати команду до блоку.

Тут, після встановлення плагіна, ви виберете свій блок і використовуєте:

:'<,'>B !sort

Зауважте, що команда може бути будь-якою, тому замість !sortвас можна було б виконати багато іншої обробки на блоці, наприклад, зберегти її в інший файл ( :'<,'>B w foo.txt) або застосувати заміну ( :'<,'>B s/foo/bar/g)


1
@LovesProbability. Якщо ви намагаєтеся сортувати третій стовпець, не змінюючи їхніх перших двох стовпців, ця нитка може бути корисною.
Жаїр Лопес

@ JairLópez Без жодної образи, це дуже смішно, як моє запитання хтось копіює десь в іншому місці, де його попросили повернутися до першоджерела (тобто на цю сторінку поряд із перефразованою копією цієї відповіді), і нарешті ти просиш мене піти шукати там відповідь.
Любить ймовірність

Дякую за ваш коментар, я зробив це, тому що (1) і ваше запитання, і ця відповідь були цікавими; (2) можливо ви не самотні, і може бути більше зацікавлених людей; (3) це прекрасна можливість допомогти комусь зрозуміти, як $використовується в блочно-візуальному режимі.
Jair López
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.