ctags相关

首先肯定是下载安装了。这点不用多讲,根据自己的操作系统或者平台,使用相应的包管理工具或者源码编译安装都可以。

下载完之后,在想要使用ctags帮助查找的文件夹(一般是项目的根目录)下输入如下命令:

ctasg -R
1
命令执行完毕后就会在这个路径下生成一个tags文件,然后就可以通过下面两个最实用的命令来进行代码的跳转了, 具体的操作步骤如下:

1. 将光标定位到要进行跳转的位置,然后按下: Ctrl+] 这样就能跳转到变量(方法或者函数)被定义的地方了。
2. 跳回到原来位置的命令为: Ctrl+t(回到第一个标签)
3. 按照刚才操作的路径顺序返回到最开始的地方。
1
2
3
2.3有点重复。平时操作的话,ctrl+o更为常用。毕竟谁也记不住高频跳转的路径不是。

如果代码库中增加了新文件,这个时候ctags有可能因为更新不及时导致找不到对应的tag标签,这个时候可以使用下面的命令更新下tags。

ctags -R
1
接下来看看如何在VIM中查找目标内容。

:ts name
1
如果有匹配项的话,它会列出一个可选列表,下标从数字1开始计数,输入序号回车即可跳转到选择的位置。而出现这个可选列表的同时,突然不想跳转了,就可以直接输入数字0,退出这个选择界面。

:tags
1
列出之前已经查找过的tag信息,它会以列表的形式进行罗列。有些时候我们会想查看一个函数的实现部分,又不想离开当前的上下文环境,这个时候可以使用下面的这个命令。

:stag tagname(tagname一般是要查看的函数名或者方法名)
1
这时,VIM会进行分屏显示,一边是函数的实现部分,另一边是函数的跳转部分。查看完毕使用Shift ZZ或者输入:q退出即可。

关于tag的自动补全,ctags做的其实还算可以。有时候我们要查找的串的长度很长,一个个的输入还很有可能出现错误,那么这时就可以借助ctags的自动补全功能了。

:tag xxx_按下tab键,然后找到自己想输入的那个,回车即可。
1
由于在代码的根目录生成一份tags文件,所以只能在tags所在的目录下进行各种关于ctags的命令的使用,但是我们很有可能在根目录下的某一级目录下进行查找操作,这个时候就需要对VIM进行一下设置,要不然ctags也没什么大作用。具体方式:
在~/.vimrc文件内添加下面的内容:

set tags = tags;/
1
当有多个项目要使用ctags的时候,可以分别生成各自的tags文件,然后这样引入到vim的配置中来。

set tags=/home/wwwroot/myproject/a.tags
set tags+= /home/wwwroot/otherproject/b.tags
1
2
cscope相关

第一步依旧是常规套路,下载以及安装等等。cscope类似于ctags,也是一个基于本地规则匹配的查找工具。使用它之前需要先建立一个scope的数据库。

其实我们每一个查找操作,都要依赖这个数据库文件。cscope默认对C语言代码进行查找等操作。但是我们也可以对其指定编程语言,比如PHP,Python等等,使用下面的命令即可:

find . -name "*.php" -o -name "*.inc" -o -name "*.module" > cscope.files
1
来生成一个搜索命令的文件列表,这个列表中的每一项会包含文件的路径信息(属于相对路径)。

现在有了文件列表,就可以根据这个文件列表来建立cscope的数据库了,在含有刚才生成的cscope.files目录下,运行下面的命令:

cscope -b
1
这时会在同级目录下生成一个cscope.out的文件,这个文件就是cscope查找操作依赖的核心了。另外创建这个数据库的过程中,还有几个其他的可选命令,虽然不怎么常用,但还是来记录一下吧:

R:表示把所有的子目录中的文件也建立索引。
q: 生成cscope.in.out和cscope.po.out文件,加快cscope的查找时的索引速度。
k: 在生成索引文件时,不搜索/usr/local目录。(这一点我也不知道会有什么用,可能还是跟C语言头文件使用有一定的联系吧)

