linux 下c 开发环境vim,vim c开发环境搭建

1.安装vim 环境

首先安装好Vim和Vim的基本插件。这些使用apt-get安装即可:

lingd@ubuntu:~/arm$sudo apt-get install vim vim-scripts vim-doc

其中vim-scripts是vim的一些基本插件,包括语法高亮的支持、缩进等等

2.配置文件

/etc/vim下,也可以拷贝到自己的home目录,修改为.vimrc

" This line should not be removed as it ensures that various options are

" properly set to work with the Vim-related packages available in Debian.

" debian.vim

" Uncomment the next line to make Vim more Vi-compatible

" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous

" options, so any other options should be set AFTER setting 'compatible'.

set nocompatible

" Vim5 and later versions support syntax highlighting. Uncommenting the

" following enables syntax highlighting by default.

if has("syntax")

syntax on " 语法高亮

endif

colorscheme ron " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下

" detect file type

filetype on

filetype plugin on

" If using a dark background within the editing area and syntax highlighting

" turn on this option as well

set background=dark

" Uncomment the following to have Vim jump to the last position when

" reopening a file

if has("autocmd")

au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

"have Vim load indentation rules and plugins according to the detected filetype

filetype plugin indent on

endif

" The following are commented out as they cause vim to behave a lot

" differently from regular Vi. They are highly recommended though.

"set ignorecase " 搜索模式里忽略大小写

"set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。

set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。

set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置

"set smartindent " 智能对齐方式

set tabstop=4 " 设置制表符(tab键)的宽度

set softtabstop=4 " 设置软制表符的宽度

set shiftwidth=4 " (自动) 缩进使用的4个空格

set cindent " 使用 C/C++ 语言的自动缩进方式

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式

"set backspace=2 " 设置退格键可用

set showmatch " 设置匹配模式,显示匹配的括号

set linebreak " 整词换行

set whichwrap=b,s,,[,] " 光标从行首和行末时可以跳到另一行去

"set hidden " Hide buffers when they are abandoned

set mouse=a " Enable mouse usage (all modes) "使用鼠标

set number " Enable line number "显示行号

"set previewwindow " 标识预览窗口

set history=50 " set command history to 50 "历史记录50条

"--状态行设置--

set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行

set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。

"--命令行设置--

set showcmd " 命令行显示输入的命令

set showmode " 命令行显示vim当前模式

"--find setting--

set incsearch " 输入字符串就显示匹配点

set hlsearch

3.ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形

lingd@ubuntu:~/arm$ sudo apt-get install ctags

输入命令ctags -R *,你会发现多了一个tags文件,这个就是索引文件

向vim注册索引文件tags的路径,

lingd@ubuntu:~/arm/linux-2.6.24.7$ vi ~/.vimrc

在打开文件的最后添加如下内容(当然,具体路径根据你自己的情况)

"--ctags setting--

" 按下F5重新生成tag文件,并更新taglist

map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate

imap :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate

set tags=tags

set tags+=./tags "add current directory's generated tags file

set tags+=~/arm/Linux-2.6.24.7/tags "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)

set tags+=./tags表示在当前工作目录下搜索tags文件

set tags+=~/arm/linux-2.6.24.7/tags表示在搜寻tags文件的时候,也要搜寻~/arm/linux-2.6.24.7/文件夹下的tags文件。

然后保存并退出vi。这样,你就可以用vim在任意地方查看有关Linux的函数原形

tag命令用法:

Ctrl+] 跳到当前光标下单词的标签

Ctrl+O 返回上一个标签

Ctrl+T 返回上一个标签

:tag TagName 跳到TagName标签

以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令:

:stag TagName 新窗口显示TagName标签,光标跳到标签处

Ctrl+W + ] 新窗口显示当前光标下单词的标签,光标跳到标签处

当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags" 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。

可以用这些命令在各匹配的标签间移动:

:tfirst 到第一个匹配

:[count]tprevious 向前 [count] 个匹配

:[count]tnext 向后 [count] 个匹配

:tlast 到最后一个匹配

或者使用以下命令选择要跳转到哪一个

:tselect TagName

输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。

以下命令将在预览窗口显示标签

:ptag TagName 预览窗口显示TagName标签,光标跳到标签处

Ctrl+W + } 预览窗口显示当前光标下单词的标签,光标跳到标签处

:pclose 关闭预览窗口

:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)

:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

4.自动补全

vim的自动补全功能可通过其插件OmniCppComplete实现。

安装OmniCppComplete

lingd@ubuntu:~$ vim-addons install omnicppcomplete

配置OmniCppComplete

在vim配置文件/home/user/.vimrc中加入如下的配置:

"-- omnicppcomplete setting --

" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码

imap

" 按下F2根据头文件内关键字补全

imap

set completeopt=menu,menuone " 关掉智能补全时的预览窗口

let OmniCpp_MayCompleteDot = 1 " autocomplete with .

let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->

let OmniCpp_MayCompleteScope = 1 " autocomplete with ::

let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)

let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files

let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window

let OmniCpp_GlobalScopeSearch=1 " enable the global scope search

let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members

"let OmniCpp_DefaultNamespaces=["std"]

let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column

let OmniCpp_ShowAccess=1

(前几行就是提供了C++中的./->/::等操作符的提示和自动完成)。

OmniCppComplete是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的),所以在ctags -R生成tags时还需要一些额外的选项,这样生成的tags文件才能与OmniCppComplete配合运作。使用下列命令生成tags文件,就可以与OmniCppComplete配合运作:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

--c++-kinds=+p : 为C++文件增加函数原型的标签

--fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)

--extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全

vim自动补全功能的测试

为了测试自动补全功能,我们先下载C++一份C++标准库的源代码。

lingd@ubuntu:~$ sudo apt-get install build-essential

# 然后在/usr/include/c++下就可以找到标准库的头文件了。

lingd@ubuntu:~$ cd /usr/include/c++

lingd@ubuntu:/usr/include/c++$ ls

4.4 4.4.3

在此文件夹下生成能与OmniCppComplete配合运作的tags文件

lingd@ubuntu:/usr/include/c++$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

lingd@ubuntu:/usr/include/c++$ ls

4.4 4.4.3 tags

在vim的配置文件中如下内容,然后在编程的时候就可以使用自动补全功能了。

lingd@ubuntu:/usr/include/c++$ vi ~/.vimrc

set tags+=/usr/include/c++/tags

用vi打开前面的Test.c文件,在printf("Hello World!\n")下一行中,输入pri,然后按下Ctrl+X Ctrl+O,此时vi会弹出一个窗口,所有以pri开头的tag都会出现在这个窗口中,printf就出现在第6行中

lingd@ubuntu:~$ cd ~

lingd@ubuntu:~$ vim Test.c

注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用using namespace std;暴露出来,否则是不能补全的。在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有实现。

当自动补全下拉窗口弹出后,一些可用的快捷键:

Ctrl+P 向前切换成员

Ctrl+N 向后切换成员

Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字

Ctrl+Y 表示退出下拉窗口, 并接受当前选项

其他补全方式:

Ctrl+X Ctrl+L 整行补全

Ctrl+X Ctrl+N 根据当前文件里关键字补全

Ctrl+X Ctrl+K 根据字典补全

Ctrl+X Ctrl+T 根据同义词字典补全

Ctrl+X Ctrl+I 根据头文件内关键字补全

Ctrl+X Ctrl+] 根据标签补全

Ctrl+X Ctrl+F 补全文件名

Ctrl+X Ctrl+D 补全宏定义

Ctrl+X Ctrl+V 补全vim命令

Ctrl+X Ctrl+U 用户自定义补全方式

Ctrl+X Ctrl+S 拼写建议

帮助文档

:help omnicppcomplete

5.标签浏览器Taglist

Taglist用于列出了当前文件中的所有标签(宏, 全局变量, 函数名等)

安装Taglist

lingd@ubuntu:~$ vim-addons install taglist

配置Taglist

在vim配置文件/home/user/.vimrc中加入如下的配置:

"-- Taglist setting --

let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行

let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边

let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表

let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏

let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim

"是否一直处理tags.1:处理;0:不处理

let Tlist_Process_File_Always=1 "实时更新tags

let Tlist_Inc_Winwidth=0

进入vim后用命令":Tlist"打开/关闭taglist窗口

帮助文档

:help taglist.txt

02809c8c97eb

Paste_Image.png

6.文件浏览器和缓冲区管理器WinManager

WinManager用于管理文件浏览器和缓冲区(buffer)。2.0以上版本的WinManager还可以管理其他IDE类型插件,不过要用户在插件中增加一些辅助变量和hook来支持WinManager(帮助文档有相关说明)。

