Учитывая ряд строк, которые выглядят примерно так:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar.
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct.
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr.
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun.
Есть ли способ, которым я мог бы взять эти первые четыре символа (год) и скопировать их в конец строки, чтобы это выглядело так:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2001
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2002
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2003
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. 2004
:%g/^\d\{4}\d\@!/s/^\(\d\{4}\).*\zs/ \1/
.Ответы:
это один из способов сделать это
\v
магический вариант, чтобы избежать необходимости избегать группировки()
^
начало строки\d{4}
соответствует ровно четырем цифрам.*
остаток строки\1
\2
имеет согласованный рисунок в()
edit: @Jair Lopez упоминает в комментариях, регулярное выражение может быть улучшено:
или эквивалент
&
и\0
содержит весь подобранный образецДля дальнейшего чтения, vimregex и regex FAQ
источник
:%s/\v^(\d{4}).*/& \1/
будет более короткая команда.И решение с макросом:
Что значит:
Затем вы можете воспроизвести макрос столько раз, сколько у вас есть строка
3@a
.Редактировать Как @evilsoup упомянул это в комментариях, более эффективный способ выполнить макрос во всех строках буфера - использовать:
Конечно, вы можете заменить
%
его диапазоном, описывающим строки, которые нужно изменить.источник
:%normal @q
Вот способ, которым я бы сделал это:
Объяснение:
источник
Если у вас есть доступ к стандартным командам UNIX, вы можете использовать
AWK
:источник
:help filter
что это встроенная функция Vim, и учитывая, насколько хорошо эта функция позволяет Vim вписываться в парадигму UNIX, я бы сказал, что на самом деле это очень vi / vim.Я думаю, что существующие механизмы для этого лучше, но это также возможно сделать, используя режим визуального блока .
Скопируйте даты:
Заполните конец первой строки:
Вставить:
источник
4l
вместоllll
Из командной строки Unix (или Windows, если у вас установлены инструменты командной строки Unix)
источник