我在我的.vrimrc可爱的小宏中添加/删除代码中的c ++样式注释:
" remove c++ style comment nmap _ :s/^[ \t]*\/\///==:nohls " comment line, c++ style nmap - :s/^[ \t]*/\/\/ / ==:nohls
这些工作通过用另一个替换线条图案的开头.在一个案例中添加//,在另一个案例中删除斜杠(如果找到).
我遇到的问题是那些宏使用搜索和替换.结果,不需要的搜索模式被保存到vim的搜索历史中,使其混乱.
考虑一下顺序:
搜索'你好'
使用宏来注释一行
再次搜索(输入'n'或/,keyup,输入)
结果:搜索不查找"hello",因为搜索模式设置为宏使用的任何内容,即^ [\ t]*
如何修改此宏以不将不需要的模式注入搜索历史记录?
保存当前搜索寄存器let old = @/
,
做你的事,
删除历史记录中的最后一次搜索call histdel('/', -1)
,
恢复搜索寄存器let @/ = old
.
像这样:
" remove c++ style comment nnoremap <silent> _ :let old = @/<bar>s/^[ \t]*\/\///<CR>==:nohls<bar>call histdel('/', -1)<bar>let @/ = old<cr> " comment line, c++ style nnoremap <silent> - :let old = @/<bar>s/^[ \t]*/\/\/ /<CR>==:nohls<bar>call histdel('/', -1)<bar>let @/ = old<cr>
或者使用蒂姆波普的评论.
最近的Vims有:keeppattern
修饰符,它将阻止模式添加到历史记录中.