1 filetype off 2 3 " 生成每个插件的帮助标签文件 tags 4 " 使用pathogen管理插件目录 5 call pathogen#runtime_append_all_bundles() 6 "call pathogen#helptags() 7 8 " 设置 Vim 内部使用的字符编码 9 set encoding=utf-8 10 set fileencoding=utf-8 11 set fileencodings=utf-8,chinese,ucs-bom 12 set termencoding=utf-8 13 set nobomb 14 15 "------------------------------------------------------------------------------ 16 " 环境相关配置 17 "------------------------------------------------------------------------------ 18 19 " Windows环境 20 if has('win32') && has('gui_win32') && has('gui_running') 21 22 " 配置文件变量 23 let g:my_vimrc = $HOME.'\vimfiles\vimrc' 24 let g:vimrc_home = $HOME.'\vimfiles' 25 26 " 设置语言为英语 27 lang english 28 29 " 改变当前工作目录为“桌面” 30 cd $HOME/桌面 31 " 设置英文字体 32 set guifont=Bitstream_Vera_Sans_Mono:h10.5:cANSI 33 " 设置中文字体 34 set guifontwide=Yahei_Mono:h10.5:cANSI 35 " 启动时最大化窗口 36 autocmd GUIEnter * simalt ~x 37 38 " 高亮光标所在的屏幕行 39 set cursorline 40 41 " 使用CTRL-X,CTRL-C 和 CTRL-V 这些标准的 MS-Windows 操作方式 42 source $VIMRUNTIME/mswin.vim 43 44 " Linux环境 45 elseif has('unix') 46 47 " 配置文件变量 48 let g:my_vimrc = $HOME.'/.vim/vimrc' 49 let g:vimrc_home = $HOME.'/.vim' 50 51 " 不高亮光标所在的屏幕行 52 set nocursorline 53 endif 54 55 "------------------------------------------------------------------------------ 56 " 自动命令 57 "------------------------------------------------------------------------------ 58 59 " 保存配置文件时自动重新载入配置 60 autocmd! BufWritePost vimrc exec 'source '.g:my_vimrc 61 62 " VIM失去焦点时自动保存所有文件 63 "autocmd FocusLost * :wa 64 65 "------------------------------------------------------------------------------ 66 " 选项设置 67 "------------------------------------------------------------------------------ 68 69 " 不兼容vi 70 set nocompatible 71 " 备份文件存放目录 72 exec 'set backupdir='.fnameescape(g:vimrc_home.'/.vim_backup/') 73 "" swap文件存放目录 74 exec 'set directory='.fnameescape(g:vimrc_home.'/.vim_swap//') 75 "" 持久撤销文件存放目录 76 exec 'set undodir='.fnameescape(g:vimrc_home.'/.vim_undo/') 77 " 覆盖文件前不创建一个备份 78 set backup 79 " 持久撤销功能 80 set undofile 81 " 显示折叠列 82 set foldcolumn=3 83 " 在窗口里开始编辑一个缓冲区时设置 'foldlevel'。用于开始编辑时总是关闭所有的折叠 (值为零),关闭某些折叠 (1) 或者没有折叠 (99)。 84 set foldlevelstart=99 85 " 设置折叠级别: 高于此级别的折叠会被关闭 86 set foldlevel=99 87 " 文件里的 <Tab> 代表的空格数 88 set tabstop=4 89 " (自动) 缩进每一步使用的空白数目 90 set shiftwidth=4 91 " 执行编辑操作,如插入 <Tab> 或者使用 <BS> 时,把 <Tab> 算作空格的数目 92 set softtabstop=4 93 " 不用空格展开<Tab> 94 set noexpandtab 95 " 光标上下两侧最少保留的屏幕行数 96 set scrolloff=5 97 " 如果设置 'nowrap',光标左右两侧保留的最少屏幕列数 98 set sidescrolloff=5 99 " 水平滚动时滚动的最少列数 100 set sidescroll=1 101 " 开启新行时 (插入模式下输入 <cr>,或者使用 "o" 或 "O" 命令),从当前行复制缩进距离 102 set autoindent 103 " 在插入、替换和可视模式里,在最后一行提供消息 104 set showmode 105 " 在屏幕最后一行显示 (部分的) 命令 106 set showcmd 107 " 放弃时隐藏缓冲区 108 set hidden 109 " 'wildmenu' 打开时,命令行补全以增强模式运行 110 set wildmenu 111 " 用 'widechar' 指定的字符所用的补全模式 112 set wildmode=list:longest 113 " 不使用可视响铃 114 set novisualbell 115 " 表明使用的是快速终端连接 116 set ttyfast 117 " 显示光标位置的行号和列号,逗号分隔 118 set ruler 119 " 影响 <BS>、<Del>、CTRL-W 和 CTRL-U 在插入模式下的工作方式 120 set backspace=indent,eol,start 121 " 总是显示状态行 122 set laststatus=2 123 " 在每行前面显示行号 124 set number 125 " 行号使用的最小列数 126 set numberwidth=3 127 " 语法高亮项目指定折叠 128 set foldmethod=syntax 129 " 搜索模式里忽略大小写 130 set ignorecase 131 " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项 132 set smartcase 133 " 如果打开,":substitute" 的 'g' 标志位缺省打开。这意味着所有的行内匹配都被替换,而不是只有一个。 134 set gdefault 135 " 输入搜索命令时,显示目前输入的模式的匹配位置。匹配的字符串被高亮 136 set incsearch 137 " 插入括号时,短暂地跳转到匹配的对应括号 138 set showmatch 139 " 如果有上一个搜索模式,高亮它的所有匹配 140 set hlsearch 141 " 不自动换行 142 set nowrap 143 " 插入文本的最大宽度 144 "set textwidth=80 145 " 描述自动排版如何进行的字母序列 146 set formatoptions+=q 147 set formatoptions+=r 148 set formatoptions+=n 149 set formatoptions+=1 150 "set colorcolumn=+1 151 set list 152 set listchars=tab:>-,trail:-,extends:>,precedes:< 153 set guioptions-=m "删除菜单栏 154 set guioptions-=T "删除工具栏 155 set guioptions-=r "删除右边的滚动条 156 set guioptions-=R "如有垂直分割的窗口,删除右边的滚动条 157 set guioptions-=l "删除左边的滚动条 158 set guioptions-=L "如有垂直分割的窗口,删除左边的滚动条 159 " 关键字补全,扫描 'dictionary' 选项给出的文件 160 set complete+=k 161 " ":" 命令的历史和最近的搜索模式的历史会被记住。本选项决定每个历史分别记住多少项 (见 |cmdline-editing|)。 162 set history=1000 163 " 文件名补全时忽略.svn 164 set wildignore+=*.svn 165 " 窗口的分割会把新窗口放到当前窗口之下 166 set nosplitbelow 167 " 窗口的分割会把新窗口放到当前窗口之右 168 set nosplitright 169 " 状态栏 170 set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L,\ col\ %c) 171 " 设为 "dark" 时,Vim 试图使用深色背景上看起来舒服的颜色 172 set background=dark 173 " 在可视模式下可以选择一个方块 174 set virtualedit+=block 175 " 如果发现文件在 Vim 之外修改过而在 Vim 里面没有的话,自动重新读入。 176 set autoread 177 " 命令行使用的屏幕行数 178 set cmdheight=1 179 " 设置<EOL>格式 180 set fileformat=unix 181 " 设置<EOL>格式 182 set fileformats=unix,dos 183 184 "------------------------------------------------------------------------------ 185 " Learder键映射 186 "------------------------------------------------------------------------------ 187 188 " 要定义一个使用 "mapleader" 变量的映射,可以使用特殊字串 "<Leader>" 189 let mapleader = "," 190 " <LocalLeader> 和 <Leader> 类似,除了它使用 "maplocalleader" 而非 "mapleader"以外 191 let maplocalleader = "\\" 192 193 " ,e 垂直分割,窗口快速编辑VIM配置文件 194 nnoremap <leader>e <C-w><C-v><C-l>:exec 'e! '.g:my_vimrc<cr> 195 196 " ,<cr> 取消高亮 197 nnoremap <leader><cr> :nohlsearch<cr> 198 199 " ,l 关闭Tab,行尾空格的显示 200 nnoremap <leader>l :set list!<cr> 201 202 " ,w 保存文件 203 nnoremap <leader>w :w<cr> 204 205 " ,q 退出 206 nnoremap <leader>q :q<cr> 207 208 " ,W 删除所有的行尾的空格 209 nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<cr> 210 211 " ,a Ack插件快捷键 212 nnoremap <leader>a :Ack 213 214 " ,v 重选刚粘贴的文本,以便进行其他操作(如缩进) 215 nnoremap <leader>v gv 216 217 " 垂直分割窗口,并切换过去 218 nnoremap <leader>s <C-w>v<C-w>l 219 220 " ,r 同步文件到体验环境 221 222 nnoremap <leader>r :!./my_sync.sh<cr><cr> 223 224 " ,e 垂直分割,窗口快速编辑VIM配置文件 225 nnoremap <leader>R <C-w><C-v><C-l>:e! ./my_sync.sh<cr> 226 227 " Grep插件 228 nnoremap <leader>sp :Grep<cr> 229 230 "设置快捷键将选中文本块复制至系统剪贴板 231 vnoremap <leader>y "+y 232 233 "设置快捷键将系统剪贴板内容粘贴至Vim 234 "nnoremap <Leader>p "+p 235 236 nnoremap <Leader>n :cn<cr> 237 nnoremap <Leader>p :cp<cr> 238 239 "------------------------------------------------------------------------------ 240 " 功能键映射 241 "------------------------------------------------------------------------------ 242 243 map <F1> :NERDTreeToggle<cr> 244 245 " 防止想按Esc时不小心按到了F1 246 inoremap <F1> <ESC> 247 vnoremap <F1> <ESC> 248 249 " 切换MiniBufExplorer的显示 250 nnoremap <F2> :TMiniBufExplorer<CR> 251 252 " 切换到MiniBufExplorer 253 nnoremap <F3> :MiniBufExplorer<CR> 254 255 " 切换TagList的显示 256 nnoremap <F4> :TlistToggle<CR> 257 258 " 打开URL/文件/目录/电子邮件地址 259 inoremap <F6> <C-o>:Open<CR> 260 nnoremap <F6> :Open<CR> 261 262 " 切换粘贴模式 263 nnoremap <F8> :set invpaste paste?<CR> 264 inoremap <F8> <esc>:set invpaste paste?<CR>a 265 266 " 切换Yank Ring的显示 267 nnoremap <silent> <F10> :YRShow<cr> 268 inoremap <silent> <F10> <ESC>:YRShow<cr> 269 270 " 全屏 271 inoremap <F11> <C-o>:Fullscreen<CR> 272 nnoremap <F11> :Fullscreen<CR> 273 274 " 在.cpp/.c和.h文件间切换 275 nnoremap <F12> <Esc>:A<CR> 276 277 "------------------------------------------------------------------------------ 278 " 其他键映射 279 "------------------------------------------------------------------------------ 280 281 " 使用 "\v" 会使得其后的模式中所有 '0'-'9','a'-'z','A'-'Z' 和 '_' 之外的字符都当作特殊字符解释 282 nnoremap / /\v 283 vnoremap / /\v 284 " 用Tab跳转到匹配的括号 285 map <tab> % 286 287 " 自动换行时可在行中移动 288 nnoremap j gj 289 nnoremap k gk 290 291 " ;号等同于:号 292 nnoremap ; : 293 294 " 用jj代替ESC 295 inoremap jj <ESC> 296 297 " 在分割的窗口间移动 298 nnoremap <C-h> <C-w>h 299 nnoremap <C-j> <C-w>j 300 nnoremap <C-k> <C-w>k 301 nnoremap <C-l> <C-w>l 302 303 " phpDocumentor for Vim 304 inoremap <C-P> <ESC>:call PhpDocSingle()<CR>i 305 nnoremap <C-P> :call PhpDocSingle()<CR> 306 vnoremap <C-P> :call PhpDocRange()<CR> 307 308 " 在buffer间移动 309 noremap <S-h> :bp<cr> 310 noremap <S-l> :bn<cr> 311 312 " 增减窗口尺寸 313 map + <C-w>+ 314 map _ <C-w>- 315 316 " 用<tab>缩进 317 "nmap <tab> >> 318 "nmap <s-tab> << 319 "vmap <tab> > 320 "vmap <s-tab> < 321 322 "------------------------------------------------------------------------------ 323 " 插件设置 324 "------------------------------------------------------------------------------ 325 326 " taglist 327 let Tlist_Auto_Open = 0 328 let Tlist_Auto_Update = 1 329 let Tlist_Hightlight_Tag_On_BufEnter = 1 330 let Tlist_Show_One_File = 1 " 只显示当前文件 331 let Tlist_Enable_Fold_Column = 0 332 let Tlist_File_Fold_Auto_Close = 0 333 let Tlist_Process_File_Always = 1 334 let Tlist_Display_Prototype = 0 335 let Tlist_Compact_Format = 1 336 let Tlist_Use_Right_Window = 0 337 let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim 338 let tlist_php_settings = 'php;c:class;d:constant;f:function' 339 let Tlist_WinWidth = 30 340 341 " yankring 342 " 配置yankring历史文件名前缀 343 let g:yankring_history_file = '.yankring_history' 344 345 " FencView 346 let g:fencview_autodetect = 0 347 let g:fencview_checklines = 30 348 let g:fencview_auto_patterns = '*.*' 349 350 " Mini Buffer Explorer 351 let g:miniBufExplSplitBelow = 1 352 353 " delimitMate 354 let loaded_delimitMate = 0 355 let delimitMate_autoclose = 0 356 357 " shell.vim 358 let g:shell_mappings_enabled = 0 359 360 "------------------------------------------------------------------------------ 361 " 文件类型设置 362 "------------------------------------------------------------------------------ 363 364 " 二进制文件 365 " vim -b : 用xxd格式编辑二进制文件 366 augroup Binary 367 autocmd! 368 autocmd BufReadPre *.bin,*.o let &bin=1 369 autocmd BufReadPost *.bin,*.o if &bin | %!xxd 370 autocmd BufReadPost *.bin,*.o set ft=xxd | endif 371 autocmd BufWritePre *.bin,*.o if &bin | %!xxd -r 372 autocmd BufWritePre *.bin,*.o endif 373 autocmd BufWritePost *.bin,*.o if &bin | %!xxd 374 autocmd BufWritePost *.bin,*.o set nomod | endif 375 augroup END 376 377 " Javascript 378 " 折叠 379 function! JavaScriptFold() 380 setl foldmethod=syntax 381 setl foldlevelstart=1 382 syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend 383 384 function! FoldText() 385 return substitute(getline(v:foldstart), '{.*', '{...}', '') 386 endfunction 387 setl foldtext=FoldText() 388 endfunction 389 autocmd FileType javascript setl fen 390 autocmd FileType javascript call JavaScriptFold() 391 392 " PHP 393 " 折叠 394 autocmd FileType php EnablePHPFolds 395 396 "------------------------------------------------------------------------------ 397 " 其他设置 398 "------------------------------------------------------------------------------ 399 400 " 打开文件时,自动跳转到光标最后所在的位置 401 if has("autocmd") 402 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") 403 \| exe "normal! g'\"" | endif 404 endif 405 406 " 切换QuickFix窗口 407 com! -bang -nargs=? QFix cal QFixToggle(<bang>0) 408 fu! QFixToggle(forced) 409 if exists("g:qfix_win") && a:forced == 0 410 cclose 411 unlet g:qfix_win 412 else 413 copen 10 414 let g:qfix_win = bufnr("$") 415 en 416 endf 417 nnoremap <leader>f :QFix<cr> 418 419 " 使用molokai颜色主题 420 colorscheme molokai 421 422 "打开 ":Man" 命令 423 runtime ftplugin/man.vim 424 425 " 语法高亮 426 syntax on 427 428 " 文件类型侦测 429 filetype plugin indent on 430
一个.vimrc的示例
最新推荐文章于 2024-09-06 10:35:48 发布