Я записываю таблицу уценки, которая выглядит следующим образом:
| 13/05/15 | 09:30-16:00 | 6.5 |
| 14/05/15 | 10:00-16:30 | 6.5 |
| 16/05/15 | 15:30-01:00 | 9.5 |
| 21/05/15 | 09:00-16:30 | 7.5 |
| 22/05/15 | 08:30-17:00 | 8.5 |
| 28/05/15 | 09:30-15:30 | 6 |
| 02/06/15 | 09:00-20:00 | 11 |
| 03/06/15 | 08:30-22:30 | 14 |
Я ищу способ быстро рассчитать сумму третьего столбца и вставить его в буфер. Решение, которое я имею в виду, будет использовать режим визуального блока (для выбора всех чисел) и, возможно, регистр выражений (для вычисления).
Возможно ли это с помощью собственных команд Vim? Если нет, есть ли плагин, который может мне помочь?
Ответы:
Я написал плагин: https://github.com/sk1418/HowMuch, который поддерживает визуальный выбор и выполняет математические вычисления.
По умолчанию плагин поддерживает три механизма оценки математических выражений: Gnu bc, python и vimscript. Вы можете сделать расчеты для определенного или позволить плагину автоматически выбрать один для вас.
Это работает с вашим примером следующим образом:
Для получения подробной информации, пожалуйста, прочитайте README на github.
источник
For details please read the README on github.
Даже если я нажимаю здесь нажатия клавиш для решения этой проблемы, я не понимаю, насколько это может быть полезно, это всего лишь 3 или 4 комбинации клавиш. Если мой сценарий действительно кому-то нужен, он все равно проверит детали.Если вы не хотите использовать плагины или перейти на скрипт bash, вы можете сделать что-то вроде следующего:
c-V {motions} "ay
скопировать столбец в"a
:let @a = substitute(@a, 'c-V c-J', '+', 'g')
заменить столбцы новыми строками+
ic-R=c-Ra
запустить замененный"a
регистр выраженийВ качестве альтернативы: сделайте запись истории выражений повторно используемой для дальнейших сумм столбцов
ctrl-V {motions} y
положить столбец в регистр янки""
ictrl-R=eval(substitute(@", '\n', '+', 'g'))
Повторяя для другого столбца:
ctrl-V {motion} y
(Без изменений)ictrl-R=<CR>
или, если вы сделали что-то еще с регистром выражения, прокрутите историю с помощью клавиши со стрелкой вверх (или с помощью,ctrl-P
если вы переназначили это):ictrl-R=<up>...<up><CR>
источник
"
вместо одинарных кавычек'
вsubstitute
команде. Знаете ли вы, есть ли причина для этого?Объяснение:
Я пробовал функцию, которая работает здесь:
Используя карту выше, все, что вам нужно сделать после загрузки в функцию, это выбрать числа, которые вы хотите суммировать, и использовать
<leader>s
для суммирования выбранной области.Объяснение функции:
Он использует
try/finally/endtry
экструдер для захвата ошибок.Если вы хотите попробовать эту функцию, сделайте следующее: Скопируйте эту функцию в браузере и запустите эту команду на vim,
:@+
это позволит вам:call SumVis()
нормально ее использовать .Вам нужно сделать визуальный выбор блока с помощью ctrl+ v, отменить выбор и, наконец, вызвать функцию. Или вы можете использовать предложенную карту, которая сама по себе удаляет выбор перед расчетом.
источник
Мой плагин CSV позволяет это. Используйте
:SumCol
команду и обязательно прочитайте документацию.источник
Создание плагина или кодирование этого в vimscript кажется немного тяжелым. Я верю в vim без плагинов и хорошую композицию с внешними инструментами.
Вот одноразовая команда, основанная на user2571881, которая работает, даже если буфер не был сохранен.
Если вы хотите сохранить эту команду для будущего использования, вы можете назвать ее:
Работает с визуальным отбором. Если вы выберете несколько строк и перейдете в командный режим, vim добавит к вашей команде префикс
:'<,'>
, который представляет собой диапазон строк для визуального выбора. Таким образом, вы можете запустить:и он будет суммировать только 3-й столбец выбранных строк. По умолчанию диапазон
%
, поэтомубудет суммировать 3-й столбец всех строк.
РЕДАКТИРОВАТЬ: Если вы хотите иметь возможность указать другие разделители полей и по умолчанию столбец считается до последнего, вы можете покрыть команду в
bash
и обрабатывать аргументы с ней, например так:Сейчас,
будет считать последний столбец таблицы с "|" разделители полей,
будет считать 3-й столбец таблицы с "|" разделители полей и
будет считать 3-й столбец таблицы с разделителями полей «+».
источник
SumColumn
vimrc, означает, что у вас просто есть «плагины» в вашем vimrc. Надеюсь, вы хорошо поддерживаете это со временем. Для меня плагины обеспечивают документацию, разделение на значимые части, используя преимущества других изобретательности. Я делаю вклад в апстрим, который улучшает удивительные плагины, которые никто не имеет времени, чтобы создать их все самостоятельно (кроме tpope). Разве вы не используете vim -round, vim-fugitive, vim-easy-align / vim-lion, vim-unimpaired, vim-commentary, ultisnips или ft-специфичные, такие как vim-go, vim-rails, vimtex?Если столбцы правильно выровнены, это можно сделать простым простым вкладышем.
CTRL-V
+ переместите курсорy
:echo eval(join(split(@", '\_s\+'), '+'))
разбивает текст на+
символы пробелов и новых строк, воссоединяет элемент с символом и вычисляет строку.+
и оценить::echo eval(substitute(@", "\n", '+', 'g'))
-eval()
это самое близкое кreduce
нам.Если нет, вам придется использовать другие приемы для подсчета полей. Например,
split(getline('.'), "[ \t|]\\+")
может использоваться для разделения столбцов из строки в вашем массиве. Оттуда это становится так же просто, как::echo eval(join(map(getline("'<", "'>"), { -> split(v:val, "[ \t|]\\+")[2] }), '+'))
Для того, чтобы избавиться от магических значений (номер поля - 1 и
+
), он может стать командойКоторый может быть использован с:
Примечание: здесь я использую лямбды из Vim 7.4.1xxx
источник
Vmap
++
из плагинаvmath
Дамиана КонвеяУстановите плагин из github (только 178 sloc), например
Добавьте отображение в ваш vimrc
Тем не менее, я бы предложил использовать что-то еще, например
gA
2f|
столбцу и выбрать столбец в режиме визуального блока<C-V>G$
++
(или выбранное вами отображение)s
)s
, например, с помощью"sp
Презентацию этого плагина смотрите в видео на YouTube Дамиана Конвея «Более мгновенно лучше Vim» - OSCON 2013 (начиная с 29-й минуты).
источник
Внешний инструмент Cli
csvstat
от CSVKITКраткое объяснение вариантов
-d DELIMITER
Разделительный символ входного CSV-файла. Here|
.-H
Укажите, что входной CSV-файл не имеет строки заголовка.-c COLUMNS
Разделенный запятыми список индексов столбцов или имен для изучения. По умолчанию все столбцы.--sum
Только выходные суммы.Этот инструмент также предоставляет минимальное, максимальное, среднее значение, медиану, стандартное отклонение, количество уникальных значений, список частых значений.
Вставить в файл с
Установка
В macOS csvkit доступен через homebrew и в Debian / Ubuntu и аналогично может быть установлен с помощью
$ sudo apt install csvkit
.источник