一份 vim 配置文件

vim 可以通过更改配置文件调整功能,不同的人编辑习惯都不一样,所得到的配置文件也截然不同,因此每个人都有属于自己的 vim。通过更改配置文件,你可以更改键位、调整设置、更改外观,甚至可以将 vim 打造成一个 IDE(当然个人觉得需要用 IDE 的话,还不如去用一个真的 IDE)!调整自己的配置文件,能够使你的编辑效率进一步提高。

windows 中,vim 配置文件位于安装目录下,即 $VIM/_vimrc,比如我的配置文件位于 d:\Software\Vim\_vimrc 。

linux 中,配置文件位于 $HOME/.vimrc 。

以下是我的配置文件,供大家参考(在何姥爷给我的第一份配置上不断修改得来。感谢何姥爷带我入坑!!!)

(2018-3-3 更新)

"  适用于 Linux, Windows 10 上 Vundle 部分略有不同

"""""""""""""""""""""""""Vundle"""""""""""""""""""""""""
set nocompatible              " 去除 VI 一致性,必须
filetype off                  " 必须

" 设置包括 vundle 和初始化相关的 runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" 让 vundle 管理插件版本,必须
Plugin 'VundleVim/Vundle.vim'

" 请将安装插件的命令放在 vundle#begin 和 vundle#end 之间。

Plugin 'easymotion/vim-easymotion'
Plugin 'hotoo/pangu.vim'
Plugin 'iamcco/markdown-preview.vim'
Plugin 'jiangmiao/auto-pairs'
Plugin 'LaTeX-Suite-aka-Vim-LaTeX'
Plugin 'Markdown'
Plugin 'nelstrom/vim-markdown-folding'
Plugin 'nelstrom/vim-visual-star-search'
Plugin 'scrooloose/nerdcommenter'
Plugin 'Solarized'
Plugin 'tpope/vim-abolish'
Plugin 'tpope/vim-surround'
Plugin 'tpope/vim-unimpaired'

" 你的所有插件需要在下面这行之前
call vundle#end()            " 必须
"filetype plugin indent on    " 必须 加载 vim 自带和插件相应的语法和文件类型相关脚本
" 忽视插件改变缩进,可以使用以下替代:
filetype plugin on
"
" 简要帮助文档
" :PluginList       - 列出所有已配置的插件
" :PluginInstall    - 安装插件,追加 `!` 用以更新或使用 :PluginUpdate
" :PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存
" :PluginClean      - 清除未使用插件,需要确认;追加 `!` 自动批准移除未使用插件
"
" 查阅 :h vundle 获取更多细节和 wiki 以及 FAQ
" 将你自己的非插件片段放在这行之后
"""""""""""""""""""""""""Vundle"""""""""""""""""""""""""

" 设置文件编码格式
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1,gbk,gb18030,gk2312
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
" 解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 解决 console 提示信息输出乱码
language messages zh_CN.utf-8

" leader 键
let mapleader=","

" 大小写设置
set ignorecase
set infercase
set smartcase

" 当输入查找命令时,启用高亮
noremap n :set hlsearch<CR>n
noremap N :set hlsearch<CR>N
noremap / :set hlsearch<CR>/
noremap ? :set hlsearch<CR>?
noremap * *:set hlsearch<CR>
noremap # #:set hlsearch<CR>
" 当光标一段时间保持不动了,就禁用高亮
autocmd cursorhold * set nohlsearch
" <C-l>手动关闭高亮
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>
" 搜索的同时即时显示结果
set incsearch
" 按下 <leader>n 统计匹配个数
nnoremap <leader>n :set hlsearch<CR>:%s///gn<CR><C-o>

" gui 设置
set guifont=Consolas:h12:cANSI
" 不显示菜单、工具栏、滚动条
set guioptions-=TrLm
" 取消边框
set go=
" 指针显示
set mouse=a
" 显示光标位置、显示行号
set ruler
set number
" 光标和底部距离
set scrolloff=5
" 配色设置
" colors koehler
set t_Co=256
set background=dark
colorscheme solarized
" 浅色高亮当前行、列
set cursorline
set cursorcolumn

source $VIMRUNTIME/mswin.vim
behave mswin

" tab 键设置
set expandtab
set softtabstop=4
set tabstop=4
set shiftwidth=4

" public: 不缩进
set cino=g0

" 不备份
set nobackup

" 切换文件前不一定要保存当前文件,退出时询问是否保存
set hidden

