vi,vimrc 中的条件
vi, condition in vimrc
我正在尝试个性化我的 ~/.vimrc
文件。
这是我想要的:当用vi打开的文件名是titi45.tex
,当我在正常模式下按<space>
时,我想要命令make toto45
被执行。如果用 vi 打开的文件名为 titi65.tex
,我想要那个
make toto65
被执行,以此类推。
我尝试使用命令
au FileType tex nmap <space> :w<CR>:!make<CR><CR>
在我的.vimrc
中,但我不知道如何匹配文件名和使用数字。
你能帮帮我吗?
马修
您正在寻找 :make %<
。顺便说一句,你为什么不在 vim 内编译?避免 :!make
。首选:make
,并查看与快速修复模式相关的帮助(: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()
参数中完成。
嗯...
最后我使用了一个额外的脚本
#!/bin/bash
maRegex='source_(enonce|corrige)([0-9]+)$'
if [[ "" =~ $maRegex ]]
then
commande="make enonce${BASH_REMATCH[2]}"
else
commande="make plouf"
fi
echo commande de compilation lancée: $commande
$commande
此脚本由 vimrc 启动。
我正在尝试个性化我的 ~/.vimrc
文件。
这是我想要的:当用vi打开的文件名是titi45.tex
,当我在正常模式下按<space>
时,我想要命令make toto45
被执行。如果用 vi 打开的文件名为 titi65.tex
,我想要那个
make toto65
被执行,以此类推。
我尝试使用命令
au FileType tex nmap <space> :w<CR>:!make<CR><CR>
在我的.vimrc
中,但我不知道如何匹配文件名和使用数字。
你能帮帮我吗?
马修
您正在寻找 :make %<
。顺便说一句,你为什么不在 vim 内编译?避免 :!make
。首选:make
,并查看与快速修复模式相关的帮助(: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()
参数中完成。
嗯... 最后我使用了一个额外的脚本
#!/bin/bash
maRegex='source_(enonce|corrige)([0-9]+)$'
if [[ "" =~ $maRegex ]]
then
commande="make enonce${BASH_REMATCH[2]}"
else
commande="make plouf"
fi
echo commande de compilation lancée: $commande
$commande
此脚本由 vimrc 启动。