vim环境配置

新入公司的电脑卡到爆,编译服务器居然是8核的。想用vim,没有安装权限,也不能联网。无奈只能自己在家里的虚拟机鼓捣好了,再上传到编译服务器,顺便记录一下过程。相关文件已经打包上传,可以直接免积分下载。

1. 安装依赖应用

1.1 cscope 和 ctags

可以直接安装,对于离线环境,可以直接复制安装号的文件运行。免费下载链接.

2. 使用方法

2.1 cscope

2.1.1 创建数据库

cscope -Rbqk

-R:为当前目录下所有子目录创建数据库
-b:生成数据库之后退出,不启动自带界面
-q:生成cscope.in.out和cscope.po.out,加快搜索速度
-k:跳过/usr/include目录
-I dir :在-I选项指出的目录中查找头文件
-u:扫描所有文件,重新生成交叉索引文件;
-C:在搜索时忽略大小写;
i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪里去找源文件列表;

编写脚本:

#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R

-o 是连接find之间的内容。

执行之后,会生成如下文件:

e0005055@ibudev01:~/gst_eswin$ ll
total 264920
-rw-r--r--  1 e0005055 eswin  13639680 823 11:40 cscope.in.out
-rw-r--r--  1 e0005055 eswin 107462409 823 11:40 cscope.out
-rw-r--r--  1 e0005055 eswin 150046752 823 11:40 cscope.po.out

2.1.2 编辑vim配置

if has("cscope")
	set csprg=/home/aero/Documents/usr_env/cscope "此处需要填写实际路径,因为我没有系统权限,所以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
	
	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>
endif

2.1.3 使用cscope搜索跳转

因为文件索引是当前目录的相对路径,以上命令需要在cs生成cscope.out文件时候的源目录下执行,否则会提示找不到文件。
可以直接在vim命令行输入cs help查看cscope帮助:

cscope commands:
add  : Add a new database             (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern            (Usage: find a|c|d|e|f|g|i|s|t name)
       a: Find assignments to this symbol
       c: Find functions calling this function 查找调用本函数的函数
       d: Find functions called by this function 查找本函数调用的函数,光标需要落在函数名上。
       e: Find this egrep pattern
       f: Find this file跳转光标位置声明的文件,如有多个匹配项则输入序号
       g: Find this definition 跳转到定义
       i: Find files #including this file 搜索包含该头文件的文件
       s: Find this C symbol 搜索该对象出现的所有位置,之后输入序号查看
       t: Find this text string
help : Show this message              (Usage: help)
kill : Kill a connection              (Usage: kill #)
reset: Reinit all connections         (Usage: reset)
show : Show connections               (Usage: show)

以函数function_name为例,cscope 查询方式如下:

  • 跳转定义等
ctrl+]                # 光标在function_name上,按下ctrl键的同时按下’]’键
:tag function_name 	  # 需要安装ctag
:cs f g function_name  # 需要配置vimrc的escope
ctrl+\ 之后按下g		  #需要配置vimrc中[cs find g]的映射
  • 返回跳转之前的文件位置:
 ctrl+t            #按下ctrl键的同时按下t键

总结常用操作:

  • 跳转到该定义: ctrl+\ 之后按下g ctrl+]

  • 跳转到该文件: ctrl+\ 之后按下f ,file

  • 跳转到被调用处: ctrl+\ 之后按下c,caller

  • 搜索该对象所有位置 ctrl+\ 之后按下s,symbol

  • 搜索全部字符串
    ctrl+\ 之后按下t,txt
    s是仅仅搜索对象,比如每个变量或者函数名。t是搜索所有字符串,包含的内容会更多。1

一步步学cscope高级使用:
https://blog.csdn.net/freelyc/article/details/4022511

2.2 插件

下载对应的vimx文件,离线环境可以直接拷贝现存的文件。免费下载链接.

2.2.1 F2 显示/隐藏标签和文件列表

在这里插入图片描述

2.2.2 在头文件和源文件之间切换

命令模式输入:A

2.2.3 自动补全

插入模式按下:Ctrl+X Ctrl+O

2.3 多窗口操作

在调用出其它窗口后,可以通过ctrl+W,然后使用前后左右移动来选择窗口。关闭窗口和在单个窗口模式下一样的,使用:q可以直接关闭某个窗口。

:qall -- 关闭所有窗口,退出vim。
:wall -- 保存所有修改过的窗口。
:only -- 只保留当前窗口,关闭其它窗口。(CTRL-W o)
:close -- 关闭当前窗口,CTRL-W c能实现同样的功能。
 (象 :q :x同样工作 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值