现在cscope的数据库已经建立好了,接下来就是告诉VIM,这个文件的位置,这样在使用VIM的时候就可以很好的配合cscope尽心操作。

配置很简单,只需要在~/.vimrc文件中添加这样一句话:

set cscope=target_cscope_out_path
1
或者在打开VIM的时候在命令模式下输入:

:cs add target_cscope_out_full_path
1
这样就算是配置完成了。

还有一点需要了解的是:如果想使用quickfix窗口来显示cscope的搜索结果,既可以在~/.vimrc中添加下面这条语句:

set cscopequickfix=s-,c-d-i-,t-,e-
1
下面将整个使用流程连贯起来操作一下:

vim ktvboxmp.php
:cs add ./cscope.out
:cs find g function-name
:cs find c function-called-record
:cw # 查看符合要求的可选的列表
1
2
3
4
5
最后关于cscope的一个不常用的命令为:

:cs reset
1
作用就是初始化,重置所有索引。

nerdtree 相关

nerdtree 是VIM的一个可以显示目录信息的插件,有了它就可以让VIM变像一个IDE, 但是安装它却耗费了我不少时间。原因就在于它支持的版本问题。

下载的话,https://github.com/scrooloose/nerdtree/archive/master.zip 对我来说,并不好用。不知道对别人会怎样。 正常的操作下:

wget https://github.com/scrooloose/nerdtree/archive/master.zip

tar -zxvf master.zip

cp nerdtree/plugin/nerdtree.vim ~/.vim/plugin
cp nerdtree/doc/README.md ~/.vim/doc/
1
2
3
4
5
6
7
按理说没什么错误的啊,结果出现了下面的错误信息:

Error detected while processing /Users/jcostanzo3/.vim/plugin/nerdtree/nerdtree_plugin/exec_menuitem.vim:
line 22:
E117: Unknown function: NERDTreeAddMenuItem
Error detected while processing /Users/jcostanzo3/.vim/plugin/nerdtree/nerdtree_plugin/fs_menu.vim:
line 18:
E117: Unknown function: NERDTreeAddMenuItem
line 19:
E117: Unknown function: NERDTreeAddMenuItem
line 20:
E117: Unknown function: NERDTreeAddMenuItem
line 28:
E121: Undefined variable: g:NERDTreePath
E15: Invalid expression: g:NERDTreePath.CopyingSupported()
1
2
3
4
5
6
7
8
9
10
11
12
13
没办法,只好换个思路。换个版本试试。https://vim.sourceforge.io/scripts/script.php?script_id=1658 这个链接中下载版本为4.2.0 的名为nerdtree.zip 文件,然后下载这个文件后解压,同样把plugin和doc文件夹下的内容放到~/.vim/文件夹下的对应位置。

这样就完成了安装过程。对于nerdtree插件最最实用的一个快捷键就是:

ctrl + ww
1
来切换左侧目录区和右侧文件编辑区。

退出左侧目录区或者右侧文件编辑区的命令为:

:q 或者 Shift+zz
1
差点忘了,在VIM中调出目录树的命令是在VIM的命令模式下输入:

:NERDTree
1
但是每次输入这么长的内容,也是不好玩,那么就绑定一下VIM的快捷键吧。在~/.vimrc 文件中添加这样一行语句:

nmap <F2> :NERDTree <CR>
1
这样在打开VIM后按下F2键就可以调出目录树了。这下看起来很方便了吧。

VIMRC

关于这个配置文件,需要了解的有很多,但是最基础的就是它的位置。

~/.vimrc 仅仅对当前用户有效
/etc/vim/.vimrc 对所有用户有效

我一般作为root用户登录到我的服务器,所以我只想让我的VIM对我自己友好的话,我只需要编辑/root/.vimrc文件即可。
下面贴出我的VIMRC的配置吧,有需要的可以拿去试试。

set nu!
syntax on
syntax enable
set clipboard+=unnamed
set background=dark
colorscheme desert
set magic
set fo-=r

