📄 if_cscop.cnx
字号:
*cscopequickfix* *csqf* *E469*{not available when compiled without the |+quickfix| feature}'cscopequickfix' 设定是否使用 quickfix 窗口来显示 cscope 结果。这是一组用逗号分割的值。每个值可以代表一个 |cscope-find| 命令 (s, g, d, c, t, e, f或 i) 加一个标志 (+, - 或 0)。'+' 表示结果必须被添加到 quickfix 窗口中。 '-' 表示清除上次的结果,'0' 或不存在表示不使用 quickfix。 搜索从字符串首开始直到命令第一次出现时结束。缺省值是 "" (不使用 quickfix 窗口)。下面的值也许有用: "s-,c-,d-,i-,t-,e-"。 *cscopetag* *cst*若设定了 'cscopetag' 选项,":tag" 命令,CTRL-] 以及 "vim -t" 都会使用|:cstag| 而不是缺省的 :tag。也就是说,设定 'cst' 选项意味着你总同时搜索 cscope数据库和标签文件。缺省值为关。例如: > :set cst :set nocst< *cscopetagorder* *csto*'csto' 的值决定 |:cstag| 命令查找的次序。如果 'csto' 被设为 0,cscope 数据库先被搜索,搜索失败的情况下在搜索标记文件。如果 'csto' 被设为 1,标记文件会在cscope 数据库之前被搜索。缺省值为 0。例: > :set csto=0 :set csto=1< *cscopeverbose* *csverb*如果 'cscopeverbose' 没有被设定 (缺省情况),当添加一个数据库时,成功与否不会被显示。理想的情况是,你先在你的 |.vimrc| 文件中复位该选项,再添加 cscope数据库,然后再设定之。这样,如果你在使用 vim 当中动态添加数据库,你就会被 vim告知结果。例如: > :set csverb :set nocsverb< *cscopepathcomp* *cspc*'cspc' 的值决定显示文件路径的多少部分。在缺省值 0 的情况下整个路径都会被显示。1 只显示文件名,而不显示路径名。其它值会显示该值表示数目的部分。例如: > :set cspc=3会显示文件路径的最后 3 个部分,包括文件名本身。==============================================================================4. 如何在 Vim 中使用 cscope *cscope-howtouse*首先你要作的是为你的源文件建立一个 cscope 数据库。最简单的做法是使用"cscope -b" 命令。更详细的说明请查阅 cscope 的手册页。假定你已经建立了一个 cscope 数据库,你需要将其添加 "add" 到 Vim 中来。这会建立一个 cscope "连接" 给 Vim 来使用。你可以把这些加入到你的 .vimrc 文件里。也可以在 vim 启动之后手动完成。例如,要添加一个 cscope 数据库 "cscope.out",你可以这样做: > :cs add cscope.out<你可以用 ":cs show" 命令来检查一下结果。该命令会产生类似下面的结果: > # pid database name prepend path 0 28806 cscope.out <none><Note:因为 Microsoft RTL 的缺陷,Win32 版本只能显示 0 而不是真正的进程 ID。一旦建立了 cscope 连接,你就可以做各种查询并得到结果。查询所用的命令是":cs find"。例如: > :cs find g ALIGN_SIZE<这样要做很多的打字工作,所以有些麻烦。幸运的是,我们可以通过定义快捷键来避免过多的输入。参考 |cscope-suggestions| 可以得到一些使用的建议。如果匹配结果只有一个,你会被自动带到该处。如果匹配结果多于一个,Vim 会显示一个选择屏幕让你来选择一处匹配。在你跳转到新的位置后,简单的用 Ctrl-T 就可以跳会远处。==============================================================================5. 缺陷 *cscope-limitations*Vim 对 cscope 的支持紧当所在系统支持一下四个系统调用时才可用:fork(),pipe(), execl(), waitpid()。这意味着它基本上仅限于 Unix 系统。另外 cscope 支持在 Win32 也可以使用。更多的信息以及一个 Win32 版本的cscope 可以在这里找到: http://iamphet.nm.ru/cscope/index.html同时还有几个硬性的限制: 1. cscope 的最大连接数目是 8。你还需要更多吗? 2. 在用 |:cstag| 搜索时要执行 |:tjump|,这一点是无法配置的。 (如:你不能选择使用 tselect)。==============================================================================6. 建议的使用方法 *cscope-suggestions*将下面的设定加入到你的 .vimrc 里 (根据你的情况调整文件路径): > if has("cscope") set csprg=/usr/local/bin/cscope set csto=0 set cst set nocsverb " add any database in current directory if filereadable("cscope.out") cs add cscope.out " else add database pointed to by environment elseif $CSCOPE_DB != "" cs add $CSCOPE_DB endif set csverb endif我们设定了 'cscopetag',这样所有的 :tag 命令就会实际上调用 :cstag。这包括:tag, Ctrl-], 及 "vim -t"。结果是一般的 tag 命令不仅搜索由 ctags 产生的标签文件,同时也搜索 cscope 数据库。有些用户也许向保留原来的标签命令,而用另外一个快捷键来执行 :cstag 命令。例如,你可以用下面的命令将 Ctrl-_ (下划线) 映射到 :cstag: > map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>常用的 cscope 查询 (用 ":cs find") 包括寻找所有调用指定函数的函数以及寻找所有出现某个指定的 C 符号的地方。你可以参照一下的映射: > map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR> map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>这些对 Ctrl-] (右方括号) 和 Ctrl-\ (反斜杠) 的映射使你可以将光标移动到你想作查询的函数或 C 符号的上方然后快速的查询 cscope 数据库。你也可以使用下面的方式。这些映射借鉴了 Cscope 主页(http://cscope.sourceforge.net/) 上的 Vim/Cscope 教程: > nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> " Using 'CTRL-spacebar' then a search type makes the vim window " split horizontally, with search result displayed in " the new window. nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR> " Hitting CTRL-space *twice* before the search type does a vertical " split instead of a horizontal one nmap <C-Space><C-Space>s \:vert scs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-Space><C-Space>g \:vert scs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-Space><C-Space>c \:vert scs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-Space><C-Space>t \:vert scs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-Space><C-Space>e \:vert scs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-Space><C-Space>i \:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-Space><C-Space>d \:vert scs find d <C-R>=expand("<cword>")<CR><CR>==============================================================================7. Cscope 的获取等等信息 *cscope-info*如果你还没有 cscope (你的编译器或 OS 没有包括 cscope),你可以从下面的地址免费下载: http://cscope.sourceforge.net/这是被 SCO 以 BSD 许可发布的。如果你想要更新的版本,你可以购买它。根据 (旧的) nvi 文档: 你可以用 $400 从 AT&T Software Solutions 购买无限制的许可的源码。 致电 +1-800-462-8146。你还可以从 World-Wide Exptools Open Sourcean 的网页下载 cscope 13.x 及mlcscope 14.x (多语言 cscope,支持 C, C++, Java, lex, yacc, breakpointlisting, Ingres, 及 SDL)。网址如下: http://www.bell-labs.com/project/wwexptools/packages.html在 Solaris 2.x 上, 如果你有 C 编译器的许可,你也就有 cscope。两者通常位于/opt/SUNWspro/binSGI 开发者也可以得到 cscope。在以下的地址搜索 cscope: http://freeware.sgi.com/index-by-alpha.html https://toolbox.sgi.com/toolbox/utilities/cscope/第二个地址仅对那些 SGI toolbox 的拥有者有效。网上还有一个旧版本的 cscope 的克隆 (叫 "cs") 。出于各种原因,Vim 不支持该程序。Vim cscope 界面/支持的原作者是 Andy Kahn <ackahn@netapp.com>。期间使用了nvi cscope 界面的构架和很少的一部分代码。如果你在使用 Vim cscope 界面时有任何问题,建议,patches, 等等,请与他联系。 *cscope-win32*这里可以找到一个 Win32 版本的 cscope://iamphet.nm.ru/cscope/index.htmlWin32 支持是 Sergey Khorev <khorev@softlab.ru> 加入的。如果你有 Win32 相关的问题,请联系他。 vim:tw=78:ts=8:ft=help:norl:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -