Ответ 1
Используйте CTRL-R с регистром выражений =
.
Следующая команда добавит 2.1 к числу в строке:
C
<CTRL-R> =
<CTRL-R> "
+2.1
<ENTER>
Объединяясь с макросом, он может дать некоторые интересные результаты, например, этот пример.
Если у меня есть файл данных с столбцами чисел типа
3.14
0.42
6.66
Есть ли способ изнутри Vim, чтобы я мог манипулировать ими такими операциями, как сложение, вычитание и деление? Например, скажем, я хотел добавить 2.1 к каждому номеру в столбце, как бы я это сделал? а
Я могу сделать это с помощью piping, например, awk, но мне хотелось бы знать, есть ли встроенный метод, и я ничего не нашел в файлах справки.
Используйте CTRL-R с регистром выражений =
.
Следующая команда добавит 2.1 к числу в строке:
C
<CTRL-R> =
<CTRL-R> "
+2.1
<ENTER>
Объединяясь с макросом, он может дать некоторые интересные результаты, например, этот пример.
Регистры выражения отлично подходят для 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.
Полезной особенностью, которая оказывается удобной в этом случае, является
подстановка с выражением (см. :help sub-replace-\=
). Это позволяет
для оценки выражения для каждого совпадения шаблонов команды подстановки
и замените согласованный текст результатом этого выражения.
Например, чтобы добавить число 2.1 ко всем значениям в третьем столбце файл с разделителем табуляции, можно использовать следующую команду.
:%s/^\%([^\t]*\t\)\{2}\zs[^\t]*/\=str2float(submatch(0))+2.1/