1、vim是linux程序员编程的上古神器

Vim是Linux系统上的最著名的文本/代码编辑器,也是早年的Vi编辑器的加强版,被誉为文本/代码编辑器之中最为优秀经典的上古神器。 它之所以会获得如此美誉,我想主要有以下原因:1.它古老而神秘,学习曲线陡峭,难以驾驭,但是一旦学会则受益匪浅。如今被看作是高手、Geek们专用的编辑器。所以尽管 Vim 已经是古董级的软件,但还是有无数新人迎着困难去学习使用。 2.轻便,无需多言,当仅仅只需要对某一文本文件(比如脚本代码、配置文件)进行简单的编辑的时候,所使用的工具当然是越轻便越好。Vim同时也是阅读文本文件的利器。 3.经典巧妙的编辑方式及强大的功能。它全程使用键盘操作,用户必须记住一堆快捷键、按键组合以及各种命令才能开始使用,一旦使用熟练则编辑效率远超其余编辑器,而且具有各种插件、语法高亮、代码补全、配色方案等极其丰富的资源以及灵活的配置;


2、vim成也插件,败也插件

有人说,Vim是“成也插件、败也插件”。Vim灵活的配置和丰富的插件极大地增强了它的功能,但是也极大地增加了我们管理Vim的难度。首先,在使用Vim之前,必须经过适当的配置,而Vim的配置又极其繁琐。所以网上有很多诸如“万能配置”、“最强配置”的文章,这些都可以参考。但是这些文章中有些存在很多错误,甚至前后内容重复、冲突,而且这些文章是“授人以鱼,而不是授人以渔”,它们给出的配置虽然可以照抄,但是经常会让人不明所以。 Vim的插件丰富,在网上不乏使用各种插件将Vim配置成强大IDE的文章,但是Vim的插件管理非常困难,因为每安装一个插件,都需要将该插件的文件分别放到Vim安装路径下的plugin、autoload、syntax、doc等目录下。好在是Vundle横空出世,它不仅解决了Vim插件在文件系 统中分散的问题,同时能够自动搜索和下载插件。


3、关于vim的两个文件

1. viminfo

在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。这样为了方便下次处理,如:vim打开文件时,光标会自动在上次离开的位置显示。原来搜索过的字符串,新打开文件时自动高亮显示。
~/.viminfo 文件是系统自动生成。

2. vimrc

vimrc文件是vim的环境设置文件。整体的vim的设置是在 /etc/vimrc 文件中。不建议修改/etc/vimrc 文件,每个用户可以在用户根目录中设置vim,新建 ~/.vimrc. vim的配置选项较多,

:set all

可以查看所有的配置项。
常用配置:

:set nu
:set nonu  是否显示行号

:set wrap
:set nowrap  是否换行

:set hlsearch
:set nohlsearch 搜索是否高亮显示

:set autoindent
:set noautoindent 是否自动缩排

:set backup 是否自动备份修改文件,默认为否,如果set bakcup, 修改时会自动生成 filename~ 备份文件。

:set ruler 显示右下角状态栏
:set showmode 显示左下角状态栏,--INSERT--之类

:set 显示与系统默认值不同的值,

:syntax on
:syntax off 程序语法开关

:set bg=dark
:set bg=light 显示颜×××调


4、安装插件管理---vundle

github上的vundle:https://github.com/VundleVim/Vundle.vim

如果安装这个网页上全都有,因为是英文版的所以作为一个爱国的中国人的我,是泪流满面的才搞明白,这都是什么鬼,亲爱的读者~,麻烦各位去找百度亲妈,旗下的百度翻译还是阔以滴~


这个是我自己的.vimrc文件,虽然很简单,但是绝对是可以用的

//前半部分是github上大神给出的

//后半部分是学习并且总结

//有任何不懂得set后面的命令 

//eg: set scrolloff 可以利用

// : help 命令名 来查看具体是什么鬼

//前面的"是注释作用哦就像c语言的//

"关闭vim兼容模式,关闭vim所有扩展功能
set nocompatible
             
"关闭文件类型
filetype off                 

" 将vundle的路径添加到vim的路径中去
set rtp+=~/.vim/bundle/Vundle.vim

