Использование регистра в отображении .vimrc - PullRequest
0 голосов
/ 01 марта 2019

Я выполняю работу, связанную с несколькими модификациями файлов шаблонов HTML, в которых значения, подлежащие замене, обозначаются в шаблоне с помощью токенов, таких как «%% ARTICLE_DATE».Я хотел бы использовать регистры vim "+" или "*" (буфер обмена, X-буфер обмена) в отображении в моем .vimrc для настройки поиска по значению в буфере обмена.Например:

cmap <esc>q %s/%%ARTICLE_DATE/<something>/c

Так что, если бы у меня было «12 июня 2016» в моем X-буфере обмена из другого приложения, я мог бы нажать клавишу Esc-q и иметь

:%s/%%ARTICLE_DATE/June 12, 2016/c

в моемКомандная строка vim, и я могу нажать Enter и выборочно заменить соответствующие токены.Есть ли функциональное представление содержимого буфера обмена, которое я мог бы использовать для , что бы сделать это?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

@ DJMcMayhem ответил на ваш прямой вопрос.Однако это не похоже на Vim, и использование cmap сложно, поскольку они расширяются в неожиданных местах (например, /<esc>q).

Создайте команду

Создайте команду, котораясделать это довольно просто.

command! -range=% -nargs=+ TemplateReplace keeppaterns <line1>,<line2>s/<args>/\=@*/gc

Теперь вы можете сделать :TemplateReplace %%ARTICLE_DATE, и он заменит регистр "*.

Использование :s и сопоставлений

Используйте сопоставление, которое создает команду подстановки из текущего шаблона поиска.

nnoremap gS :<c-u>%s//\=@*/gc<cr>

Установите шаблон поиска (например, /%%ARTICLE_DATE, затем используйте gS.

или возьмитезарегистрируйте в качестве аргумента:

nnoremap gS :<c-u>%s//\=getreg(v:register)/gc<cr>

Используйте "*gS для замены текущего шаблона поиска содержимым регистра, в этом случае это будет "* регистр.

Отображение Visual Star

Используйте отображение визуальная звезда , как показано ниже, чтобы упростить настройку шаблона поиска.

xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>``

Теперь вы можете визуально выбрать текст, а затем использовать * для установкишаблон поиска.

Используйте движение gn

Установите шаблон поиска (eг /%%ARTICLE_DATE) затем сделать cgn<c-r>*<esc>.Теперь вы можете использовать n и . для замены.

Vimcasts эпизод: Работа с поиском совпадений с использованием gn .

Этот подход также выиграл бы от визуального сопоставления звезд.

Предварительный просмотр замещения с помощью traces.vim

Traces.vim позволит вам предварительно просмотреть замещение во время записи.Это.Вроде как 'incsearch', но для :s.Это не поможет вам напрямую решить вашу текущую проблему, но может помочь дать обратную связь и выявить ошибки в будущем.

0 голосов
/ 01 марта 2019

Есть два разных способа сделать это.

  1. Простой способ:

    cmap <esc>q %s/%%ARTICLE_DATE/<C-r>*/c
    

    Здесь не используются какие-либо хитрые трюки.Он просто использует клавишу <C-r> для вставки содержимого регистра.

  2. Надежный способ:

    cmap <expr> <esc>q "%s/\V%%ARTICLE_DATE/".escape(getreg("*"), "\\/")."/c"
    

    Используется отображение "expr", котороеозначает, что он будет оценивать vimscript в строку и запускать эту строку как отображение.Это имеет некоторые дополнительные возможности, чтобы убедиться, что, если у вас есть косая черта (вперед или назад) в вашем регистре, это не испортит поиск.

...