繁体   English   中英

在Vim中搜索“off the record”,或从搜索历史中删除搜索模式?

[英]Search “off the record” in Vim, or remove search pattern from search history?

我在我的.vrimrc可爱的小宏中添加/删除代码中的c ++样式注释:

" remove c++ style comment
nmap _ :s/^[ \t]*\/\///<CR>==:nohls<cr>
" comment line, c++ style
nmap - :s/^[ \t]*/\/\/ /<CR>==:nohls<cr>

这些工作通过用另一个替换线条图案的开头。 在一种情况下添加//和在另一种情况下删除斜杠(如果找到)。

我遇到的问题是那些宏使用搜索和替换。 结果,不需要的搜索模式被保存到vim的搜索历史中,使其混乱。

考虑一下顺序:

  1. 搜索'你好'
  2. 使用宏来注释一行
  3. 再次搜索(输入'n'或/,keyup,输入)
  4. 结果:搜索不查找“hello”,因为搜索模式设置为宏使用的任何内容,即^ [\\ t] *

如何修改此宏以不将不需要的模式注入搜索历史记录?

最近的:keeppattern:keeppattern修饰符,它将阻止模式添加到历史记录中。

  1. 使用let old = @/保存当前搜索寄存器,
  2. 做你的事,
  3. 使用call histdel('/', -1)删除历史记录中的最后一个搜索,
  4. 使用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>

或者使用蒂姆波普的评论

此外,还有一个search()函数,它不会触及搜索历史记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM