vim全局搜索当前目录

在vim中全局搜索特定word、函数名或变量是开发者常用的操作。本文分享了一个vimrc中的代码片段,通过<leader>g快捷键实现当前目录的搜索,搜索结果会显示在quickfix窗口中,方便查看和关闭。同时提到了一个升级版的方法,考虑了命名空间和临时寄存器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用vim操作是,总是希望能够全局搜索某个word,函数名或者变量。但一直没有找到很好的方法,最近vimscript的书发现了一种非常好的方法,贴出来供大家分享:

vimrc中的代码片段:

map <leader>0 :ccl<cr>                                                                                                                              
 nnoremap <leader>g :set operatorfunc=GrepOperator<cr>g@                                                                                             
 vnoremap <leader>g :<c-u>call GrepOperator(visualmode())<cr>                                                                                        
 function! GrepOperator(type)                                                                                                                        
     if a:type ==# 'v'                                                                                                                               
         normal! `<v`>y                                                                                                                              
      elseif a:type ==# 'char'                                                                                                                        
          normal! `[v`]y                                                                                                                              
      else                                                                                                                                            
          return                                                                                                                                   
     endif                                                                                                                                           
                                                                                                                                                      
     silent execute "grep! -R " . shellescape(@@) . " ."                                                                                             
      copen                                                                                                                                           
  endfunction   
leader就是我们常用的快捷键符号,比如我的是逗号。

使用时

可以viw选中单词,然后<leader>g进行当前目录查找,结果会在fix window中显示<leader>0 用于关闭查找结果。

或者使用vi选中想要查找的文字片段

或者<leader>giw选择文字

升级版(考虑命名空间和临时寄存器):

nnoremap <leader>g :set operatorfunc=<SID>GrepOperator<cr>g@
vnoremap <leader>g :<c-u>call <SID>GrepOperator(visualmode())<cr>

function! s:GrepOperator(type)
    let saved_unnamed_register = @@

    if a:type ==# 'v'
        normal! `<v`>y
    elseif a:type ==# 'char'
        normal! `[v`]y
    else
        return
    endif

    silent execute "grep! -R " . shellescape(@@) . " ."
    copen

    let @@ = saved_unnamed_register
endfunction




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值