ctags cscope nerdtree tmux 笔记

                       

VIMer工作台


IDE一般的VIM
打造一个基础的VIMer需要配备的环境,开不开ctags, cscope(需求不大的时候也可以忽略), nerdtree,tmux。下面整理一下我的配置过程,以备不时之需。


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.tagsset 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.ziptar -zxvf master.zipcp nerdtree/plugin/nerdtree.vim      ~/.vim/plugincp 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: NERDTreeAddMenuItemError detected while processing /Users/jcostanzo3/.vim/plugin/nerdtree/nerdtree_plugin/fs_menu.vim:line 18:E117: Unknown function: NERDTreeAddMenuItemline 19:E117: Unknown function: NERDTreeAddMenuItemline 20:E117: Unknown function: NERDTreeAddMenuItemline 28:E121: Undefined variable: g:NERDTreePathE15: 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 onsyntax enableset clipboard+=unnamedset background=darkcolorscheme desertset magicset 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 csverbendif" 给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 rulerset foldmethod=syntaxset cmdheight=2set cursorlineset tabstop=4set shiftwidth=4set softtabstop=4set noautoindentset nocindentset fo-=rset expandtabset wrapset wildmenuset showmatchset showcmdset ignorecaseset nobackupset noswapfileset nowritebackupset autowriteset autoreadset hlsearchset incsearchset ignorecaseset smartcaseset nowrapscanset nocompatibleset backspace=2set mouse=aset selection=exclusiveset selectmode=mouse,keyfiletype plugin indent onfiletype plugin onautocmd 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 -hbind - split-window -v# set -g default-ternimal "screen-256color"set -g status-fg whiteset -g status-bg blacksetw -g window-status-fg magentasetw -g window-status-bg defaultsetw -g window-status-attr dimsetw -g window-status-current-fg whitesetw -g window-status-current-bg redsetw -g window-status-current-attr brightset -g pane-border-fg greenset -g pane-border-bg yellowset -g pane-active-border-fg whiteset -g pane-active-border-bg cyanset -g message-fg whiteset -g message-bg blackset -g message-attr brightset -g status-left-length 36set -g status-left "#[fg-White] Session: #S #[fg=cyan]#P"set -g status-interval 60set -g status-justify centresetw -g monitor-activity onset -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之后,很多东西都得自己一个字母一个字母的去敲,久而久之,既锻炼了记忆,有锻炼了手指。确实还是有很多好处的。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值