Taglist插件本身就提供了对WinManager的支持,不需要我们去修改它。这里,我们就用WinManager来管理文件浏览器netrw和标签浏览器Taglist。netrw是标准的vim插件, 已经随vim一起安装进系统里了, 不需要我们自行下载安装。

安装WinManager

lingd@ubuntu:~$ vim-addons install winmanager

配置WinManager

在vim配置文件/home/user/.vimrc中加入如下的配置:

"-- WinManager setting --

let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件

"let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim

nmap wm :WMToggle

常用命令

:WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage

文件浏览器命令(在文件浏览器窗口中使用)

或双击 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件

如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件

刷新列表

- 返回上一层目录

c 使浏览目录成为vim当前工作目录

d 创建目录

D 删除当前光标下的目录或文件

i 切换显示方式

R 文件或目录重命名

s 选择排序方式

r 反向排序列表

x 定制浏览方式, 使用你指定的程序打开该文件

winmanager帮助文档

:help winmanager

netrw帮助文档

:help netrw

7.Cscope

Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多。

安装Cscope

lingd@ubuntu:~$ sudo apt-get install cscope

在vim配置文件/home/user/.vimrc中加入如下的配置:

"-- Cscope setting --

if has("cscope")

set csprg=/usr/bin/cscope " 指定用来执行cscope的命令

set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库

set cst " 同时搜索cscope数据库和标签文件

set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果

set nocsverb

if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim

cs add cscope.out

elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim

cs add $CSCOPE_DB

endif

set csverb

endif

map :cs add ./cscope.out . :cs reset

imap :cs add ./cscope.out . :cs reset

" 将:cs find c等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)

nmap s :cs find s =expand("") :copen

nmap g :cs find g =expand("")

nmap d :cs find d =expand("") :copen

nmap c :cs find c =expand("") :copen

nmap t :cs find t =expand("") :copen

nmap e :cs find e =expand("") :copen

nmap f :cs find f =expand("")

nmap i :cs find i =expand("") :copen

cscope的主要功能是通过其"find"子命令来实现的

"cscope find"的用法:

cs find c|d|e|f|g|i|s|t name

0 或 s 查找这个 C 符号(可以跳过注释)

1 或 g 查找这个定义

2 或 d 查找这个函数调用的函数

3 或 c 查找调用过这个函数的函数

4 或 t 查找这个字符串

6 或 e 查找这个 egrep 模式

7 或 f 查找这个文件

8 或 i 查找包含这个文件的文件

用法:

<1>、为源码建立一个cscope数据库

lingd@ubuntu:~/arm/linux-2.6.28.7$ cscope -Rbq

lingd@ubuntu:~/arm/linux-2.6.28.7$ ls cscope.*

cscope.in.out cscope.out cscope.po.out

<2>、用vim打开某个源码文件,末行模式下,输入“:cs add cscope.out"(该命令已被我们映射为快捷键F4),添加cscope数据库到vim。因为我们已将vim配置为启动时,自动添加当前目录下的cscope数据库,所以你再添加该cscope数据库时,vim会提示“重复cscope数据库 未被加入“

<3>、完成前两步后,现在就可以用“cs find c”等Cscope查找命令查找关键字了。我们已在.vimrc中将“cs find c”等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快按下c)

帮助文档

:help if_cscop

注意:帮助文档if_cscop中,快捷键映射nmap i :cs find i ^=expand("")$是有误的!

比如光标“header.h”上按下i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将i映射为cs find i header.h$,也就是查找包含“header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap i :cs find i =expand("")

8.vim常用快捷键

% 跳转到配对的括号去

[[ 跳转到当前或者上一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)

][ 跳转到当前代码块(函数定义、类定义等)的结尾去(但要求代码块中'{'必须单独占一行)

]] 跳转到下一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)

[/ 跳到注释开头(只对/* /注释有效)

]/ 跳到注释结尾(只对/ */注释有效)

gD 跳转到当前文件内标识符首次出现的位置,可用于跳转到全部变量的定义处;查找局部变量时,要是多个函数中定义了该局部变量,使用gD进行查找,找到的变量定义可能不是你需要的

gd 跳转到当前函数内标识符首次出现的位置,可用于跳转到局部变量的定义处

'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"

mx 设置书签,x只能是a-z的26个字母

x 跳转到书签处("`"是1左边的键)

> 增加缩进,"x>"表示增加以下x行的缩进

< 减少缩进,"x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值