Если текущее имя файла не содержит символов, которые следует экранировать из-за
к синтаксису шаблона Vim (см. :help pattern
), тогда можно просто набрать
/
Ctrl + R %
В противном случае необходимо подготовить текущее имя файла, поместить его в последний
регистр поиска,
:let @/ = '\V' . escape(expand('%:p:h'), '\')
и введите команду поиска вручную, используя n
/ N
, /
Введите или
?
Введите . Чтобы уменьшить объем печати, сопоставления, объединяющие эти шаги, могут быть
введено.
nnoremap <expr> <leader>f/ ExpandSearch('/')
nnoremap <expr> <leader>f? ExpandSearch('?')
function! ExpandSearch(dir)
let @/ = '\V' . escape(expand('%:p:h'), '\')
return a:dir . "\r"
endfunction
Существует также аналогичный Ctrl + R % , но больше
общая функция расширения командной строки, регистр выражений. Можно набрать
Ctrl + R = при редактировании шаблона поиска введите
выражение (см. :help expression
), и результат его оценки будет
вставлен прямо в место, где Ctrl + = нажатие клавиши
был нажат. К сожалению, помимо обычных проблем с выходом, решенных выше
с атомом \V
и вызовом escape()
этот способ расширения создает новый
один. Поскольку путь вставляется в интерактивном режиме, необходимо также экранировать
символ, используемый для запуска команды поиска (/
или ?
). К сожалению, это
невозможно защитить вхождения обоих этих символов независимо от
направление поиска: побег ?
в прямом поиске превращает вопрос
отметьте в \?
атоме, искажающем образец.