vim可以说是一款很强大的编辑软件,其强大在于vim插件和vim配置文件,可以按照用户的习惯改造vim
一.我的vim效果图
简单介绍一下,实现的功能:
1).实现vim的简单配置(代码高亮,缩进风格等等)
2).实现查看库文件的实现或者自定义函数的实现。eg:查看printf的实现...
3).实现查看当前编译文本中定义那些函数
4).实现括号自动补齐
5).实现类,结构体,联合的成员函数,成员变量的自动出现可供选择。
二.本机环境,使用工具介绍
vmware,ubuntu,xshell,xmanager,gedit,vim
三.配置vim
1).安装vim
$sudo apt-get install vim vim-scripts vim-doc
其中vim-scripts 是vim的一个基本插件,支持代码缩进,代码高亮等等
2).vim配置文件
一般来说 vim有自己的配置文件,我们一般是不去修改这些文件,而是在用户目录底下创建自己的配置文件。vim自己的配置文件一般在 /etc/vim /usr/share/vim 这两个目录底下
使用 $cd ~ 切换到用户文件夹,$touch .vimrc文件,在其中添加自己风格的配置
$cd ~
$touch .vimrc
为了方便大段文字的粘贴(符合windows底下的复制粘贴风格),我们首先装一个gedit的插件
$sudo apt-get install gedit
这里需要说明一点的是,需要注意的是,如果你在使用xshell的话,需要将除了基本配置xshell外,额外增加一点配置(这点非常重要,我自己被坑了2个多小时,都是眼泪,宝宝心里苦),如图:
配置完成,还需要安装xmamager,才可以使用gedit。如果你直接在虚拟机内部操作的话,那就不用这些操作了。
下面是网上一些大牛的vim基本配置,可以借鉴参考一下
" 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
将上面的配置信息,自己选择的使用gedit拷贝到刚才用户目录底下的.vimrc
这是xmanager的效果图
3).ctags的安装与配置
ctags可以建立源码的标签索引(标签就是一个表示符被定义的地方,如函数定义),使得程序猿在编程时能够迅速定位函数、变量、宏定义的位置去查看原型。
$sudo apt-get install ctags
建立源码索引
eg:加入你需要查看C\C++的一些库文件的实现,那么你需要在 /usr/include/c++的目录底下输入命令$ctags -R * 生成一个tags文件,当然具体情况具体分析
现在你会发现在 /usr/include/c++ 目录底下多了一个tags文件,这个文件相当于一个索引,包含c++库文件中包含的一些函数的实现,这会使你在vim地下编程的时候方便查看库文件中函数的实现,当然,现在配置还不能实现对库函数的查找,需要在刚才的配置文件.vimrc中加入配置文件。
在.vimrc中加入如下信息
"--ctags setting--
" 按下F5重新生成tag文件,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags "add current directory‘s generated tags file
set tags+=~/home/wu/tags "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
set tags+=/usr/include/c++/tags
测试一下看是否可以找到:
在底行模式,使用光标定位到需要查看的函数名上面 ctrl+] 查看, ctrl+o 回到刚才编写的文本
4).实现括号的代码补齐
在配置.vimrc文件,网上大牛的配置,大家参考一下
:inoremap <S-ENTER> <c-r>=SkipPair()<CR>
:inoremap <S-SPACE> <ESC>la
:inoremap <C-ENTER> <ESC>A;<CR>
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(‘)‘)<CR>
:inoremap { <c-r>=ClsoeBrace()<CR>
:inoremap } <c-r>=ClosePair(‘}‘)<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(‘]‘)<CR>
:inoremap ;; <ESC>A;<CR>
function ClosePair(char)
if getline(‘.‘)[col(‘.‘) - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
function Semicolon()
"echo getline(‘.‘)[col(‘.‘)]
if getline(‘.‘)[col(‘.‘)] == ‘)‘
return "<ESC>A;"
elseif getline(‘.‘)[col(‘.‘)] == ‘}‘
return "\<ESC>A;"
elseif getline(‘.‘)[col(‘.‘)] == ‘]‘
return "\<ESC>A;"
else
return ";"
endif
endf
function SkipPair()
if getline(‘.‘)[col(‘.‘) - 1] == ‘)‘
return "\<ESC>o"
else
normal j
let curline = line(‘.‘)
let nxtline = curline
while curline == nxtline
if getline(‘.‘)[col(‘.‘) - 1] == ‘}‘
normal j
let nxtline = nxtline + 1
let curline = line(‘.‘)
continue
else
return "\<ESC>i"
endif
endwhile
return "\<ESC>o"
endif
endf
function ClsoeBrace()
if getline(‘.‘)[col(‘.‘) - 2] == ‘=‘
return "{}\<ESC>i"
elseif getline(‘.‘)[col(‘.‘) - 3] == ‘=‘
return "{}\<ESC>i"
elseif getline(‘.‘)[col(‘.‘) - 1] == ‘{‘
return "{}\<ESC>i"
elseif getline(‘.‘)[col(‘.‘) - 2] == ‘{‘
return "{}\<ESC>i"
elseif getline(‘.‘)[col(‘.‘) - 2] == ‘,‘
return "{}\<ESC>i"
elseif getline(‘.‘)[col(‘.‘) - 3] == ‘,‘
return "{}\<ESC>i"
else
return "{\<ENTER>}\<ESC>O"
endif
endf
配置到这里估计很多人都熟悉套路了,本篇文章只是起到一个抛砖引玉的作用,关于命令的使用和各个插件的使用,还需要各位去网上找资料
以上就是本人在学习过程中的一些经验总结。当然,本人能力有限,难免会有纰漏,希望大家可以指正。
本文出自 “做一个小小小司机” 博客,请务必保留此出处http://10799170.blog.51cto.com/10789170/1782454
原文地址:http://10799170.blog.51cto.com/10789170/1782454