浅谈如何配置vim
浅谈如何配置vim
题记:古语有云:“工欲善其事必先利其器”,要想获得更高的工作效率,我们必须得有趁手的工具。又所谓“高端唯有定制”,要想拥有自己专属的高大上的vim,我们必须得学会自己配置。
一.vim简介
vim是linux系统上最著名的 “文本/代码” 编辑器,它是早年的vi编辑器的加强版。它最大的特色是脱离鼠标操作完全使用键盘命令进行编辑,键盘流的各种巧妙组合操作使得编辑效率大幅提升。此外,vim的可配置性非常强,各种插件、语法高亮配色方案等多不胜数,我们可以通过vim配置文件和vim插件将其打造为适合我们每个人自己口味与需求的神器。
1.如何安装vim:
在ubuntu平台下,在终端输入“sudo apt-get vim”即可安装。安装完成后可以在终端输入“vim”命令查看其版本号,现在最新的版本号是7.4,为了保证配置成功,请确保你的vim 编辑器是7.4或7.4以上版本。
2.vim 配置文件和vim插件:
Vim强大的功能,其来源基本上就两个地方:vim配置文件和vim插件。Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下,一般情况下,我们不会去更改这两个文件夹下的配置文件,而是在用户文件夹/home/user(其中,user为用户名)下建立自己的配置文件:“.vimrc”。然后开始编辑“.vimrc”文件中的内容。(注意:ubuntu平台下以“.”开头的文件一般都是隐藏文件,按“ctrl”+“h”键便可以显示)
3.我的vim视图:
二.基本设置
1.关闭兼容模式:
set nocompatible 关闭兼容模式vim是vi的加强版,它在vi的基础上增加了很多功能,但就不与vi完全兼容了。“set compatible”就是让vim 关闭所有扩展的功能,尽量模拟vi的行为,但这样就不应用vim的很多强大功能,所以一般如果没有什么特殊需要的话(比如执行很老的vi脚本),都要在vim配置的开始,写上“set nocompatible”来关闭兼容模式。由于这个选项是最最基础的选项,会连带很多其它选项发生变动,所以它必须是第一个设定的选项。
2.鼠标设置:
set mouse=a 启动对鼠标的支持
set selection=exclusive 允许区域选择
set selection=mouse,key 置选择模式为mouse和key
set mouse选项说明:虽然vim最大的特色是脱离鼠标操作完全使用键盘命令进行编辑,但是,不可否认的是,在许多情况下,使用鼠标会使得操作更为快捷和直观,所以,我们有必要在vim中启用对于鼠标的支持。
‘mouse’选项的字符决定vim 会在什么模式下会使用鼠标:
n 普通模式(normal mode)
v 可视化模式(visual mode)
i 插入模式(insert mode)
c 命令行模式(command-line mode)
h 在帮助文件里,以上所有模式(all previous modes when editing a help file)
a 上所有模式(all previous modes)
通常情况下,我们会用“set mouse=a”来启动对鼠标的支持。这样会带来一个新的问题:在vim中鼠标右键不能对选中的文本内容进行复制操作。其原因如下:鼠标事件有两种处理方式,程序处理和X处理。如果让X负责处理,则是左键选择,右键复制;要让vim中由X负责处理,按住shift键,然后选择,copy选项就enable了,如果放掉shift键,则由vim处理该选择。
3.窗口参数设置:
winpos 5 5 设置窗口位置set lines=65 columns=220 设置窗口大小
winpos选项说明:
vim界面左上角的位置,原则上与界面左上角重合,更方便编辑。每个人的显示器尺寸不同,具体可以根据自己的显示器大小自行调整以达到满意的效果。
窗口大小说明:
设定的原则是让桌面全部显式为vim界面,更方便编辑。每个人的显示器尺寸不同,具体可以根据自己的显示器大小自行调整以达到满意的效果。
4.光标所在行设置:
set number 显示行号set ruler 标尺功能,显式光标位置状态行
set statusline=...... 设置状态行显式的内容
set laststatus=2 设置总是显式状态行:(1:不显式;2:显式)
set cursorline 高亮显示光标所在行
set nowrap 设置不自动换行
set novisualbell 去掉输入错误时光标闪烁
5.命令行模式设置:
set cmdheight=2 设置命令行高度为2(默认为1)set showcmd 显示输入的命令
6. tab/backspace相关设置:
set expandtab 将tab转化为space存储set shiftwidth=4 设置tab宽度为4个空格
set tabstop=4 将tab解释为4个空格
set softtabstop=4 4个空白会被当成一个tab删除
set backspace=indent,eol,start 使backspace正常处理indent, eol, start
tab键设置说明:
shiftwidth/tabstop/softtabstop 一般设置为相同的值。
backspace键设置说明:
indent:如果用了“set indent”等缩进,想用退格键将字段缩进的删掉,必须折这这个选项,否则不响应;eol:即“end of line”,如果插入模式下光标在下一行开头,想通过退格键合并两行,需要设置eol;start:要想删除此次插入前的输入,需要设置start。
7.自动缩进设置:
set autoindent 设置自动缩进(继承前一行的缩进方式)8.文件相关设置:
set autowrite 设置自动保存set autoread 文件被改动时自动载入
set nobackup 不备份文件
set noswapfile 不生成swap文件
9.折叠相关设置:
set foldenable 允许折叠set foldmethod=syntax 用语法高亮来定义折叠
foldmethod选项说明:
vim代码折叠方式可以用“foldmethod”选项来设置,共六种:set foldmethod=manual 手工定义折叠
set foldmethod=indent 用缩进定义折叠
set foldmethod=expr 用表达式来定义折叠
set foldmethod=syntax 用语法高亮来定义折叠
set foldmethod=diff 对没有更改的文本进行折叠
set foldmethod=marker 用标志定义折叠
常用命令介绍:
za 打开/关闭在光标下的折叠
zA 循环地打开/关闭光标下地折叠
zo 打开在光标下地折叠
zO 循环地打开光标下的折叠
zc 关闭光标下的折叠
zC 循环地关闭光标下的折叠
zM 关闭所有折叠
zR 打开所有折叠
为了使用的方便,我们将zo/zc映射为快捷键:
noremap <F5> zo
noremap <F6> zc
10.搜索相关设置:
set incsearch 增量式搜索(搜索时,输入语句逐字符高亮)set hlsearch 高亮显示被搜索的内容
set ignorecase 搜索时忽略大小写
11.匹配相关设置:
set showmatch 高亮显示匹配的括号set matchtime=10 设置匹配括号高亮的时间为10s
12.编码/解码相关设置:
set enc=utf-8 转化为当前系统编码(utf-8)来显示set fenc=utf-8 设置当前文件的编码为utf-8
set fens=utf-8,gbk…… 打开文件时进行解码的猜测列表
vim中编码设置说明:
vim里面的编码主要和三个参数有关:enc,fenc,fencs.
enc(encoding):其作用基本只是显示,不管打开的文件是什么编码的,vim都会将其转化为当前系统编码来处理,这样才能在当前系统里面正确地显示出来。
fenc(fileencoding):指当前文件的编码,即当前文件要以什么样的编码形式存储。
fencs(fileencodings):打开文件时进行解码的猜测列表。文件编码没有百分百正确的判断办法,所以vim只能猜测文件编码,不断尝试去进行解码。
13.显示相关设置:
colorscheme ron 设置配色方案(不设置即为默认配色方案)set scrolloff=3 设置光标移动到buffer顶部和底部时保持三行的距离
colorscheme选项说明:
vim的配色方案在/usr/share/vim/vim74/colors文件夹里面,一系列以“.vim”结尾的文件,当然,你也可以自己编写或者去网上下载合适的自己喜欢的配色方案。
14.语法高亮设置:
syntax on 打开语法高亮syntax选项说明:
vim中打开语法高亮有两种方法:syntax enable 和 syntax on。后者会覆盖当前你对语法高亮的更改,由于更改高亮不常见,所以这两个命令的区别很小,建议使用后者。vim 一般都可以正确识别文本类型,并做出相应的高亮。
15.文件类型检测设置:
filetype plugin indent on 开启文件类型检测/加载插件/缩进filetype选项说明:
filetype的默认属性:detection:on plugin:off indent:off
detection:默认情况下vim会对文件自动检测文件类型。还有一种方式就是在文件内容中指定,vim会从文件的头几行自动扫描文件是否有声明文件类型的代码,如在文件的首行加入//vim:filetype=html,当作注释写入,以至于不影响文件的编译,这样vim不通过文件名也能检测出文件是什么类型。
plugin:当plugin状态为on时,那么就会在vim的运行时环境目录下加载该类型相关的插件。
indent:不同类型文件有不同的缩进方式,比如python采用4个空格作为缩进,而html采用2个空格作为缩进,那么indent就可以为不同文件类型选择合适的缩进方式。
一般用vim 都会打开这三者,因为这会极大地提高vim对不同类型文件编辑时的适应性和灵活性。
三.自动补全设置
1.自动补全括号/引号:
在编写程序时,经常会用到成对的括号,引号等,不免会出现漏写右半部分从而导致错误,致使编译报错不通过的情况,所以我们可以通过映射来实现括号/引号的自动补全:当你键入左半部分“(”、“{”、“[”、““”、“‘”时,vim会为你自动补全右半部分,并且将光标移到括号内,进入insert模式,等待用户输入。代码如下:2.supertab插件:
(1)Overview:
supertab is a vim plugin which allow you to use <tab> for all your insert completion needs. (from developers)(2)下载与安装:
下载地址1:www.vim.org/scripts/script.php?script_id=1643下载地址2:https://github.com/ervandew/supertab
这两个网站上有资源与详细的安装步骤,其核心步骤是将“supertab.vim”文件放到“.vim/plugin”目录,此处不再赘述。
(3)在“.vimrc”中添加以下配置:
let g:SuperTabDefaultCompletionType=“<C-N>”选项说明:设置按下tab键后默认的补全方式为<Ctrl+N>,更多补全方式用 :help ins-completion 查看;
let g:SuperTabRetainComppletionType=2
选项说明:
0 不记录上次的补全方式
1 记住上次的补全方式,直到使用其他的补全命令改变它
2 记住上次的补全方式,直到按ESC推出插入模式
set completeopt=longest,menu
选项说明:
只在下拉菜单中显示匹配项目。
该选项缺省时,vim会使用下拉菜单和一个preview窗口来显示匹配项目,下拉菜单列出所有匹配的项目,preview窗口显示对应匹配项目的详细信息。
(4)基本功能使用方法:
Supertab使用起来很简单,只要在输入变量名或者路径名等符号中途按tab键,就能得到以前输入过的并且和当前字符匹配的符号下拉列表,并通过tab键循环选择,高亮的项表示当前选中项,按ENTER键确认选择;按ESC键退出下拉列表。四.ctags
1.ctags简介:
ctags(generate tag files for source code)是vim下方便代码阅读的工具,ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如变量,函数等),使程序员在编程时能迅速定位函数、变量、宏定义等。2.ctags安装:
ubuntu下在终端中输入:sudo apt-get install ctags,即可安装。3.如何使用:
(1)生成tags文件:
ctags –R递归地为当前目录及其子目录下的所有代码文件生成tags文件
(2)指定tags文件:
set tags=./tags指定tags文件为当前路径下的tags文件(在vim中打开源码时,必须先指定tags文件,然后才可以正常使用)
set autochdir
自动切换当前目录为当前文件所在目录
(3)如何跳转:
Ctrl+]使光标跳转到函数、变量等被定义的地方
Ctrl+T
使光标跳转到函数、变量等被调用的地方
为了使用的方便,我们将(1)(3)中的命令映射为快捷键:
noremap <F2> :!ctags –R<CR>
noremap <F3> <C-]>
noremap <F4> <C-T>
五.taglist
1.taglist简介:
taglist(a source code browser)是一款基于ctags,在vim代码窗口旁以分割窗口形式显示当前的代码结构概览,增加代码浏览的便利程度的vim插件。Taglist提供了源码的结构化浏览功能,可以将源码中定义的类、函数、变量等以树结构显示,使得层次结构一目了然,便于快速定位和查看。2.taglist安装:
下载地址:www.vim.org/scripts/script.php?script_id=273你会得到一个压缩包:taglist_46.zip,解压后会得到两个文件夹:plugin/doc,分别存放了taglist脚本:taglist.vim和帮助文档:taglist.txt,将它们分别copy到“./vim/plugin”,“./vim/doc”文档下。
需要注意的是:taglist基于ctags才能发挥作用,因此在使用taglist之前请确保已经安装了ctags。
3.taglist相关配置:
let Tlist_Show_One_File=1不同时显示多个文件的tag,只显示当前文件的tag
let Tlist_File_Fold_Auto_Close=1
当同时显示多个文件的tag时,使taglist只显示当前文件的tag其他文件的tag被折叠起来
let Tlist_Enable_Fold_Column=1
显示折叠树
let Tlist_Exit_OnlyWindow=0
taglist为最后一个窗口时,退出vim
let Tlist_Sort_Type=“name”
taglist以tag名称进行排序,缺省时按tag在文件中出现的顺序排序
let Tlist_WinHeight=50
设置taglist窗口高度为50
let Tlist_WinWidth=30
设置taglist窗口宽度为30
六.quickfix
1.quickfix简介:
quickfix是vim默认的插件,无需安装即可使用。2.为何要用quickfix:
通常,我们在开发代码地过程中,经常要写代码、编译、修改编译错误,这个过程通常会重复很多遍。如果你仅仅根据编译器输出地错误信息,打开出错地文件,找到出错的行,然后再开始修改,那样效率未免也太低下了,所以人们开发出了quickfix作为vim 的标准插件,来帮助我们加速这一过程。3.quickfix功能:
将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,完成以后跳到下一个错误的地方继续修正,从而极大地提高了编译错误地修正效率。4.两个常用的切换命令:
:cn change to next(切换到下一个结果):cp change to previous(切换到上一个结果)
如果你经常使用这两个命令,你还可以给它们设定快捷键。
七.cscope
1.cscope简介:
cscope是一个类似于ctags的工具,不过其功能比ctags强大很多,用cscope自己的话说:“你可以把它当作超过频的ctags”,其功能和强大程度可见一斑!2.cscope安装:
sudo apt-get install cscope3.cscope配置:
我主要用cscope来向quickfix窗口输出编译错误的位置信息,在./vimrc文件中加上:“set cscopequickfix=s-,c-,d-,i-,t-,e-”。cscope的其他功能可以通过帮助手册自己慢慢学习。八.NERDtree
1. NERDtree简介:
NERDtree : a tree explorer plugin for navigating the filesystem.The NERDtree allows you to explore your filesystem and to open files and directories. It presents the filesystem to you in the form of a tree which you manipulatewith thekeyboard and/or mouse. It also allows you to perform simple filesystem operations.(from developers)
NERDtree的作用就是列出当前路径的目录树,让开发者能方便地浏览项目的总体目录结构,还可以创建删除重命名文件等。
2. NERDtree安装:
下载地址:www.vim.org/scripts/script.php?script_id=1658将下载得到的压缩包(NERD_tree.zip)解压到~/.vim文件夹里面,并且将plugin/NERD_tree.vim和doc/NERD_tree.txt分别copy到~/.vim/plugin和~/.vim/doc目录下。
九.minibufexpl
1.minibufexpl简介:
minibufexpl: elegant buffer explorer – takes very little screen space.(from develpoers)在编程的时候不可能永远只编辑一个文件,你肯定会打开很多源文件进行编辑,如果每个文件都打开一个vim进行编辑的话那操作起来会很麻烦,所以vim有了缓冲区(buffer)的概念,vim自带的buffer管理工具只有:ls,:bnext,:bdelet等命令,既不好用,又不直观,所以有大牛们就开发出了minibufexpl这款vim插件。
2.minibufexpl安装:
下载地址:www.vim.org/scripts/script.php?script_id=159将下载得到的minibufexpl.vim放在~/.vim/plugin文件夹下即可。
3.minibufexpl配置:
let g: miniBufExplMapWindowNavVim=1可以用<Ctrl>+hjkl切换到上下左右的不同窗口
let g: miniBufExplMapWindowNavArrows=1
可以用<Ctrl>+箭头切换到上下左右的不同窗口
let g: miniBufExplMapCTabswitchBufs=1
<Ctrl>+<Tab>向前循环切换到每个buffer名上
<Ctrl>+<Shift>+<Tab>向后循环切换到每个buffer名上
let g: miniBufExplModSelTarget=1
设置只在源码窗口打开选中的buffer(默认是关闭的)
十.winmanager
1.winmanager简介:
wimanager : a windows style IDE for vim(from developers)winmanager是一款vim插件,可以实现将vim整合成传统的IDE窗口界面,winmanger主要用来整合NERDtree和taglist,所以,首先确保成功安装了NERDtree和taglist.
2.winmanager安装:
下载地址:www.vim.org/scripts/script.php?script_id=95下载压缩包winmanager.zip,解压后将/plugin和/doc目录下的文件分别copy到~/.vim/plugin和~/.vim/doc文件夹中去即可。
3.winmanager配置:
let g:NERDtree_title=“[NERDtree]”let g:winManagerWindowLayout=“NERDtree|Taglist”
设置界面分割
let g:WinManagerWidth=30
设置winmanager的宽度为30
noremap <F10> :WMToggle<CR>
设置<F10>为打开/关闭winmanager的快捷键
还需要配置两个额外的函数:
在~/.vim/plugin目录下的winmanager.vim文件中找到以下函数定义,并且在第5行下添加第六行的内容:
十一.make/quit 快捷键设置
noremap <F9>:make<CR>设置<F9>为make快捷键(需要配合Makefile文件才能使用)
noremap <F12>:xa<CR>
设置<F12>为保存并退出vim快捷键
十二.Map简介
文中我们经常将一些命令组合映射为快捷键以方便我们操作,那么映射(map)究竟是怎么工作的呢?同vim中的其他命令一样,命令的名字往往有好几段组成,前缀作为命令本身的修饰符,起到微调命令的效果,对于map而言,主要有这么几种前缀:nore(no recursive) 表示非递归
n(normal) 表示在普通模式下生效
v(visual) 表示在可视化模式下生效
i(insert) 表示在插入模式下生效
c(command-line) 表示在命令行模式下生效
后记:
为了方便大家使用,本人已经将自己的.vimrc文件分享在github上(https://github.com/xzli8/vim-configuration).
本文参考了网络上许多博主的博文,感谢这些乐于分享的人们!总结经验并分享,方便大家,共同进步!如发现本文内容的谬误或者需要补充的地方,请联系作者(email:[email protected])。