"========================================== " Author: wklken " Version: 8.0 " Email: [email protected] " BlogPost: http://wklken.me " ReadMe: README.md " Donation: http://www.wklken.me/pages/donation.html " Last_modify: 2014-10-02 " Sections: " -> Initial Plugin 加载插件 " -> General Settings 基础设置 " -> Display Settings 展示/排版等界面格式设置 " -> FileEncode Settings 文件编码设置 " -> Others 其它配置 " -> HotKey Settings 自定义快捷键 " -> FileType Settings 针对文件类型的设置 " -> Theme Settings 主题设置 " " -> 插件配置和具体设置在vimrc.bundles中 "========================================== "========================================== " Initial Plugin 加载插件 "========================================== " 修改leader键 let mapleader = ',' let g:mapleader = ',' " 开启语法高亮 syntax on " install Vundle bundles if filereadable(expand("~/.vimrc.bundles")) source ~/.vimrc.bundles endif " ensure ftdetect et al work by including this after the Vundle stuff filetype plugin indent on "========================================== " General Settings 基础设置 "========================================== "以下配置有详细说明,一些特性不喜欢可以直接注解掉 "set guifont=Monaco:h20 " 字体 && 字号 " history存储容量 set history=2000 "检测文件类型 filetype on "针对不同的文件类型采用不同的缩进格式 filetype indent on "允许插件 filetype plugin on "启动自动补全 filetype plugin indent on set autoread " 文件修改之后自动载入。 set shortmess=atI " 启动的时候不显示那个援助索马里儿童的提示 " 备份,到另一个位置. 防止误删, 目前是取消备份 "set backup "set backupext=.bak "set backupdir=/tmp/vimbk/ " 取消备份。 视情况自己改 set nobackup " 关闭交换文件 set noswapfile "create undo file if has('persistent_undo') set undolevels=1000 " How many undos set undoreload=10000 " number of lines to save for undo set undofile " So is persistent undo ... set undodir=/tmp/vimundo/ endif set wildignore=*.swp,*.bak,*.pyc,*.class,.svn " 突出显示当前行等 set cursorcolumn set cursorline " 突出显示当前行 "设置 退出vim后,内容显示在终端屏幕, 可以用于查看和复制 "好处:误删什么的,如果以前屏幕打开,可以找回 set t_ti= t_te= "- 则点击光标不会换,用于复制 set mouse-=a " 鼠标暂不启用, 键盘党.... " set mouse=a " Automatically enable mouse usage " set mousehide " Hide the mouse cursor while typing " 修复ctrl+m 多光标操作选择的bug,但是改变了ctrl+v进行字符选中时将包含光标下的字符 "set selection=exclusive set selection=inclusive set selectmode=mouse,key " No annoying sound on errors " 去掉输入错误的提示声音 set title " change the terminal's title set novisualbell " don't beep set noerrorbells " don't beep set t_vb= set tm=500 " Remember info about open buffers on close" set viminfo^=% " For regular expressions turn magic on set magic " Configure backspace so it acts as it should act set backspace=eol,start,indent set whichwrap+=<,>,h,l "========================================== " Display Settings 展示/排版等界面格式设置 "========================================== " "显示当前的行号列号: set ruler ""在状态栏显示正在输入的命令 set showcmd " 左下角显示当前vim模式 set showmode " 在上下移动光标时,光标的上方或下方至少会保留显示的行数 set scrolloff=7 " set winwidth=79 " 命令行(在状态行下)的高度,默认为1,这里是2 set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P " Always show the status line - use 2 lines for the status bar set laststatus=2 "显示行号: set number " 取消换行。 set nowrap " 括号配对情况,跳转并高亮一下匹配的括号 set showmatch " How many tenths of a second to blink when matching brackets set matchtime=2 "设置文内智能搜索提示 " 高亮search命中的文本。 set hlsearch " 打开增量搜索模式,随着键入即时搜索 set incsearch " 搜索时忽略大小写 set ignorecase " 有一个或以上大写字母时仍大小写敏感 set smartcase " ignore case if search pattern is all lowercase, case-sensitive otherwise " 代码折叠 set foldenable " 折叠方法 " manual 手工折叠 " indent 使用缩进表示折叠 " expr 使用表达式定义折叠 " syntax 使用语法定义折叠 " diff 对没有更改的文本进行折叠 " marker 使用标记进行折叠, 默认标记是 {{{ 和 }}} set foldmethod=indent set foldlevel=99 " 缩进配置 set smartindent " Smart indent set autoindent " 打开自动缩进 " never add copyindent, case error " copy the previous indentation on autoindenting " tab相关变更 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 按退格键时可以一次删掉 4 个空格 set expandtab " 将Tab自动转化成空格 [需要输入真正的Tab键时,使用 Ctrl+V + Tab] set shiftround " 缩进时,取整 use multiple of shiftwidth when indenting with '<' and '>' " A buffer becomes hidden when it is abandoned set hidden set wildmode=list:longest set ttyfast " 00x增减数字时使用十进制 set nrformats= " 相对行号 行号变成相对,可以用 nj nk 进行跳转 5j 5k 上下跳5行 set relativenumber number au FocusLost * :set norelativenumber number au FocusGained * :set relativenumber " 插入模式下用绝对行号, 普通模式下用相对 autocmd InsertEnter * :set norelativenumber number autocmd InsertLeave * :set relativenumber function! NumberToggle() if(&relativenumber == 1) set norelativenumber number else set relativenumber endif endfunc nnoremap <C-n> :call NumberToggle()<cr> "========================================== " FileEncode Settings 文件编码,格式 "========================================== " 设置新文件的编码为 UTF-8 set encoding=utf-8 " 自动判断编码时,依次尝试以下编码: set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 set helplang=cn "set langmenu=zh_CN.UTF-8 "set enc=2byte-gb18030 " 下面这句只影响普通模式 (非图形界面) 下的 Vim。 set termencoding=utf-8 " Use Unix as the standard file type set ffs=unix,dos,mac " 如遇Unicode值大于255的文本,不必等到空格再折行。 set formatoptions+=m " 合并两行中文时,不在中间加空格: set formatoptions+=B "========================================== " others 其它设置 "========================================== autocmd! bufwritepost _vimrc source % " vimrc文件修改之后自动加载。 windows。 autocmd! bufwritepost .vimrc source % " vimrc文件修改之后自动加载。 linux。 " 自动补全配置 "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228) set completeopt=longest,menu " 增强模式中的命令行自动完成操作 set wildmenu " Ignore compiled files set wildignore=*.o,*~,*.pyc,*.class "离开插入模式后自动关闭预览窗口 autocmd InsertLeave * if pumvisible() == 0|pclose|endif "回车即选中当前项 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "上下左右键的行为 会显示其他信息 inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>" inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>" inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>" inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>" " if this not work ,make sure .viminfo is writable for you if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif "========================================== " HotKey Settings 自定义快捷键设置 "========================================== " 主要按键重定义 " 关闭方向键, 强迫自己用 hjkl map <Left> <Nop> map <Right> <Nop> map <Up> <Nop> map <Down> <Nop> "Treat long lines as break lines (useful when moving around in them) "se swap之后,同物理行上线直接跳 nnoremap k gk nnoremap gk k nnoremap j gj nnoremap gj j " F1 - F6 设置 " F1 废弃这个键,防止调出系统帮助 " F2 行号开关,用于鼠标复制代码用 " F3 显示可打印字符开关 " F4 换行开关 " F5 粘贴模式paste_mode开关,用于有格式的代码粘贴 " F6 语法开关,关闭语法可以加快大文件的展示 " I can type :help on my own, thanks. Protect your fat fingers from the evils of <F1> noremap <F1> <Esc>" ""为方便复制,用<F2>开启/关闭行号显示: function! HideNumber() if(&relativenumber == &number) set relativenumber! number! elseif(&number) set number! else set relativenumber! endif set number? endfunc nnoremap <F2> :call HideNumber()<CR> nnoremap <F3> :set list! list?<CR> nnoremap <F4> :set wrap! wrap?<CR> "set paste set pastetoggle=<F5> " when in insert mode, press <F5> to go to " paste mode, where you can paste mass data " that won't be autoindented " disbale paste mode when leaving insert mode au InsertLeave * set nopaste nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR> "Smart way to move between windows 分屏窗口移动 map <C-j> <C-W>j map <C-k> <C-W>k map <C-h> <C-W>h map <C-l> <C-W>l " Go to home and end using capitalized directions noremap H ^ noremap L $ "Map ; to : and save a million keystrokes " ex mode commands made easy 用于快速进入命令行 nnoremap ; : " 命令行模式增强,ctrl - a到行首, -e 到行尾 cnoremap <C-j> <t_kd> cnoremap <C-k> <t_ku> cnoremap <C-a> <Home> cnoremap <C-e> <End> " 搜索相关 " Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search) map <space> / " 进入搜索Use sane regexes" nnoremap / /\v vnoremap / /\v "Keep search pattern at the center of the screen." nnoremap <silent> n nzz nnoremap <silent> N Nzz nnoremap <silent> * *zz nnoremap <silent> # #zz nnoremap <silent> g* g*zz " switch # * nnoremap # * nnoremap * # " 去掉搜索高亮 noremap <silent><leader>/ :nohls<CR> " --------tab/buffer相关 "Use arrow key to change buffer" " TODO: 如何跳转到确定的buffer? " :b1 :b2 :bf :bl nnoremap [b :bprevious<cr> nnoremap ]b :bnext<cr> noremap <left> :bp<CR> noremap <right> :bn<CR> " tab 操作 " TODO: ctrl + n 变成切换tab的方法 " http://vim.wikia.com/wiki/Alternative_tab_navigation " http://stackoverflow.com/questions/2005214/switching-to-a-particular-tab-in-vim "map <C-2> 2gt map <leader>th :tabfirst<cr> map <leader>tl :tablast<cr> map <leader>tj :tabnext<cr> map <leader>tk :tabprev<cr> map <leader>tn :tabnext<cr> map <leader>tp :tabprev<cr> map <leader>te :tabedit<cr> map <leader>td :tabclose<cr> map <leader>tm :tabm<cr> " 新建tab Ctrl+t nnoremap <C-t> :tabnew<CR> inoremap <C-t> <Esc>:tabnew<CR> " TODO: 配置成功这里, 切换更方便, 两个键 " nnoremap <C-S-tab> :tabprevious<CR> " nnoremap <C-tab> :tabnext<CR> " inoremap <C-S-tab> <Esc>:tabprevious<CR>i " inoremap <C-tab> <Esc>:tabnext<CR>i " nnoremap <C-Left> :tabprevious<CR> " nnoremap <C-Right> :tabnext<CR> " normal模式下切换到确切的tab noremap <leader>1 1gt noremap <leader>2 2gt noremap <leader>3 3gt noremap <leader>4 4gt noremap <leader>5 5gt noremap <leader>6 6gt noremap <leader>7 7gt noremap <leader>8 8gt noremap <leader>9 9gt noremap <leader>0 :tablast<cr> " Toggles between the active and last active tab " " The first tab is always 1 " let g:last_active_tab = 1 " nnoremap <leader>gt :execute 'tabnext ' . g:last_active_tab<cr> " nnoremap <silent> <c-o> :execute 'tabnext ' . g:last_active_tab<cr> " vnoremap <silent> <c-o> :execute 'tabnext ' . g:last_active_tab<cr> nnoremap <silent> <leader>tt :execute 'tabnext ' . g:last_active_tab<cr> vnoremap <silent> <leader>tt :execute 'tabnext ' . g:last_active_tab<cr> autocmd TabLeave * let g:last_active_tab = tabpagenr() " ------- 选中及操作改键 "Reselect visual block after indent/outdent.调整缩进后自动选中,方便再次操作 vnoremap < <gv vnoremap > >gv " y$ -> Y Make Y behave like other capitals map Y y$ " select all map <Leader>sa ggVG" " select block nnoremap <leader>v V`} " w!! to sudo & write a file cmap w!! w !sudo tee >/dev/null % " kj 替换 Esc inoremap kj <Esc> " 滚动Speed up scrolling of the viewport slightly nnoremap <C-e> 2<C-e> nnoremap <C-y> 2<C-y> "Jump to start and end of line using the home row keys " 增强tab操作, 导致这个会有问题, 考虑换键 "nmap t o<ESC>k "nmap T O<ESC>j " Quickly close the current window nnoremap <leader>q :q<CR> " 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 ` ' " remap U to <C-r> for easier redo nnoremap U <C-r> " Quickly edit/reload the vimrc file nmap <silent> <leader>ev :e $MYVIMRC<CR> nmap <silent> <leader>sv :so $MYVIMRC<CR> "========================================== " FileType Settings 文件类型设置 "========================================== " Python 文件的一般设置,比如不要 tab 等 autocmd FileType python set tabstop=4 shiftwidth=4 expandtab ai autocmd FileType ruby set tabstop=2 shiftwidth=2 softtabstop=2 expandtab ai " 保存python文件时删除多余空格 fun! <SID>StripTrailingWhitespaces() let l = line(".") let c = col(".") %s/\s\+$//e call cursor(l, c) endfun autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces() " 定义函数AutoSetFileHead,自动插入文件头 autocmd BufNewFile *.sh,*.py exec ":call AutoSetFileHead()" function! AutoSetFileHead() "如果文件类型为.sh文件 if &filetype == 'sh' call setline(1, "\#!/bin/bash") endif "如果文件类型为python if &filetype == 'python' call setline(1, "\#!/usr/bin/env python") call append(1, "\# encoding: utf-8") endif normal G normal o normal o endfunc " F10 to run python script nnoremap <buffer> <F10> :exec '!python' shellescape(@%, 1)<cr> "========================================== " Theme Settings 主题设置 "========================================== " Set extra options when running in GUI mode if has("gui_running") set guifont=Monaco:h14 if has("gui_gtk2") "GTK2 set guifont=DejaVu\ Sans\ Mono\ 10 endif 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 " theme主题 set background=dark "colorscheme solarized set t_Co=256 "colorscheme molokai colorscheme desert "设置标记一列的背景颜色和数字一行颜色一致 hi! link SignColumn LineNr hi! link ShowMarksHLl DiffAdd hi! link ShowMarksHLu DiffChange "" for error highlight,防止错误整行标红导致看不清 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