[vim]Vim 配置
转自:http://www.cnblogs.com/witcxc/archive/2011/12/28/2304704.html
vim通过一个叫vimrc的文件来进行设置
默认安装的vim-tiny的设置文件可以在/usr/share/vim中找到,果然极其简洁
若你的home目录下没有.vimrc文件,你可以:
cp /usr/share/vim/vimXX/vimrc_example.vim ~/.vimrc
其中xx为版本号
这里我们需要重新定制一个
vimrc的存放位置:
系统 vimrc 文件: "$VIM/vimrc"
用户 vimrc 文件: "$HOME/.vimrc"
用户 exrc 文件: "$HOME/.exrc"
系统 gvimrc 文件: "$VIM/gvimrc"
用户 gvimrc 文件: "$HOME/.gvimrc"
系统菜单文件: "$VIMRUNTIME/menu.vim"
$VIM 预设值: "/usr/share/vim"
下面是网上比较流行的一个版本,可以直接拿来用
在用戶主目录下建一个文件.vimrc(这是一个隐藏文件),把下面的内容拷贝到这个文件中
再用vim打开程序,就能看到语法高亮以及其他诸多功能
当然完全可以再在上面进行删改,添加代码折叠啊或是增加一些windows的文件保存快捷方式什么的
不想麻烦的,下面的直接拿来用就OK了
1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 2 " 一般设定 3 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 4 " 设定默认解码 5 set fenc=utf-8 6 set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936 7 8 " 不要使用vi的键盘模式,而是vim自己的 9 set nocompatible 10 11 " history文件中需要记录的行数 12 set history=100 13 14 " 在处理未保存或只读文件的时候,弹出确认 15 set confirm 16 17 " 与windows共享剪贴板 18 set clipboard+=unnamed 19 20 " 侦测文件类型 21 filetype on 22 23 " 载入文件类型插件 24 filetype plugin on 25 26 " 为特定文件类型载入相关缩进文件 27 filetype indent on 28 29 " 保存全局变量 30 set viminfo+=! 31 32 " 带有如下符号的单词不要被换行分割 33 set iskeyword+=_,$,@,%,#,- 34 35 " 语法高亮 36 syntax on 37 38 " 高亮字符,让其不受100列限制 39 :highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white 40 :match OverLength '\%101v.*' 41 42 " 状态行颜色 43 highlight StatusLine guifg=SlateBlue guibg=Yellow 44 highlight StatusLineNC guifg=Gray guibg=White 45 46 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 47 " 文件设置 48 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 49 " 不要备份文件(根据自己需要取舍) 50 set nobackup 51 52 " 不要生成swap文件,当buffer被丢弃的时候隐藏它 53 setlocal noswapfile 54 set bufhidden=hide 55 56 " 字符间插入的像素行数目 57 set linespace=0 58 59 " 增强模式中的命令行自动完成操作 60 set wildmenu 61 62 " 在状态行上显示光标所在位置的行号和列号 63 set ruler 64 set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%) 65 66 " 命令行(在状态行下)的高度,默认为1,这里是2 67 set cmdheight=2 68 69 " 使回格键(backspace)正常处理indent, eol, start等 70 set backspace=2 71 72 " 允许backspace和光标键跨越行边界 73 set whichwrap+=<,>,h,l 74 75 " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位) 76 set mouse=a 77 set selection=exclusive 78 set selectmode=mouse,key 79 80 " 启动的时候不显示那个援助索马里儿童的提示 81 set shortmess=atI 82 83 " 通过使用: commands命令,告诉我们文件的哪一行被改变过 84 set report=0 85 86 " 不让vim发出讨厌的滴滴声 87 set noerrorbells 88 89 " 在被分割的窗口间显示空白,便于阅读 90 set fillchars=vert:\ ,stl:\ ,stlnc:\ 91 92 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 93 " 搜索和匹配 94 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 95 " 高亮显示匹配的括号 96 set showmatch 97 98 " 匹配括号高亮的时间(单位是十分之一秒) 99 set matchtime=5 100 101 " 在搜索的时候忽略大小写 102 set ignorecase 103 104 " 不要高亮被搜索的句子(phrases) 105 set nohlsearch 106 107 " 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索) 108 set incsearch 109 110 " 输入:set list命令是应该显示些啥? 111 set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$ 112 113 " 光标移动到buffer的顶部和底部时保持3行距离 114 set scrolloff=3 115 116 " 不要闪烁 117 set novisualbell 118 119 " 我的状态行显示的内容(包括文件类型和解码) 120 set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")} 121 122 " 总是显示状态行 123 set laststatus=2 124 125 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 126 " 文本格式和排版 127 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 128 " 自动格式化 129 set formatoptions=tcrqn 130 131 " 继承前一行的缩进方式,特别适用于多行注释 132 set autoindent 133 134 " 为C程序提供自动缩进 135 set smartindent 136 137 " 使用C样式的缩进 138 set cindent 139 140 " 制表符为4 141 set tabstop=4 142 143 " 统一缩进为4 144 set softtabstop=4 145 set shiftwidth=4 146 147 " 不要用空格代替制表符 148 set noexpandtab 149 150 " 不要换行 151 set nowrap 152 153 " 在行和段开始处使用制表符 154 set smarttab 155 156 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 157 " CTags的设定 158 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 159 " 按照名称排序 160 let Tlist_Sort_Type = "name" 161 162 " 在右侧显示窗口 163 let Tlist_Use_Right_Window = 1 164 165 " 压缩方式 166 let Tlist_Compart_Format = 1 167 168 " 如果只有一个buffer,kill窗口也kill掉buffer 169 let Tlist_Exist_OnlyWindow = 1 170 171 " 不要关闭其他文件的tags 172 let Tlist_File_Fold_Auto_Close = 0 173 174 " 不要显示折叠树 175 let Tlist_Enable_Fold_Column = 0 176 177 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 178 " Autocommands 179 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 180 " 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示 181 182 if has("autocmd") 183 autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number 184 autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o--> 185 autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o 186 autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100 187 autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim 188 autocmd BufReadPost * 189 \ if line("'\"") > 0 && line("'\"") <= line("$") | 190 \ exe " normal g`\"" | 191 \ endif 192 endif "has("autocmd") 193 194 " F5编译和运行C程序,F6编译和运行C++程序 195 " 请注意,下述代码在windows下使用会报错 196 " 需要去掉./这两个字符 197 198 " C的编译和运行 199 map <F5> :call CompileRunGcc()<CR> 200 func! CompileRunGcc() 201 exec "w" 202 exec "!gcc % -o %<" 203 exec "! ./%<" 204 endfunc 205 206 " C++的编译和运行 207 map <F6> :call CompileRunGpp()<CR> 208 func! CompileRunGpp() 209 exec "w" 210 exec "!g++ % -o %<" 211 exec "! ./%<" 212 endfunc 213 214 " 能够漂亮地显示.NFO文件 215 set encoding=utf-8 216 function! SetFileEncodings(encodings) 217 let b:myfileencodingsbak=&fileencodings 218 let &fileencodings=a:encodings 219 endfunction 220 function! RestoreFileEncodings() 221 let &fileencodings=b:myfileencodingsbak 222 unlet b:myfileencodingsbak 223 endfunction 224 225 au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings() 226 227 " 高亮显示普通txt文件(需要txt.vim脚本) 228 au BufRead,BufNewFile * setfiletype txt 229 230 " 用空格键来开关折叠 231 set foldenable 232 set foldmethod=manual 233 nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc':'zo')<CR> 234 235 " minibufexpl插件的一般设置 236 let g:miniBufExplMapWindowNavVim = 1 237 let g:miniBufExplMapWindowNavArrows = 1 238 let g:miniBufExplMapCTabSwitchBufs = 1 239 let g:miniBufExplModSelTarget = 1
另外:
如果要让你的vim配置(~/.vimrc立即生效),你需要在vim中输入:
:so ~/.vimrc 或:source ~/.vimrc
参照:http://vim.wikia.com/wiki/Change_vimrc_with_auto_reload
可以让vimrc在每次保存时立即生效的方法,在.vimrc中添加下行:
autocmd! BufWritePost .vimrc source %
关于autocmd可以参考: http://yangbo.name/wp_page/vi/autocmd.html
另外2:
在插入模式下,你如果误操作使用ctrl+u删除光标所在行或ctrl+w光标前的一个单词,当你退出到一般模式时,是无法使用u来恢复删除的。
这需要添加如下两行:
inoremap <c-u> <c-g>u<c-u> inoremap <c-w> <c-g>u<c-w>
注:前面的一行已经默认在vim的配置中了(vimrc_example.vim)参照:http://vim.wikia.com/wiki/Recover_from_accidental_Ctrl-U
---------------------------------------------------------------------
我的vim配置: