浏览复杂的函数或算法流程时,往往会牵涉到多个文件或多个位置。例如,在看内核的模块时,往往为了跟完一个流程,中间会经过好几个函数(并且有可能在不同的文件)。这种情况下必须做点标志,这样才不致于跟丢原来的流程。 jumps是vim的跳转列表,记录了项目中文件的所有跳转情况。可以用ctrl+o和ctrl+i在跳转表中前后切换。更详细的信息可查看帮助手册:help jumps和:help jump-options
有了jumplist,确实方便了好多。不过,要是能在跳转的过程中做点标志,那就更爽了。别慌,救世主marks闪亮登场。
vim中几个marks命令:
:marks {arg} //显示{arg}命名的位置标记,或不写参数则显示全部标记
:delmark {marks} //删除{marks}命名的位置标记
:delmark! //删除当前缓冲区中的所有标记
:mark {arg} //创建{arg}命名的位置标记
位置标记的常见命名:
'a - 'z 小写位置标记,在每个文件内有效。
'A - 'Z 大写位置标记,也叫做文件标记,在文件间都有效
'0 - '9 数字位置标记,在.viminfo 文件里设置,这些用户不能命名
但是vim的位置标记是不显示出来的,这就需要插件的帮助优化了。
showmarks插件:让marks无处藏身,我的配置如下。第一行,使能showmarks;第二行,只关心字母命名的位置标记;在help, Quickfix, non-modifiable窗口,不使用showmarks;第四、五行,让字母命名的位置标记高亮显示,用的是后两行的配色
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
" showmarks setting
-
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
let showmarks_enable = 1 "disable showmarks when vim startup
-
let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
let showmarks_ignore_type = "hqm" "help, Quickfix, non-modifiable
-
let showmarks_hlline_lower = 1
-
let showmarks_hlline_upper = 1
-
-
hi ShowMarksHLl ctermbg=Yellow ctermfg=Black guibg=#FFDB72 guifg=Black
-
hi ShowMarksHLu ctermbg=Magenta ctermfg=Black guibg=#FFB3FF guifg=Black
marksbrowser插件:这个插件,能以窗口的方式显示所有关心的位置标记,按d可以删除标记,按回车或双击可以跳到相应的位置标记。由于这个插件已经有很多没有更新了,要想设置关心的种类,需要修改插件的脚本。我的配置如下:
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
" marks blowser setting
-
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
nmap \mk :MarksBrowser
-
let marksCloseWhenSelected = 0 "选择位置标记后,不关闭本窗口
不过,这插件跟MiniBufExplorer插件算有个兼容问题:marksbrowser插件是在上方显示位置标记窗口的,在关闭的时候,会导致下面MiniBufExplorer插件的窗口尺寸不正常,甚是烦人,差点就要放弃该插件。不过,该插件功能确实都有用,不想放弃。那只有自己动手,丰衣足食了。研究了一下源码,发现只要改下命令,将位置窗口放到下方显示即可:
- "修改关心的位置标记
-
"let s:all_marks = "abcdefghijklmnopqrstuvwxyz.'`^<>\""
-
let s:all_marks = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.'`^<>\""
-
'改变窗口显示的位置,将topleft改为botright
-
"exec "to sp" . escape(s:win_title, ' ') Modified by jack
-
exec "bo sp" . escape(s:win_title, '
插件visualmark功能十分简单,相当于一个书签功能,算是对上面两种插件的一个补充吧。按mm可以快速设置一个书签,再按一次就会取消该书签。不过,该插件在ubuntu下,会有一个“E197 不能设定语言为'en_US'"的错误,解决的方法还是改插件源码:
- if has("win32") || has("win95") || has("win64") || has("win16")
-
exec ":lan mes en_US"
- else
-
exec ":lan POSIX"
最后,再介绍一个标记单词颜色的插件mark。这个插件能用正则语言给单词着色,对浏览代码还是很有用滴^-^。我的配置如下:
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " mark setting
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- nmap ,hl MarkSet
- vmap ,hl MarkSet
- nmap ,hh MarkClear
- vmap ,hh MarkClear
- nmap ,hr MarkRegex
- vmap ,hr MarkRegex
介绍的差不多了,有了这些功能和插件,终于能更安心的看代码啦!!!
参考资料:
阅读(2132) | 评论(0) | 转发(0) |