IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Vim plugin GrepIt -> 正文阅读

[开发工具]Vim plugin GrepIt

作者:treeSkill

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Filename: ?? ?grepit.vim
"功能: ?? ??? ?依据文件类型, 在一系列同类型的文件中查找关键字符串
"author:?? ?hjjdebug
"date: ??? ?2022年 07月 29日 星期五 10:07:02 CST
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if exists("g:grepit_loaded")
? finish
endif
let g:grepit_loaded=1?? ??? ??? ??? ?"避免重复加载

"设置3个全局bool变量,是否高亮搜索词,是否跳转到第一条匹配,是否打开quickfix窗口
function! s:CfgHightlightSearch()
? if exists('g:grepit_hlsearch')
??? return g:grepit_hlsearch
? endif
? return 1
endfunction

function! s:CfgGotoFirstMatch()
? if exists('g:grepit_goto_first_match')
??? return g:grepit_goto_first_match
? endif
? return 1
endfunction

function! s:CfgOpenQuickFix()
? if exists('g:grepit_open_quickfix')
??? return g:grepit_open_quickfix
? endif
? return 1
endfunction

"获取搜索的选项
function! s:CfgOption()
?? ?if exists('g:grepit_option')
?? ??? ?return g:grepit_option
?? ?endif
?? ?return ""
endfunction
"设置搜索选项
function! s:CfgSetOption()
?? ?if !exists('g:grepit_option')
?? ??? ?let g:grepit_option=''
?? ?endif
?? ?let g:grepit_option = input("grep option:-w -i etc:",g:grepit_option)
?? ?echo "\nGrepIt option:" . g:grepit_option
endfunction


"构成一个原始的语言map
"每个语言对应一系列文件后缀
"language : extentions
let s:lang_map = {
? \ "cpp" : "h,cpp,c,s,S" ,
? \ "S" : "s,S" ,
? \ }

"获取语言map
function! s:CfgLangeMap()
? let l:lang_map = s:lang_map
? if exists("g:grepit_lang_map")
??? extend(l:lang_map, g:grepit_lang_map)
? endif
? return l:lang_map
endfunction

"根据文件后缀及语言map, 获取语言(搜索)
function! s:GetLanguage(extension, lang_map)
? for [l:language, l:extensions] in items(a:lang_map)
??? for l:candidate in split(l:extensions, ",")
????? if l:candidate == a:extension
??????? return l:language
????? endif
??? endfor
? endfor

? return ""
endfunction

"根据语言及map, 构建所有后缀列表
function! s:GetExtensions(languages, lang_map)
? let l:extensions = ""
? for l:lang in a:languages?? ??? ??? ??? ??? ??? ?"从一系列语言中构成所有的搜索文件后缀
??? let l:lang_extensions = get(a:lang_map, l:lang, "")?? ??? ?"获取语言对应的文件后缀
??? if l:lang_extensions == ""
????? let l:lang_extensions = tolower(expand("%:e")) "若无语言后缀,令文件后缀为语言后缀
??? endif
??? if strlen(l:extensions) > 0
????? let l:lang_extensions = "," . l:lang_extensions
??? endif
??? let l:extensions = l:extensions . l:lang_extensions?? ??? ?"将文件后缀合成
? endfor
? return l:extensions
endfunction

"根据后缀列表构建搜索参数
function! s:GetGrepParams(needle, extensions)
? let l:params = "-R"
? let l:params = l:params . ' ' . s:CfgOption()
? for l:extension in split(a:extensions, ",")
??? let l:params = l:params . " --include=*." . l:extension
? endfor

? return l:params . " " . shellescape(a:needle ) . " ."
endfunction

"根据后缀列表和搜索词进行搜索
function! s:GrepItInExtensions(extensions, needle)
? let l:params = s:GetGrepParams(a:needle, a:extensions)
? let l:commandline = ""
? if s:CfgGotoFirstMatch()
??? let l:commandline = "grep"
? else
??? let l:commandline = "grep!"?? ??? ?"不跳转到第一条
? endif

? let l:extlist = join(split(a:extensions, ","), "|")
? echo "Searhing for" shellescape(a:needle) "in *.(" . l:extlist . ")"
? silent execute l:commandline . " " . l:params

? if s:CfgHightlightSearch()
??? let @/ = a:needle
??? set hlsearch
? endif
? if len(getqflist()) == 0
??? echo "Nothing found"
??? return
? endif
? if s:CfgOpenQuickFix()
??? botright copen " Quickfix always occupies the entire bottom of the window
? endif
endfunction

"从指定的后缀中查找
function! s:GrepItCmdExt(extensions, ...)
? let l:needle = join(a:000)
? if strlen(l:needle) == 0
??? echoerr "usage: GrepItExt <extensions> <needle>"
??? return
? endif
? call s:GrepItInExtensions(a:extensions, l:needle)
endfunction

"从指定的语言中查找
function! s:GrepItLangCmd(languages, ...)
? let l:needle = join(a:000)
? if strlen(l:needle) == 0
??? echoerr "usage: GrepItLang <langs> <needle>"
??? return
? endif
? let l:lang_map = s:CfgLangeMap()
? let l:languages = split(a:languages, ",")
? let l:extensions = s:GetExtensions(l:languages, l:lang_map)
? call s:GrepItInExtensions(l:extensions, l:needle)
endfunction

"主流使用命令,因为多敲一个字符都是浪费
function! s:GrepItCmd(...)?? ??? ?
? let l:needle = join(a:000)
? if strlen(l:needle) == 0
??? echoerr "usage: GrepIt <needle>"
??? return
? endif
? let l:lang_map = s:CfgLangeMap()
? let l:extension = tolower(expand("%:e"))?? ??? ??? ?"获取文件后缀
? let l:language = s:GetLanguage(l:extension, l:lang_map)?? ?"找到语言
? let l:extensions = s:GetExtensions([l:language], l:lang_map) "从语言再扩展到一系列后缀文件
? call s:GrepItInExtensions(l:extensions, l:needle)?? ?"在一系列后缀文件中查找
endfunction

"与用户交互接口,设置搜索选项
function! GrepItSetOption()
?? ?call s:CfgSetOption()
endfunction

"与用户交互接口,选择模式搜索
function! GrepItOperator(type)
? let l:old_register_value = @@
? if a:type ==# 'v'
??? normal! `<v`>y
? elseif a:type ==# 'char'
??? normal! `[v`]y
? else
??? return
? endif
? let l:needle = @@
? let @@ = l:old_register_value

? call s:GrepItCmd(l:needle)
endfunction

"定义三个搜索命令
"常用的方式,由程序决定从那些定义的文件后缀中查找
command! -nargs=+ GrepIt call <SID>GrepItCmd(<f-args>)
"直接指明文件类型后缀来查找
command! -nargs=+ GrepItExt call <SID>GrepItCmdExt(<f-args>)
"指明了语言来查找
command! -nargs=+ GrepItLang call <SID>GrepItLangCmd(<f-args>)

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:04:10  更:2022-08-06 11:06:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 2:20:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码