"执行vundle初始化
call vundle#begin()

" 让vundle管理vundle这个插件
Plugin 'VundleVim/Vundle.vim'

Plugin 'tpope/vim-fugitive'

"plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'

"plugin 'taglist.vim'
Plugin 'taglist.vim'

"plugin from 'thenerdtree'
Plugin 'nerdtree'

"plugin 'vim-airline-themes'
Plugin 'vim-airline/vim-airline-themes'

"plugin 'Valloric/YouCompleteMe'
Plugin 'Valloric/YouCompleteMe'

" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'

" git repos on your local machine (i.e. when working on your own plugin)
"Plugin 'file:///home/gmarik/path/to/plugin'

" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}

" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
"Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            

" To ignore plugin indent changes, instead use:
filetype plugin indent on    

" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just
" :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
" see :h vundle for more details or wiki for FAQ

"记录历史的行数
set history=1000
"显示标尺
set ruler
"设置行号
set number
"显示当前操作模式
set showmode
"总显示最后一个窗口的状态行
set laststatus=2
"设置命令行的高度 
set cmdheight=2
"光标移动到buffer的顶部和底部时保持3行距离
set scrolloff=3
"在被分割的窗口间显示空白,便于阅读
set fillchars=vert:/,stl:/,stlnc:/
"关闭错误响铃
set noerrorbells
"关闭使用可视响铃代替呼叫
set novisualbell
"当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声
set t_vb=
"启动的时候不显示那个援助索马里儿童的提示 
set shortmess=atI
"语法高亮
syntax on
"color molokai
"配色方案
colorscheme desert
"背景
set background=dark
"为光标所在行加下划线
set cursorline
"开启高亮光标列
set cursorcolumn
"可用空格删除
set backspace=2
"允许 backspace 和光标键跨越行边界(不建议)
set whichwrap+=<,>,h,l
"用空格代替tab
set expandtab
set smarttab
"将换行自动缩进设置成4个空格
set shiftwidth=4
"设置tab键为4个空格
set tabstop=4
"
set softtabstop=4
"把当前行的对齐格式应用到下一行
set autoindent
"在C编码时,自动完成indent缩进内嵌代码块
set cindent
let g:rehash256 = 1
let g:molokai_original = 1
" set the colorcolumn
 highlight ColorColumn ctermbg=237 guibg=gray30
 execute "set colorcolumn=" . join(map(range(2,259), '"+" . v:val'), ',')
"Files,backups and encoding
set nobackup
set noswapfile
set autoread
set autowrite
set autochdir
set fileencodings=utf-8
set fileformats=unix,dos,mac
filetype plugin on
filetype indent on
"
set showmatch
set matchtime=2
set hlsearch
set incsearch
set ignorecase
set smartcase
set magic
set lazyredraw
set nowrapscan
set iskeyword+=_,$,@,%,#,-,.
if has("gui_running")
    colorscheme solarized
endif
set guifont=DejaVu\Sans\Mono\15
set guioptions=aegic
"配置taglist
"让taglist出现在vim的左边
let Tlist_Use_Right_Window=1
"当同时显示多个文件的tag时,只显示当前文件,其他文件折叠
let Tlist_File_Fold_Auto_Close=1
"只显示一个文件中的tag,默认为显示多个
let Tlist_Show_One_File = 1
"Tag的排序规则,以名字排序。默认是以在文件中出现的顺序排序
let Tlist_Sort_Type = 'name' 
"Taglist窗口打开时,立刻切换为有焦点状态
let Tlist_GainFocus_On_ToggleOpen = 1 
"如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Exit_OnlyWindow = 1
"设置窗体宽度为32,可以根据自己喜好设置
let Tlist_WinWidth = 32
"这里比较重要了,设置ctags的位置
let Tlist_Ctags_='/bin/ctags'
"热键设置,我设置成ctrl+t来呼出和关闭Taglist
map <C-t> :TlistToggle<CR>
"设置the nerd tree为vim自动开启
autocmd vimenter * NERDTree
"当没有特定文件也能开启nerdtree
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif

"设置快捷键打开nerdtree:ctrl+n
map <C-n> :NERDTreeToggle<CR>

"关闭vim只有一个窗口打开资源管理器
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

"设置不同文件的不同高亮
function! NERDTreeHighlightFile(extension, fg, bg, guifg, guibg)
exec 'autocmd filetype nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg .' guibg='. a:guibg .' guifg='. a:guifg
exec 'autocmd filetype nerdtree syn match ' . a:extension .' #^\s\+.*'.a:extension .'$#'
endfunction
call NERDTreeHighlightFile('jade', 'green', 'none', 'green', '#151515')
call NERDTreeHighlightFile('ini', 'yellow', 'none', 'yellow', '#151515')
call NERDTreeHighlightFile('md', 'blue', 'none', '#3366FF', '#151515')
call NERDTreeHighlightFile('yml', 'yellow', 'none', 'yellow', '#151515')
call NERDTreeHighlightFile('config', 'yellow', 'none', 'yellow','#151515')
call NERDTreeHighlightFile('conf', 'yellow', 'none', 'yellow', '#151515')
call NERDTreeHighlightFile('json', 'yellow', 'none', 'yellow', '#151515')
call NERDTreeHighlightFile('html', 'yellow', 'none', 'yellow', '#151515')
call NERDTreeHighlightFile('styl', 'cyan', 'none', 'cyan', '#151515')
call NERDTreeHighlightFile('css', 'cyan', 'none', 'cyan', '#151515')
call NERDTreeHighlightFile('coffee', 'Red', 'none', 'red', '#151515')
call NERDTreeHighlightFile('js', 'Red', 'none', '#ffa500', '#151515')
call NERDTreeHighlightFile('php', 'Magenta', 'none', '#ff00ff', '#151515')
"设置这些变量在vim中
let g:NERDTreeDirArrowExpandable = ''
let g:NERDTreeDirArrowCollapsible = ''
let g:solarized_base16 = 1
"设置进度条主题
let g:airline_theme="luna" 
"这个是安装字体后 必须设置此项" 
let g:airline_powerline_fonts = 1   
"打开tabline功能,方便查看Buffer和切换,这个功能比较不错"
"我还省去了minibufexpl插件,因为我习惯在1个Tab下用多个buffer"
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
"
"设置切换Buffer快捷键"
nnoremap <C-N> :bn<CR>
nnoremap <C-P> :bp<CR>"
" 关闭状态显示空白符号计数,这个对我用处不大"
let g:airline#extensions#whitespace#enabled = 1
let g:airline#extensions#whitespace#symbol = '!'
"最新状态除非进行分匡不会出现(1分钟内),所以设为2,就会一直出现
set laststatus=2
"终端默认颜色8色,现在设成256色支持
set t_Co=256
"airline,默认是禁止的,所以需要加上下面这个语句
let g:airline#extensions#tabline#enabled = 1
"分离器可以确定独立的进度条,这里是你定义'|'键
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'


5、安装插件遇到的各种问题

问题1:英文看不懂(百度翻译)

问题2:目录不知道安哪里(一个是#下用户,一个是$下用户,一般都安装到$下的.virmc即可)

问题3:没有.vimrc文件怎么办(请follow me)

cd
vim .vimrc

问题4:安装不到我给出的路径(删了重新想想哪里出错了,一定要对着github上的装,别看博客,大部分除了,给两个命令直接安装,并不能帮你成为vim大神)

问题5:不过具体安装一个插件都要用(:PluginInstall 去安装)

看到Done!,你才能心安~~~~

问题6:初级,just like me,不要想着装个神级vim,配出花来,能用,且不难看,就等真正感受到vim编程的命令很熟悉之后,在去折腾吧~~~~

6、vim中大家都在装的插件有

(1)taglist:文件结构

(2)the nerd tree:资源管理器

(3)airline:状态条

 (4)ctrlP:查找工具

。。。。。。。。。。vim插件实在是太多了

各种下载或者git clone 请各位去github上search,排名最高的绝对是你要的~~~

7、我配好的Vim,不好勿喷,求送花

wKioL1dPDYnjOnmJAADDtMV2xKA438.png