Что вы можете выполнить на визуально выделенном тексте в vim? - PullRequest
1 голос
/ 20 сентября 2010

Какие возможные операции (с сочетаниями клавиш) можно выполнить с визуально выделенным текстом? Для простоты рассмотрим этот простой кусок:

   a  b  cd  1  p
   a  b  cd  2  y
   a  b  cd  3  t
   a  b  cd  4  h
   a  b  cd  5  o
   a  b  cd  6  n

Один конкретный вопрос : возможно ли выполнять команды / скрипты Python / shell для выборок?

Пара более конкретных вопросов:

1 -) Как отсортировать столбец python на месте?

2 -) Как поменять местами столбцы?

3 -) Как увеличить значения? (скажем, только цифры больше 3 в выборе)

Спасибо.

Ответы [ 2 ]

5 голосов
/ 20 сентября 2010

Этот вопрос чрезвычайно широк, но для начала рассмотрим :help visual-operators.

Что касается конкретного вопроса, проверьте плагин EvalSelection.vim ,который оценивает исходный код, выбранный в визуальной области в вашей оболочке, Python и некоторых других интерпретаторах.В качестве очень простого примера, если в буфере Vim у вас есть следующее:

pwd
echo $SHELL

Выберите первую строку и введите <Leader>esp.Разбивка:

<Leader>e является ключевой командой по умолчанию для вызова EvalSelection.vim.s указывает, что вы хотите оценить его с помощью вашей оболочки.p указывает, что вы хотите распечатать результаты в командной строке Vim.

Я получаю следующий вывод при выполнении команды выше: ~/Desktop с выбранной первой строкой.Я получаю /bin/zsh/, используя ту же команду во второй строке.

4 голосов
/ 04 апреля 2011

Чтобы сделать это правильно, вам нужно использовать 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 }'.

...