"高亮显示tab,行尾结束符,空格信息
"set list listchars=tab:>.,trail:.,extends:#,nbsp:~
"highlight WhitespaceEOL ctermbg=green guibg=green
"match WhitespaceEOL /\s+$/
" 告诉vim在当前的目录下找不到tags文件的话,就到上层目录中去查找
set tags=tags;/
" 告诉VIM可以使用quickfix窗口显示cscope的查找列表
set cscopequickfix=s-,c-,d-,i-,t-,e-
if has("cscope")
set csprg=/usr/local/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif

" 给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>

" 添加nerdtree插件支持,让VIM显示一个目录树
nmap <silent>n :NERDTreeToggle<CR><CR>
set ruler
set foldmethod=syntax
set cmdheight=2

set cursorline
set tabstop=4
set shiftwidth=4
set softtabstop=4

set noautoindent
set nocindent
set fo-=r

set expandtab
set wrap

set wildmenu
set showmatch
set showcmd

set ignorecase
set nobackup
set noswapfile
set nowritebackup

set autowrite
set autoread
set hlsearch
set incsearch
set ignorecase
set smartcase

set nowrapscan
set nocompatible
set backspace=2

set mouse=a
set selection=exclusive
set selectmode=mouse,key

filetype plugin indent on
filetype plugin on
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Tmux相关

基本上来说,tmux已经成为了我日常工作的一部分了,很难想象没了它的话,工作效率会是多么低。之前写过一篇关于tmux的特别简单的文章,总体来说含金量不大。

学习tmux主要是对各种快捷键的熟练使用,不需要有多么好的记忆力,只要多敲多练,就够了,下面贴一下我的tmux 的配置。

# set -g mode-mouse on
# 设置滚屏
# set-window-option -g mode-mouse on

# 如果喜欢给窗口自定义命名,那么需要关闭窗口的自动命名
set-option -g allow-rename off
# 如果对 vim 比较熟悉,可以将 copy mode 的快捷键换成 vi 模式
# set-window-option -g mode-keys vi
# 系统剪切板共享
# set-option -g default-command "reattach-to-user-namespace -l zsh"

# 用鼠标切换窗口、调节分屏大小
# setw -g mouse-resize-pane on
# set-window-option -g mouse-select-pane on
# setw -g mode-mouse on
# setw -g mouse-select-window on
## 设置复制模式
# setw -g mode-keys vi
# bind ` copy-mode
# unbind [
# unbind p
# bind p paste-buffer
# bind -t vi-copy v begin-selection
# bind -t vi-copy y copy-selection
# bind -t vi-copy Escape cancel
# bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy"

# 下面是自己的一些配置,可删可不删
bind r source-file ~/.tmux.conf \; display "配置文件已成功加载完毕!"
bind | split-window -h
bind - split-window -v
# set -g default-ternimal "screen-256color"
set -g status-fg white
set -g status-bg black
setw -g window-status-fg magenta
setw -g window-status-bg default
setw -g window-status-attr dim
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green
set -g www.078881.cn/ pane-border-bg yellow
set -g www.120xh.cn/ pane-active-border-fg white
set -g pane-active-border-bg cyan
set -g www.yszx11.cn/ message-fg white
set -g message-bg black
set -g www.thd178.com message-attr bright

set -g status-left-length 36
set -g www.6788878.cn/ status-left "#[fg-White] Session: #S #[fg=cyan]#P"

set -g status-interval 60
set -g status-justify centre
setw -g monitor-activity on
set -g visual-activity on
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

总结

之前听过有人这么说过,Windows用的时间越久,人就变得越来越迟钝。用了Linux之后,很多东西都得自己一个字母一个字母的去敲,久而久之,既锻炼了记忆,有锻炼了手指。确实还是有很多好处的。

