2016-02-19 3 views
0

Я пытаюсь настроить свой файл ~/.vimrc.vi, condition in vimrc

Вот что я хочу: когда имя файла, открываемого с ВП titi45.tex, и когда я нажимаю <space> в нормальном режиме, я хочу, чтобы команда make toto45 выполняется. И если файл, открытый с vi, называется titi65.tex, я хочу, чтобы был выполнен make toto65 и так далее.

Я пытался использовать команду

au FileType tex nmap <space> :w<CR>:!make<CR><CR> 

в моем .vimrc но я не знаю, как совпадать с именем файла и использовать номер.

Вы можете мне помочь?

Матье

ответ

3

Вы ищете :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().

+0

У меня есть несколько причин, почему я не хочу компилировать в vim. Будь осторожен! с файлом titi87.tex, я хочу выполнить 'make toto87.tex' (а не' make titi87'). И я НЕ хочу ничего выполнять с файлом tutu87.tex (например). Итак, ваше картографирование не подходит ... – user5951046

+0

> «Помощник милосердия, Люк !!!» Avec plaisir. –

0

Hum ... наконец я использую additionnal скрипт

#!/bin/bash 

maRegex='source_(enonce|corrige)([0-9]+)$' 

if [[ "${1}" =~ $maRegex ]] 
then 
     commande="make enonce${BASH_REMATCH[2]}" 
else 
     commande="make plouf" 
fi 

echo commande de compilation lancée: $commande 
$commande 

Этот скрипт запущен в vimrc.