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

 SOCHUNGKWAN 发布于 2023-02-03 12:21

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

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

这些工作通过用另一个替换线条图案的开头.在一个案例中添加//,在另一个案例中删除斜杠(如果找到).

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

考虑一下顺序:

    搜索'你好'

    使用宏来注释一行

    再次搜索(输入'n'或/,keyup,输入)

    结果:搜索不查找"hello",因为搜索模式设置为宏使用的任何内容,即^ [\ t]*

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

2 个回答
    1. 保存当前搜索寄存器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>
    

    或者使用蒂姆波普的评论.

    2023-02-03 12:24 回答
  • 最近的Vims有:keeppattern修饰符,它将阻止模式添加到历史记录中.

    2023-02-03 12:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有