A New Reading Code Method
一个源代码查阅记录方法
为了快速阅读源码,一方面我们可能需要通过 fd 快速查找文件,另一方面我们需要通过 rg 快速查找文件内容,最重要我们也需要跳转定义, 跳转定义一般有两种方式可以去执行,一是通过 ctags 精确查找,亦或者通过 leaderf 或者 rg 进行模糊查找。
1. RG执行步骤
- 在vim中打开每个项目根目录的 vimwiki 文件(需要自建);注意可以把你每一个关注的目录添加到 nerdtree 中
:Bookmark
- 通过
rg
搜索你要搜索的内容, 你可以给每次你的搜索主题,写上你的理解,你的认识,这样你的每次阅读都是有记录的 - 把搜索的文件路径,黏贴到wiki文件内,通过
gf
定位到文件进行查阅(注意在你的vim系统中,也开始使用,cp
获取绝对路径,然后把路径放到你的helpwiki文件中,保证vim系统也能记录上)
rg ":call GotoFile\("
yzl\my_plugins\open_file_under_cursor.vim\plugin\open_file_under_cursor.vim
39:nnoremap gf :call GotoFile("")<CR>
40:nnoremap <C-W>f :call GotoFile("new")<CR>
41:nnoremap <C-W><C-F> :call GotoFile("new")<CR>
2. RG执行原则
- 你的每一次查找都有一个搜索主题
- 没得每一个搜索主题都包含若干链接
- 你的每一次查找都可以被记录,并被快速追溯,并被归纳在一个主题下
下面是一些记录的不错rg操作命令
- 命令行下使用rg
rg "支持"
rg injectDependency
rg -tpy foo
将搜索限制为 Python 文件,rg -Tjs foo
不包括 JavaScript 你搜索的文件- rg 注意使用双引号(cmd和ubuntu有所不一,需要测试)
rg -g "*.java"
可以glob所有java文件,并对他们进行其他搜索(类似-tjava
或者--type java
)rg -g "!*.java"
!排除所有java文件结尾的文件(该结果可能会更多些)rg --replace or -r
: 替换!rg --type-add ‘web:*.{html,css,js}" -tweb "hello"
自定义类型(rg --type-list
可以看到所有type)rg "addSharedFunction\(.*\)"
所有addSharedFunction函数 注意记住上述搜素的画面中的行号,这样在vim窗口中,可以直接定位到对应行rg --files . |rg "文件名字"
搜索当前目录下的文件名字小技巧
D:\codeRoom\java\jfinal>rg "setInjectDependency\("
src\main\java\com\jfinal\config\Constants.java
206: controllerFactory.setInjectDependency(getInjectDependency());
219: public void setInjectDependency(boolean injectDependency) {
220: AopManager.me().setInjectDependency(injectDependency);
src\main\java\com\jfinal\core\ControllerFactory.java
26: public void setInjectDependency(boolean injectDependency) {
src\main\java\com\jfinal\aop\AopManager.java
48: public void setInjectDependency(boolean injectDependency) {
3. FG执行步骤
有时候我们也可以通过fg 进行文件的搜索。
- fd “app” 搜索带app字符的文件
- fd -e jpg 搜索所有jpg文件结尾的文件
- fd -E jpg 搜索所有文件,并排除jpg文件结尾
- fd -e jpg -a 搜索所有jpg文件结尾的文件,并以绝对路径输出
- fd -e jpg –exec
4. ctags执行步骤
Universe ctags 可以生成一定源码文件的函数、字段标识符。
- ctags -R *
- ctags -R –force-language=java -R ./src
- ctags –list-languages
配置方法:
set tags+=./tags
set tags+=D;/java/tags
可以添加多个tags路径,自动支持绝对路径,即其他代码库的tags可以添加到被引用库中,只要在vim配置添加好该tags绝对路径。
5. 接口rg查阅
通过 rg 、 fd 查看jfinal终端界面返回的接口和java源文件信息
6. copy file name absolute path
配合上,cp
也可以获得对应文件的绝对路径,很方便
""""""""""""""""""""""""""""""""""Copy file name""""""""""""""""""""""""""""""""""
"" for vim-copy-filename
nmap <leader>cP :CopyRelativePath<CR>
nmap <leader>cl :CopyRelativePathAndLine<CR>
nmap <leader>cp :CopyAbsolutePath<CR>
nmap <leader>cf :CopyFileName<CR>
nmap <leader>cd :CopyDirectoryPath<CR>
7. ignore-file
rg "email" --ignore-file .gitignore
.gitignore
target/
*.map
*.json
*.min.css
*.min.js
Related