" 记录光标位置,下次开启文件时移动光标至此
augroup resCur
autocmd!
autocmd BufReadPost * call setpos(".", getpos("'\""))
augroup END

" 打开文件时切换到文件目录
autocmd BufEnter * silent! lcd %:p:h

" 设置默认进制为十进制
set nrformats=

" 设置 Ex 命令缓存区长度
set history=1000

" 取消<C-V>快捷键以使用 Visual Block
unmap <C-V>
iunmap <C-V>
" 取消<C-A>快捷键以使用加减操作
unmap <C-A>
iunmap <C-A>

" 将命令行中输入的 %% 替换为当前目录
cnoremap <expr> %% getcmdtype() == ':' ? expand('%:p:h').'/' : '%%'

" 在命令行窗口 使用<C-p>和<C-n>完全替代<Up>和<Down>
cnoremap <C-P> <Up>
cnoremap <C-N> <Down>

" 补全菜单设置
set wildmode=list:full

" 将 f{char}的 back 操作映射到"\"上,","充当 leader
noremap \ ,

" pangu.vim 插件自动添加空格
autocmd BufWritePre *.markdown,*.md,*.text,*.txt,*.wiki,*.cnx call PanGuSpacing()

" 开启 matchit 插件,使用 % 匹配关键字
packadd! matchit

" <leader>s 打开、关闭拼写检查
nnoremap <leader>s :set invspell<CR>
" 拼写检查语言为中英文
set spelllang=en,cjk

" markdown-preview 插件相关设置
let g:mkdp_auto_close=0

map <F2> : call Save() <CR>
map <F4> : !echo % <CR>
map <F5> : !gdb --quiet %< <CR>
map <F7> : call Compile() <CR>
map <F8> : !bash check.sh <CR>
map <F9> : call Run() <CR>
map <F10> : !%<.exe <.in <CR>

syn keyword Type dint
syn keyword Special PROC
syn keyword Special lld
filetype plugin indent on
syntax enable

"set makeprg=g++\ %\ -o\ %<\ -g\ -Wall\ -Wextra\ -DLAEKOV_LOCAL
func Save()
if &filetype=='javascript'
    set expandtab
endif
call Highlight_marks()
exec "w"
endfunc

func Highlight_marks()
" 标记 NOTE
exec "match PmenuSbar /NOTE/"
endfunc
call Highlight_marks()

func Compile()
exec "w"
if &filetype=='cpp'
    exec "!g++ % -o %< -std=c++0x -g -Wall -Wextra -DLAEKOV_LOCAL && size %<.exe"
elseif &filetype=='c'
    exec "!gcc %  -o %< -g"
elseif &filetype=='pascal'
    exec "!fpc % -g"
elseif &filetype=='sh'
    exec "!chmod +x %"
elseif &filetype=='java'
    exec "!javac %"
elseif &filetype=='tex'
    exec "!xelatex %"
endif
endfunc

func Run()
if &filetype=='python'
    exec "!python %"
elseif &filetype=='sh'
    exec "!bash %"
elseif &filetype=='java'
    exec "!java Main"
elseif &filetype=='html'
    exec "!open ./%"
elseif &filetype=='tex'
    exec "!open %<.pdf"
elseif &filetype=='javascript'
    exec "!node %"
elseif &filetype=='markdown'
    exec "MarkdownPreview"
else
    exec "!%<.exe"
endif
endfunc

""""""""""""""""""""""LaTeX Suit""""""""""""""""""""""
" REQUIRED. This makes vim invoke Latex-Suite when you open a tex file.
filetype plugin on

" IMPORTANT: win32 users will need to have 'shellslash' set so that latex
" can be called correctly.
set shellslash

" IMPORTANT: grep will sometimes skip displaying the file name if you
" search in a singe file. This will confuse Latex-Suite. Set your grep
" program to always generate a file-name.
set grepprg=grep\ -nH\ $*

" OPTIONAL: This enables automatic indentation as you type.
filetype indent on

" OPTIONAL: Starting with Vim 7, the filetype of empty .tex files defaults to
" 'plaintex' instead of 'tex', which results in vim-latex not being loaded.
" The following changes the default filetype back to 'tex':
let g:tex_flavor='latex'
""""""""""""""""""""""LaTeX Suit""""""""""""""""""""""

tandf

Tsinghua University, Department of Automation
One thing at a time. One thing done well.