Вы ищете :make %<
. Кстати, почему вы не компилируете в vim? Избегайте :!make
. Предпочитайте :make
и проверьте справку, связанную с режимом быстрого исправления (:h quickfix
).
Ваше отображение будет тогда:
nnoremap <buffer> <silent> <space> :update<cr>:make %<<cr>
(<buffer>
часть очень важна, она делает, что ваше отображение не будет течь к другим типам файлов, а другие не имеют решающее значения здесь, но хорошие практики)
EDIT: Извините, я пропустил точное требование.
Затем вам нужно будет преобразовать целевое имя. Вы будете играть с substitute()
и :exe
. Но ваша замена не будет простой заменой. Это похоже на вращающуюся замену. Там были описаны решения для такого рода замещения: How do I substitute from a list of strings in VIM? И IIIRC существует плагин, который делает подобные вещи.
В вашем случае, я думаю, я хотел бы использовать словарь, чтобы определить, каким образом имена заменяются:
let k_subs = { 'toto': 'titi', 'titi': 'toto' }
nnoremap <buffer> <silent> <space> :update<cr>:exe 'make '.substitute(expand('%'), join(keys(k_subs), '\|'), '\=k_subs[submatch(0)]', '')cr>
NB: Я не проверял.
Если вы хотите избавиться от расширения, лучше сделать это в аргументе expand()
.
У меня есть несколько причин, почему я не хочу компилировать в vim. Будь осторожен! с файлом titi87.tex, я хочу выполнить 'make toto87.tex' (а не' make titi87'). И я НЕ хочу ничего выполнять с файлом tutu87.tex (например). Итак, ваше картографирование не подходит ... – user5951046
> «Помощник милосердия, Люк !!!» Avec plaisir. –