”删除C++风格注释 nmap\uS/^[\t]*\/\/==:nohls “注释行,C++风格 nmap-:s/^[\t]*/\/\/==:nohls,search,macros,vim,Search,Macros,Vim" /> ”删除C++风格注释 nmap\uS/^[\t]*\/\/==:nohls “注释行,C++风格 nmap-:s/^[\t]*/\/\/==:nohls,search,macros,vim,Search,Macros,Vim" />

Search 搜索“;“未经记录”;在Vim中,或从搜索历史记录中删除搜索模式? 我在我的.VRIMRC可爱的小宏中添加/删除代码中的C++风格注释: " remove c++ style comment nmap _ :s/^[ \t]*\/\///<CR>==:nohls<cr> " comment line, c++ style nmap - :s/^[ \t]*/\/\/ /<CR>==:nohls<cr> “代码>”删除C++风格注释 nmap\uS/^[\t]*\/\/==:nohls “注释行,C++风格 nmap-:s/^[\t]*/\/\/==:nohls

Search 搜索“;“未经记录”;在Vim中,或从搜索历史记录中删除搜索模式? 我在我的.VRIMRC可爱的小宏中添加/删除代码中的C++风格注释: " remove c++ style comment nmap _ :s/^[ \t]*\/\///<CR>==:nohls<cr> " comment line, c++ style nmap - :s/^[ \t]*/\/\/ /<CR>==:nohls<cr> “代码>”删除C++风格注释 nmap\uS/^[\t]*\/\/==:nohls “注释行,C++风格 nmap-:s/^[\t]*/\/\/==:nohls,search,macros,vim,Search,Macros,Vim,这些工作原理是用另一个线条图案替换线条图案的开头。在一种情况下添加//在另一种情况下删除斜杠(如果找到) 我遇到的问题是,这些宏使用搜索和替换。结果,不需要的搜索模式被保存到vim的搜索历史中,使其变得混乱 考虑以下顺序: 搜索“你好” 使用宏注释一行 再次搜索(通过键入“n”或/,键入up,输入) 结果:搜索不查找“hello”,因为搜索模式设置为宏使用的任何宏,即^[\t]* 如何修改此宏以不将不需要的模式注入搜索历史记录 使用let old=@/保存当前搜索寄存器 做你的事 使用调用his

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

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

考虑以下顺序:

  • 搜索“你好”
  • 使用宏注释一行
  • 再次搜索(通过键入“n”或/,键入up,输入)
  • 结果:搜索不查找“hello”,因为搜索模式设置为宏使用的任何宏,即^[\t]*
  • 如何修改此宏以不将不需要的模式注入搜索历史记录

  • 使用
    let old=@/
    保存当前搜索寄存器
  • 做你的事
  • 使用
    调用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>
    
    “代码>”删除C++风格注释 nnoremap:let old=@/s/^[\t]*\/\/==:nohlscall histdel('/',-1)let@/=old “注释行,C++风格 nnoremap-:let old=@/s/^[\t]*/\/\/==:nohlscall histdel('/',-1)let@/=old
    或者使用Tim Pope的。

    最近的VIM具有
    :keeppattern
    修饰符,可以防止模式添加到历史记录中。

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

    请参阅
    :help histdel()
    。请参阅此处的“Preserve”函数:这很完美,正是我想要的。谢谢另外,我觉得“评论”非常有用,我想从现在起我会使用它。我唯一的问题是,它在切换注释时清除了多行选择。通过添加一个仅在可视模式下运行的“gv”命令,可以很容易地解决这个问题。例如:nmap-gcc-vmap-gcgv
    :keeppattern
    修饰符是否也保存搜索模式标志?替换旗呢?我认为那会很好。它不会保存任何东西,而是防止历史被污染。使用它会防止搜索标志被污染吗?e、 g.搜索类似于
    /foo/e
    的东西,然后如果我运行一个类似的
    :keeppattern/baz
    我的下一个
    n
    /foo/e
    还是仅仅
    /foo
    ?它将跳转到/foo。似乎仍然存在一些错误。应通过修补程序7.4.150和7.4.155修复。请注意,从可视模式调用
    :search()
    等命令将退出该模式,从而释放选择。在同一宏中调用它类似于
    v`>
    v`