Чтобы сделать это правильно, вам нужно использовать filters и режим выполнения vim's .
A filter - это любая стандартная программа UNIX (sort
, awk
, grep
, cut
, paste
, sed
...), которая может читать из stdin и написать на стандартный вывод.
Режим выполнения Vim позволяет вам читать или заменять текст выводом программы. Если вы сделаете визуальный выбор (скажем, с помощью V
или C-V
) и нажмете :
, ваша командная строка сразу будет иметь значение :'<,'>
, что означает «Применить любую команду, следующую за строками, включенными в визуальный выбор «. На этом этапе вы можете написать !foo
, чтобы заменить текст выводом программы foo .
Например, чтобы отсортировать текст по столбцу python, выделите его, нажмите :
и введите !sort -k5
. Вся команда будет выглядеть так: :'<,'>!sort -k5
При запуске она выдаст:
a b cd 4 h
a b cd 6 n
a b cd 5 o
a b cd 1 p
a b cd 3 t
a b cd 2 y
Для двух других задач awk
- ваш друг. Команда, подобная :'<,'>!awk '{ print $1, $3, $2, $4, $5 }'
, перевернет второй и третий столбцы (но учтите, что расстояние между столбцами свернуто). Чтобы увеличить столбцы, попробуйте что-то вроде :'<,'>!awk '{ sub($4, $4+1); print }'
.