ctags相关的更多相关文章

  1. Sublime Text Ctags 安装、使用、快捷键

    安装ctags应用程序. 1.到CTags的官方网站下载最新版本,将解压后的ctags.exe放到系统环境变量的搜索路径中.一般是C:\windows\system32. 如果你想放到其他文件夹中,记 ...

  2. 将vim打造成php的IDE开发环境

    将vim打造成IDE开发环境 本文主要介绍将vim打造成IDE开发环境,如代码补全,高亮显示,函数跳转,函数自动注释等 首先介绍2款VIM插件管理器:Vbundle,Pathogen 本文中的vim插 ...

  3. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  4. ctags使用细节

    在src code目录中运行下面的命令(我自己使用的命令):    $ctags --langmap=c++:.h --languages=c++,c,perl,verilog -R 其中,指定cta ...

  5. 使用VIM插件ctags来阅读C代码

    说明 Ctags是vim下方便代码阅读的工具.尽管ctags也可以支持其它编辑器,但是它正式支持的只有vim.并且vim中已经默认安装ctags,它可以帮助程序员很容易地浏览源代码:ctags最先是用 ...

  6. 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)

    1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scr ...

  7. vim ctags使用方法

    一.用好系统自带软件ctags 大部分的unix系统都有ctags软件,它能跟vim很好地合作. 用途:     生成c语言的标签文件,实现相关c文件之间的跳转. 用法:     1.生成标签文件   ...

  8. Sublime text追踪函数插件:ctags 和php代码格式化

    转自:http://blog.csdn.net/zm2714/article/details/8076077 这两天一直纠结两款编辑器——eclipse和sublime Text. eclipse的p ...

  9. 【Linux】——ctags

    ctags的功能:扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来. ctags 可以在官网上下载源代码,然后编译安装.最后在 ~/.vimrc 文件中写入以下配置: " ...

随机推荐

  1. USB主机控制器ECHI

    USB主机控制器ECHI 2017年10月24日 15:44:11 阅读数:239 1. 主机控制器(Host Controller) • UHCI: Universal Host Controlle ...

  2. odoo方法

    一. 类似于前面有个_ 的方法,格式是如下def _getdlvqty(self, cr, uid, ids, field_names, args, context=None): def _get_p ...

  3. ASP.NET Response.Redirect 丢失 Session的问题(作废,仅供参考)

    以前在做ASP.NET开发时一直没注意到一个问题,就是广泛使用的Response.Redirect方法并不会将服务器端在Response中新增或修改的Cookie返回给客户端浏览器,而网站的Sessi ...

  4. 20155207 实验5 MSF基础应用

    20155207 实验5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode exploit:让攻击方式能够发挥作用的通道,更像是没有子弹的枪,提供了攻击方 ...

  5. 20155233 《网络对抗技术》EXP3 免杀原理与实践

    正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成jar包 输入命令msfvenom -p ...

  6. python 回溯法 子集树模板 系列 —— 11、全排列

    问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...

  7. vuex实践之路——笔记本应用(一)

    首先使用vue-cli把环境搭建好. 介绍一下应用的界面. App.vue根组件,就是整个应用的最外层 Toolbar.vue:最左边红色的区域,包括三个按钮,添加.收藏.删除. NoteList.v ...

  8. [摘抄]从 GitHub 身上学到的 3 个创业经验

    1.找一个大问题去解决 让 Git 更容易使用是 GitHub 的目标,但它从来不是 GitHub 的最终目标.GitHub 的真正目标是让协作和编写软件变得更容易.世界上每一个软件开发者都在努力解决 ...

  9. 如何设计一个异步Web服务——任务调度

    接上一篇<如何设计一个异步Web服务——接口部分> Application已经将任务信息发到了Service服务器中,接下来,Service服务器改如何对自身的资源进行合理分配以满足App ...

  10. 阿里云CentOS 7.4 64位,jdk1.6、mysql5.7、tomcat6部署步骤(个人记录)

    jdk1.6.mysql5.7.tomcat6部署步骤 一.安装jdk1.6 查看当前系统jdk的版本:java -version 方法一:利用yum源来安装jdk(此方法不需要配置环境变量) 查看y ...