Подтвердить что ты не робот

Количество манипуляций внутри Vim

Если у меня есть файл данных с столбцами чисел типа

3.14
0.42
6.66

Есть ли способ изнутри Vim, чтобы я мог манипулировать ими такими операциями, как сложение, вычитание и деление? Например, скажем, я хотел добавить 2.1 к каждому номеру в столбце, как бы я это сделал? а

Я могу сделать это с помощью piping, например, awk, но мне хотелось бы знать, есть ли встроенный метод, и я ничего не нашел в файлах справки.

4b9b3361

Ответ 1

Используйте CTRL-R с регистром выражений =.

Следующая команда добавит 2.1 к числу в строке:

C
<CTRL-R> =
<CTRL-R> "
+2.1
<ENTER>

Объединяясь с макросом, он может дать некоторые интересные результаты, например, этот пример.

Ответ 2

Регистры выражения отлично подходят для vim.

Вот более старомодный способ vi: Скажем, у вас есть файл, содержащий кучу чисел по одному в каждой строке, и вы хотите добавить 2.1 к каждой из строк.

:%s/$/+2.1/<ENTER> - this would append +2.1 to each line.
:1<ENTER>  - Goto the beginning of the file 
!Gbc<ENTER> - invoke the bc command on each line to do the addition.

Ответ 3

Полезной особенностью, которая оказывается удобной в этом случае, является подстановка с выражением (см. :help sub-replace-\=). Это позволяет для оценки выражения для каждого совпадения шаблонов команды подстановки и замените согласованный текст результатом этого выражения.

Например, чтобы добавить число 2.1 ко всем значениям в третьем столбце файл с разделителем табуляции, можно использовать следующую команду.

:%s/^\%([^\t]*\t\)\{2}\zs[^\t]*/\=str2float(submatch(0))+2.1/