" 到官网下载目录树导航NERDTree和标签导航Tlist, 将解压后的plugin和doc目录下的文件分别拷贝到~/.vim/plugin和~/.vim/doc下, ~/.vim下没有pugin和doc目录则" 自己创建.
"""""""""""""""""""""""""""""""""""""""""
" Author : lucasysfeng
" Email : lucasysfeng@gmail.com
" Blog : http://cnblogs.com/lucasysfeng
" ReadMe : README.md
" Version : 1.0 - Jan. 16,2014
" Contents : -> 基础配置设置
" -> 自定义快捷键
" -> 主题颜色显示
" -> 其它杂项配置
" -> 插件管理配置
" -> 自定义的函数
"""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""
" 基础配置设置
"""""""""""""""""""""""""""""""""""""""""
filetype on "检测文件类型
filetype indent on "针对不同的文件类型采用不同的缩进格式
filetype plugin on "允许插件
filetype plugin indent on "启动自动补全
set nu
"set relativenumber number "相对行号,可用Ctrl+n在相对/绝对行号间切换
set history=2000 "history存储长度
set nocompatible "非兼容vi模式,避免以前版本的一些bug和局限
set autoread "文件修改之后自动载入
set shortmess=atI "启动的时候不显示那个援助索马里儿童的提示
set t_ti= t_te= "退出vim后,内容显示在终端屏幕
set title "change the terminal's title
set novisualbell "don't beep
set noerrorbells "don't beep
set t_vb=
set tm=500
set mat=2 "Blink times every second when matching brackets
set showmatch "括号配对情况
set hidden "A buffer becomes hidden when it is abandoned
set wildmode=list:longest
set ttyfast
set wildignore=*.swp,*.,*.pyc,*.class
set scrolloff=7 "至少有7行在光标所在行上下
set mouse=a "为所有模式启用鼠标
set selection=old
set selectmode=mouse,key
set viminfo^=% "Remember info about open buffers on close
set magic "正则表达式匹配形式
set backspace=eol,start,indent "Configure backspace so it acts as it should act
set whichwrap+=<,>,h,l
" 搜索
"""""""""""""""""""""""""""""""""""""""""
set hlsearch "高亮search命中的文本。
set ignorecase "搜索时忽略大小写
set incsearch "随着键入即时搜索
set smartcase "有一个或以上大写字母时仍大小写敏感
" 折叠
"""""""""""""""""""""""""""""""""""""""""
set foldenable
set foldmethod=indent
set foldlevel=99
" 缩进
"""""""""""""""""""""""""""""""""""""""""
set smartindent "智能缩进
set autoindent "总是自动缩进
set tabstop=4 "设置Tab键的宽度(等同的空格个数)
set shiftwidth=4 "自动对齐的空格数
set softtabstop=4 "按退格键时可以一次删掉4个空格
set smarttab "insert tabs on the start of a line according to shiftwidth, not tabstop
set expandtab "将Tab自动转化成空格(需要输入真正的Tab键时,使用Ctrl+V+Tab)
set shiftround "Use multiple of shiftwidth when indenting with '<' and '>'
" 编码
"""""""""""""""""""""""""""""""""""""""""
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,chinese,big5,euc-jp,euc-kr,latin1
set fileencoding=utf-8
set helplang=cn
set termencoding=utf-8 "这句只影响普通模式 (非图形界面) 下的Vim
set ffs=unix,dos,mac "Use Unix as the standard file type
set formatoptions+=m "如遇Unicode值大于255的文本,不必等到空格再折行。
set formatoptions+=B "合并两行中文时,不在中间加空格:
" 语法
"""""""""""""""""""""""""""""""""""""""""
syntax enable "打开语法高亮
syntax on
" 撤销
"""""""""""""""""""""""""""""""""""""""""
"set undolevels=1000 "How many undos
"set undoreload=10000 "number of lines to save for undo
"if v:version >= 730
" set undofile "keep a persistent backup file
" set undodir=~/bak/vimundo/
"endif
" 状态栏
"""""""""""""""""""""""""""""""""""""""""
set ruler "显示当前的行号列号
set showcmd "在状态栏显示正在输入的命令
set showmode
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
set laststatus=2 "命令行(在状态行下)的高度,默认为1,这里是2
" 相对绝对行号
"""""""""""""""""""""""""""""""""""""""""
"autocmd FocusLost * :set norelativenumber number
"autocmd FocusGained * :set relativenumber
"autocmd InsertEnter * :set norelativenumber number
"autocmd InsertLeave * :set relativenumber
"set cursorline "突出显示当前行,可用Ctrl+m切换是否显示
"set cursorcolumn "突出显示当前列,可用Ctrl+m切换是否显示
"set backup "备份
" 退出插入模式时自动保存
"autocmd InsertLeave * :w!<ESC>
"""""""""""""""""""""""""""""""""""""""""
" 自定义快捷键
"""""""""""""""""""""""""""""""""""""""""
" 前导符号
"""""""""""""""""""""""""""""""""""""""""
let mapleader = ','
let g:mapleader = ','
" 常用快捷键
"""""""""""""""""""""""""""""""""""""""""
" 到行首行尾
noremap H ^
noremap L $
" 粘贴格式
noremap <leader>p :set paste<CR>i
noremap <leader>n :set nopaste<CR>
" 到光标所在行第一个非空字符
"map 0 ^
" 从光标处复制到行尾,不包括行尾结束符
map Y y$
" t/T增加空行
nmap t o<ESC>
nmap T O<ESC>
" 恢复撤销
nnoremap U <C-r>
" 保存
map <leader>w :w!<cr>
" 保存并退出当前窗口
map <leader>q :q<CR>
" 保存并挂起
map <leader>z :wa!<cr><C-z>
" 全选
map <C-a> ggVG
" 相对/绝对行号转换
noremap <C-n> :call NumberToggle()<cr>
cnoremap <C-n> :call NumberToggle()<cr>:
" 突出显示当前行/列开关
" map <C-m> :call CusorCulLineToggle()<cr>
" 打开/关闭全部折叠
map <leader>o zR
map <leader>c zM
" 连续按jf退出插入/命令行/可视模式
inoremap jk <ESC>l
cnoremap jk <ESC>l
vnoremap jf <ESC>l
" 选中状态下 Ctrl+c 复制
vmap <C-c> "+y
" 按;直接进入命令行模式
"nnoremap ; :
" 将光标所在行上移或下移一行
"nmap <S-k> :m-2<cr>
"nmap <S-j> :m+1<cr>
"vmap <S-k> :m-2<cr>
"vmap <S-j> :m+1<cr>
" 搜索查找快捷键
"""""""""""""""""""""""""""""""""""""""""
" 替换,匹配模式采用very magic
map \ :%s/\v
" 查找,匹配模式采用very magic
nnoremap / /\v
vnoremap / /\v
" 去掉查找后的高亮显示
noremap <silent><leader>/ :nohls<CR>
" 搜索的内容总是在屏幕中心显示
nnoremap <silent> n nzz
nnoremap <silent> N Nzz
nnoremap <silent> * *zz
nnoremap <silent> # #zz
nnoremap <silent> g* g*zz
" 普通模式(Nomal Mode)下快捷键
"""""""""""""""""""""""""""""""""""""""""
" 快速编辑重vimrc
nmap <silent> <leader>ev :e $MYVIMRC<CR>
nmap <silent> <leader>sv :so $MYVIMRC<CR>
" 快速滚屏
nnoremap <C-e> 2<C-e>
nnoremap <C-y> 2<C-y>
" 命令行模式(Command Line Mode)下快捷键
"""""""""""""""""""""""""""""""""""""""""
cnoremap <C-j> <t_kd>
cnoremap <C-k> <t_ku>
cnoremap <C-a> <Home>
cnoremap <C-e> <End>
" 功能键
"""""""""""""""""""""""""""""""""""""""""
" F6语法高亮快捷键
nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR>
" F7标签导航
"nnoremap <silent> <F7> :TlistToggle<CR>
nnoremap <leader>m :TlistToggle<CR>
" F8标签导航
"nmap <F8> :TagbarToggle<CR>
" 多窗口标签快捷键
"""""""""""""""""""""""""""""""""""""""""
" 在多个窗口间切换
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" Disbale paste mode when leaving insert mode
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove<cr>
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <C-r>=expand("%:p:h")<cr>/
" 杂项
"""""""""""""""""""""""""""""""""""""""""
" Disbale paste mode when leaving insert mode
set paste
autocmd InsertLeave * set nopaste
" w!! to sudo & write a file
cmap w!! w !sudo tee >/dev/null %
" Swap implementations of ` and ' jump to markers
" By default, ' jumps to the marked line, ` jumps to the marked line and
" column, so swap them
nnoremap ' `
nnoremap ` '
" Automatically reload vimrc when it's saved
autocmd BufWritePost .vimrc so ~/.vimrc
" ; can repeat fx/tx. so do not map it
nnoremap <leader>v V`}
"""""""""""""""""""""""""""""""""""""""""
" 主题颜色显示
"""""""""""""""""""""""""""""""""""""""""
" Set extra options when running in GUI mode
if has("gui_running")
set guifont=Monaco:h14
set guioptions-=T
set guioptions+=e
set guioptions-=r
set guioptions-=L
set guitablabel=%M\ %t
set showtabline=1
set linespace=2
set noimd
set t_Co=256
endif
" 修改主题和颜色展示
" colorscheme solarized
set background=dark
set t_Co=256
" colorscheme molokai
colorscheme desert
" 设置标记一列的背景颜色和数字一行颜色一致
hi! link SignColumn LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange
" 防止错误整行标红导致看不清
highlight clear SpellBad
highlight SpellBad term=standout ctermfg=1 term=underline cterm=underline
highlight clear SpellCap
highlight SpellCap term=underline cterm=underline
highlight clear SpellRare
highlight SpellRare term=underline cterm=underline
highlight clear SpellLocal
highlight SpellLocal term=underline cterm=underline
" settings for kien/rainbow_parentheses.vim
"autocmd VimEnter * RainbowParenthesesToggle
"autocmd Syntax * RainbowParenthesesLoadRound
"autocmd Syntax * RainbowParenthesesLoadSquare
"autocmd Syntax * RainbowParenthesesLoadBraces
"""""""""""""""""""""""""""""""""""""""""
" 其它杂项配置
"""""""""""""""""""""""""""""""""""""""""
autocmd! bufwritepost _vimrc source % "vimrc文件修改之后自动加载。 windows。
autocmd! bufwritepost .vimrc source % "vimrc文件修改之后自动加载。 linux。
"set completeopt=longest,menu "自动补全配置,让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
" 离开插入模式后自动关闭预览窗口
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif
" 回车即选中当前项
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
" 增强模式中的命令行自动完成操作
set wildmenu
" Ignore compiled files
" set wildignore=*.o,*~,*.pyc,*.class
" Python 文件的一般设置,比如不要tab等
autocmd FileType python set tabstop=4 shiftwidth=4 expandtab ai
" 如果不起作用,确定.viminfo是否可写
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
" 删除多余空格
func! DeleteTrailingWS()
exe "normal mz"
%s/\s\+$//ge
exe "normal `z"
endfunc
autocmd BufWrite *.py :call DeleteTrailingWS()
"""""""""""""""""""""""""""""""""""""""""
" 插件管理配置开始
"""""""""""""""""""""""""""""""""""""""""
" 开启目录树
nnoremap <silent> <F2> :NERDTreeToggle<CR>
" 标签导航
nnoremap <silent> <F8> :TlistToggle<CR>
let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
"let Tlist_Show_One_File = 1 " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow = 1 " 如果Taglist窗口是最后一个窗口则退出Vim
let Tlist_Use_Right_Window = 1 " 在右侧窗口中显示
let Tlist_File_Fold_Auto_Close = 1 " 自动折叠
let Tlist_Sort_Type = "name" " items in tags sorted by name
"""""""""""""""""""""""""""""""""""""""""
" 插件管理配置结束
"""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""
" 自定义的函数
"""""""""""""""""""""""""""""""""""""""""
" 相对绝对行号转换
function! NumberToggle()
if(&relativenumber == 1)
set norelativenumber number
else
set relativenumber
endif
endfunc
" 突出显示当前行列转换
function! CusorCulLineToggle()
if(&cursorcolumn == 1)
set nocursorcolumn
set nocursorline
else
set cursorcolumn
set cursorline
endif
endfunc
function! GoToFileEnd()
normal G
endfunc
""定义函数SetTitle,自动插入文件头
autocmd BufNewFile *.py,*.cpp,*.c,*.sh,*.java exec ":call SetTitle()"
function! SetTitle()
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline(1,"\#!/bin/bash")
call append(line("."), "\#############################################")
call append(line(".")+1, "\# Copyright(c) 2015 Tencent, all rights reserved")
call append(line(".")+2, "\# File : ".expand("%"))
call append(line(".")+3, "\# Author : lucasysfeng")
call append(line(".")+4, "\# Revision : ".strftime("%Y-%m-%-d %H:%M:%S"))
call append(line(".")+5, "\# Description :")
call append(line(".")+6, "\#############################################")
elseif &filetype == 'h'
call setline(1,"/****************************************************")
call append(line("."), "\# Copyright(c) 2015 Tencent, all rights reserved")
call append(line(".")+1, "\# File : ".expand("%"))
call append(line(".")+2, "\# Author : lucasysfeng")
call append(line(".")+3, "\# Revision : ".strftime("%Y-%m-%-d %H:%M:%S"))
call append(line(".")+4, "\# Description :")
call append(line(".")+5, "****************************************************/")
call append(line(".")+6, "#pragma once")
call append(line(".")+7, "")
elseif &filetype == 'cpp' || &filetype == 'c'
call setline(1,"/****************************************************")
call append(line("."), "\# Copyright(c) 2015 Tencent, all rights reserved")
call append(line(".")+1, "\# File : ".expand("%"))
call append(line(".")+2, "\# Author : lucasysfeng")
call append(line(".")+3, "\# Revision : ".strftime("%Y-%m-%-d %H:%M:%S"))
call append(line(".")+4, "\# Description :")
call append(line(".")+5, "****************************************************/")
call append(line(".")+6, "#include <stdio.h>")
call append(line(".")+7, "#include <iostream>")
call append(line(".")+8, "#include <string>")
call append(line(".")+9, "")
call append(line(".")+10, "using namespace std;")
call append(line(".")+11, "")
call append(line(".")+12, "int main()")
call append(line(".")+13, "{")
call append(line(".")+14, "")
call append(line(".")+15, " return 0;")
call append(line(".")+16,"}")
elseif &filetype == 'python'
call setline(1,"\#!/usr/bin/env python")
call append(line("."), "\# -*- coding: utf-8 -*-")
call append(line(".")+1, "\#############################################")
call append(line(".")+2, "\# Copyright(c) 2015 Tencent, all rights reserved")
call append(line(".")+3, "\# File : ".expand("%"))
call append(line(".")+4, "\# Author : lucasysfeng")
call append(line(".")+5, "\# Revision : ".strftime("%Y-%m-%-d %H:%M:%S"))
call append(line(".")+6, "\# Description :")
call append(line(".")+7, "\#############################################")
endif
"新建文件后,自动定位到文件末尾
"autocmd BufNewFile * exec ":call GoToFileEnd()"
call GoToFileEnd()
endfunc