Поиск и замена содержимого восстановленного текста в vim - PullRequest
0 голосов
/ 16 ноября 2018

В моем vimrc у меня есть ярлык, чтобы скопировать имя файла с его путем к буферу обмена.

:nmap cp :let @* = expand("%")

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

1) replace \ with /  
2) remove certain words from the yanked text.

. Я знаком с поиском и заменой обычного текста, но я не знаю, как изменить свою запись в vimrc, чтобы делать это каждый раз при включении.дерганный текст, когда я использую свой ярлык.

Итак, что-то вроде этого?

:nmap cp :let @* = expand("%") || %s/\\/\/ || %s/<word>//

Я использую gvim для Windows.

1 Ответ

0 голосов
/ 16 ноября 2018

Команда :substitute работает с самим содержимым буфера;это не так полезно здесь.(Вы можете временно :put имя регистра / файла, преобразовать его, а затем :delete вернуть (обратно) в регистр.) К счастью, есть эквивалентная низкоуровневая функция :help substitute(), которую вы можетеможет применяться к строке:

:nnoremap cp :let @* = substitute(expand("%"), '\\', '/', 'g')<CR>

На самом деле, expand() напрямую поддерживает специальную подстановку :help filename-modifiers, так что это тоже будет (довольно неясное) решение:

:nnoremap cp :let @* = expand("%:gs?\\?/?")<CR>

Для дополнительного удаления <word> вы можете использовать другой слой substitute() / добавить еще один :gs???.Я оставлю это вам.

Дополнительная критика

  • В вашем отображении отсутствует завершающий <CR> для завершения режима командной строки.
  • Вы должны использовать :noremap;это делает отображение невосприимчивым к переназначению и рекурсии.
  • % относительно текущего рабочего каталога.Если вам нужен полный абсолютный путь, вы можете получить его через %:p.
  • . Начать отображение с c нетрадиционно.Здесь все хорошо, потому что команда c hange хочет {motion}, а p не является допустимым.В общем, я бы предпочел избежать такой умной перегрузки (если у вас есть другие неиспользуемые префиксы сопоставления, все еще доступные).
...