vi,vimrc中的条件

时间:2016-02-19 12:25:42

标签: vim file-type

我正在尝试个性化我的~/.vimrc文件。

这就是我想要的:当用vi打开的文件名是titi45.tex时,当我在正常模式下按<space>时,我想要命令make toto45 被执行。如果使用vi打开的文件名为titi65.tex,我希望如此 执行make toto65,依此类推。

我尝试使用命令

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

在我的.vimrc中,但我不知道如何匹配文件名并使用该号码。

你能帮助我吗?

马修

2 个答案:

答案 0 :(得分:3)

您正在寻找:make %<。 BTW你为什么不在vim中编译?避免使用:!make。首选:make,然后查看与quickfix模式相关的帮助(:h quickfix)。

您的映射将是:

nnoremap <buffer> <silent> <space> :update<cr>:make %<<cr>

<buffer>部分非常重要,它确保您的映射不会泄漏到其他文件类型;另一个在这里并不重要,但是很好的做法)

编辑:对不起,我错过了确切的要求。

然后,您将必须转换目标名称。您将使用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>

注意:我还没有测试过。

如果你想摆脱扩展,最好在expand()参数中完成。

答案 1 :(得分:0)

...坎 最后我使用了一个额外的脚本

#!/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启动。