当前位置: 首页 > news >正文

360浏览器打不开90设计网站购物商城网站开发

360浏览器打不开90设计网站,购物商城网站开发,广州市网站建设科技公司,网站开发工程师ppt简介:vimgrep 是 Vim 提供的「直接在指定文件集里用正则查找」的命令与外部 grep 不同,vimgrep 在查到结果后会将匹配行写入 快速修复列表(quickfix list),并可通过 :copen、:cnext、:cfirst 等命令逐条跳转支持 Vim 的正则引擎&a…

简介

  • :vimgrepVim 提供的「直接在指定文件集里用正则查找」的命令

  • 与外部 grep 不同,vimgrep 在查到结果后会将匹配行写入 快速修复列表(quickfix list),并可通过 :copen、:cnext、:cfirst 等命令逐条跳转

  • 支持 Vim 的正则引擎,允许灵活使用 Vim 正则、分组、魔法模式等

基本语法

:vimgrep[!] /{pattern}/[g][j] {file_pattern}[ ...]
  • !:表示清空当前 quickfix 列表;不带 ! 时会追加到现有列表

  • /…/Vim 正则模式,若包含 /,可改用其它分隔符,如 #…#

  • g:对匹配到多处的行,依然只在列表中记录一次;不加 g 时同一行多次匹配会重复记录

  • j:匹配后不跳转到第一个结果,仅更新列表不移动光标

  • {file_pattern}:文件通配符,支持 *, **(递归)、?

例 1:搜索当前目录下所有 .c 文件中包含 “TODO” 的行

:vimgrep /TODO/ *.c
  • 执行后,打开 quickfix 列表:
:copen
  • 跳到下一个匹配:
:cnext
  • 跳到上一个匹配:
:cprevious

文件搜索范围示例

场景命令示例说明
当前文件:vimgrep /error/ %% 表示当前缓冲区
所有文本文件:vimgrep /TODO/ *.txt当前目录下 .txt 文件
递归搜索子目录:vimgrep /function_name/ **/*.py所有 Python 文件
多个文件:vimgrep /pattern/ file1.txt file2.txt多个文件
多类型文件组合搜索:vimgrep /pattern/ **/*.cpp **/*.hC++ 头文件和源文件
所有缓冲区:vimgrep /pattern/ ##搜索所有打开的缓冲区

核心用法示例

基础搜索(当前目录指定文件)
:vimgrep "error" *.log  " 在当前目录所有.log文件中搜索"error"
递归搜索(包含子目录)

使用 ** 匹配所有子目录:

:vimgrep "func"**/*.py  " 在所有子目录的.py文件中搜索"func"
正则表达式搜索

支持 Vim 风格正则(如 \d 匹配数字,\w 匹配单词字符):

:vimgrep "age=\d+" **/*.html  " 搜索所有html中"age=数字"的模式
区分大小写 / 忽略大小写
  • 默认区分大小写

  • i 参数忽略大小写:

:vimgrep /Error/ig **/*.js " i = 忽略大小写,g = 全局匹配(每个文件找所有匹配)

结合快速修复列表(Quickfix)

  • 打开列表
:copen    " 在窗口下方打开 quickfix 窗口
:cclose   " 关闭 quickfix 窗口
  • 在列表中跳转
:cfirst   " 跳到第一个匹配
:clast    " 跳到最后一个匹配
:cnext    " 下一个
:cprevious" 上一个
:cc [nr]  " 跳到第 nr 条(不带 nr 跳到下一条)  
  • 在列表中执行批量操作

比如对所有匹配行做修改,可配合 :cfdo

:cfdo s/old/new/ge | update

这会对 quickfix 中的每个文件执行替换并保存。

  • 快捷键映射(加入 ~/.vimrc 提升效率):
nnoremap <F8> :copen<CR>     " F8 打开 Quickfix
nnoremap <F9> :cclose<CR>    " F9 关闭
nnoremap <F10> :cnext<CR>    " F10 下一项
nnoremap <F11> :cprev<CR>    " F11 上一项

常用选项和技巧

  • 只列出文件名
:vimgrep /pattern/ **/*.py | cw

然后在 quickfix 窗口里可以只关注文件名列。

  • 使用非常规分隔符

当搜索模式里包含 / 时,用其它符号:

:vimgrep #{foo/bar}# **/*.js
  • 只更新列表、不跳转
:vimgrep j /TODO/ **/*.java

搜索后光标不动,便于接着做别的。

  • 区分大小写

Vim 默认受 ignorecasesmartcase 影响,你可临时加 \C 强制大小写敏感,或 \c 强制忽略大小写:

:vimgrep /\CError/ **/*.log
  • :args/argdo 配合

先加载参数列表:

:args **/*.md

vimgrep 并跳转:

:vimgrep /TODO/ % | copen

高级技巧与性能优化

结合通配符精确筛选文件
:vimgrep "config" **/*.{json,yml}  " 搜索所有子目录的.json和.yml文件
将结果保存到文件
:vimgrep "todo"**/*.php | :cwrite todo_list.txt  " 搜索结果保存到todo_list.txt
批量替换搜索结果

结合 cdo 命令(对快速修复列表中的每个文件执行命令):

:vimgrep "old_str" **/*.py  " 先搜索目标字符串
:cdo %s/old_str/new_str/g | w  " 对所有匹配文件执行替换并保存
自定义快捷键

.vimrc 中配置快捷键,简化操作:

nnoremap <leader>vg :vimgrep // **/*.<C-R>=expand('%:e')<CR><Left><Left>

<leader>vg 后,自动填充当前文件类型的搜索模板,直接输入关键词即可

限制搜索范围
" 只在修改过的文件中搜索
:vimgrep /warning/ `bufname()`  " 当前缓冲区
:vimgrep /bug/ `expand('%:p:h')/*.c`  " 当前目录
性能优化
" 忽略大目录(如 node_modules)
:set wildignore+=*/node_modules/*
:vimgrep /pattern/ **/*.js      " 自动跳过忽略目录
正则表达式转义

Vim 的正则语法与 Perl/PCRE 不同,需注意 \v(非常魔术模式)简化语法。

:vimgrep /\v<word>/ *.txt
多文件编辑:

结合 :argdo:bufdo 进行批量操作

:argadd *.c
:argdo vimgrepadd /TODO/ % | cdo s/TODO/DONE/g | update
添加全局忽略配置

修改 .vimrc 文件

set wildignore+=*.o,*.obj,.git
lvimgrep 替代方案

使用 :lvimgrep 将结果存入 Location List(窗口局部列表),适用于多窗口并行搜索:

:lvimgrep /warning/ **/*.log  
:lopen   " 打开 Location List
:lnext 
加速 vimgrep 性能
  • 问题:vimgrep 需模拟打开每个文件,大项目较慢

  • 优化:

    • 使用 :noautocmd 跳过插件/事件干扰:
    :noautocmd vimgrep /pattern/ **/*.js
    
    • 换用外部 grep(需配置):
    :set grepprg=grep\ -nri\ --include=*.{c,h}   定义外部 grep 参数
    :grep "function_name" .                     调用外部 grep    
    

区别::vimgrep vs :grep

:vimgrep:grep
搜索引擎Vim 自带正则调用外部程序(如 grep、ack、rg 等)
性能较慢(对小项目足够)快(尤其用 ripgrep 等现代搜索工具)
快速修复列表默认输出到 quickfix:grepprg 设置或 :make 设置才可输出
正则语法Vim 正则(魔法模式、分组语法不同)外部工具的正则(POSIX / PCRE / Rust regex 等)

如果更喜欢 rg、ag 的速度并想结合 quickfix,只需在 .vimrc 中:

set grepprg=rg\ --vimgrep\ --no-heading\ --smart-case
set grepformat=%f:%l:%c:%m

这样用 :grep 就等同于 :vimgrep 加速版。

进阶:批量替换与脚本化

全项目批量替换
:vimgrep /foo()/ **/*.cpp
:cfdo %s/foo()/bar()/g | update
在 Vim 脚本中使用
function! ReplaceInProject(pat, rep)execute 'vimgrep /'.a:pat.'/j **/*.js'copenexecute 'cfdo %s/'.a:pat.'/'.a:rep.'/g | update'cclose
endfunction" 用法:
:call ReplaceInProject('oldFunc', 'newFunc')

实战示例

案例 1:项目级重构
" 查找所有使用旧 API 的地方
:vimgrep /\<old_api_call\>/ **/*.c
:copen   " 查看结果并手动验证
:cfdo %s/old_api_call/new_api_call/g | update
案例 2:日志分析
" 在所有日志中提取 ERROR 行
:vimgrep /^$$ERROR$$/ /var/log/*.log
:copen
" 在 quickfix 窗口按 : 输入:
:cfdo g/^$$ERROR$$/yank A | put! A 将所有错误复制到新缓冲区
http://www.dtcms.com/a/494202.html

相关文章:

  • 贵州茅台酒股份有限公司网站门户网站都有哪些内容
  • 学校微网站模板单位网站建设实施方案
  • 盐城公司网站建设电话商标设计生成器
  • 建立网站请示网站营销策略
  • 邯郸移动网站建设费用win的wordpress
  • 呼和浩特网站推广建设电器网站目的及功能定位
  • 个人网站实现与设计论文海淀网站开发公司
  • 标准网站有哪些郑州市网站和公众号建设
  • 全景网站如何做网站底部优化字
  • 心理咨询网站开发网上注册公司营业执照流程
  • 招聘网站哪个好手机网站怎么制作
  • 推广平台网站公司建设网站记什么费用
  • 广州站在哪里产品设计和工业设计有什么区别
  • p2p金融网站开发方案将wordpress压缩包解压至一个空文件夹_并上传它.
  • 网站开发策划个人简历精通网站建设 百度云
  • 建设优化一个网站步骤网页设计个人页面
  • 网站的建设 教学计划wordpress 跳转首页
  • 盐城网盐城网站建设站建设武侯区网站建设哪里好点
  • 网站建设的技术阶段怎样凡科建设网站
  • 手机建设网站目的怎么修改网站标题关键词描述
  • 论坛外链代发湖南网站建设seo
  • 唐山做网站建设公司怎么做刷网站流量生意
  • 深圳网站建设哪家好网站图片自动切换怎么做
  • 网站建设与维护的选择题外贸网站建设可以吗
  • 在线网站建设价值学院网站制度建设
  • 海外sns网站网站建设实训心得及收获
  • 中国网站服务器哪个好齐齐哈尔市网站建设
  • 做兼职打字员的网站网站建设的结构
  • 优秀的个人网站阿里云备案个人可以做网站吗
  • 中国知名网站建设公司沈阳无痛人流大概多少费用