如何在Vim中映射按键插入符合要求的Subversion提交日志行
实现Vim一键插入符合格式的SVN历史提交行
我刚好也遇到过类似的SVN提交格式校验需求,给你分享几个实用的Vim映射方案,完美解决你的问题:
方法一:直接读取命令输出到光标下方(最简单)
如果你习惯把历史行插入到当前光标下方,直接用:r !命令配合映射就行。比如把<F5>设置为触发键,在你的~/.vimrc(Windows系统是_vimrc)里添加:
" 正常模式下触发,插入到光标下方 nnoremap <F5> :r !svn log --limit 1 | grep "你的格式匹配规则"<CR> " 插入模式下触发,不用切换模式 inoremap <F5> <Esc>:r !svn log --limit 1 | grep "你的格式匹配规则"<CR>a
替换你的格式匹配规则为实际的校验格式,比如你的提交首行是FEATURE-XXX:开头,就改成grep "^FEATURE-"。
方法二:插入到当前光标位置(更精准)
如果你想直接把内容粘贴到光标所在位置,而不是下方,可以借助Vim寄存器实现:
nnoremap <F5> :let @a = system('svn log --limit 1 | grep "你的格式匹配规则"')<CR>pa
这个命令会先把SVN日志的筛选结果存入a寄存器,然后用p把内容粘贴到光标后面(换成P就是粘贴到光标前面)。
小技巧:优化筛选逻辑
如果grep不够灵活,比如需要提取首行且符合格式,用awk更精准:
nnoremap <F5> :r !svn log --limit 1 | awk '/^你的格式前缀/{print;exit}'<CR>
比如格式前缀是TASK-,就写/^TASK-/,awk会找到第一行匹配的内容就退出,避免多余输出。
设置完后,下次用svn commit打开Vim编辑提交信息时,按下对应的按键(比如<F5>),符合格式的历史提交行就自动插入了,再也不用手动复制粘贴啦!
内容的提问来源于stack exchange,提问作者justynnuff
相关产品推荐
相关产品推荐

