我的vim配置主要有以下优点:
1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试
2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改
3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码
4.按“F2”可以直接消除代码中的空行
5.“F3”可列出当前目录文件,打开树状文件目录
6. 支持鼠标选择、方向键移动
7. 代码高亮,自动缩进,显示行号,显示状态行
8.按“Ctrl + P”可自动补全
9.[]、{}、()、""、' '等都自动补全
10.其他功能读者可以研究以下文件
vim本来就是很强大,很方便的编辑器,加上我的代码后肯定会如虎添翼,或许读者使用其他编程语言,可以根据自己的需要进行修改,配置文件里面已经加上注释。
读者感兴趣的话直接复制下面的代码到文本文件,然后把文件改名为“ .vimrc” (不要忘记前面的“.”),然后把文件放到用户文件夹的根目录下面即可。重新打开vim即可看到效果。
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 显示相关
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set
cul
"高亮光标所在行
set
shortmess
=atI
" 启动的时候不显示那个援助乌干达儿童的提示
set
go
=
" 不要图形按钮
"color desert " 设置背景主题
color ron
" 设置背景主题
"color torte " 设置背景主题
"set guifont=Courier_New:h10:cANSI " 设置字体
"autocmd InsertLeave * se nocul " 用浅色高亮当前行
autocmd
InsertEnter *
se
cul
" 用浅色高亮当前行
set
ruler
" 显示标尺
set
showcmd
" 输入的命令显示出来,看的清楚些
"set whichwrap+=<,>,h,l " 允许backspace和光标键跨越行边界(不建议)
set
scrolloff
=
3
" 光标移动到buffer的顶部和底部时保持3行距离
set
statusline
=%F%
m%
r%
h%
w\ [FORMAT
=%{&
ff}]\ [TYPE
=%Y]\ [POS
=%
l
,%
v][%
p%%]\ %{strftime
(\
"%d/%m/%y\ -\ %H:%M\")} "状态行显示的内容
set
laststatus
=
2
" 启动显示状态行(1),总是显示状态行(2)
"set foldenable " 允许折叠
"set foldmethod=manual " 手动折叠
set
nocompatible
"去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
" 显示中文帮助
if
version
>=
603
set
helplang
=
cn
set
encoding
=utf
-8
endif
" 自动缩进
set
autoindent
set
cindent
" Tab键的宽度
set
tabstop
=
4
" 统一缩进为4
set
softtabstop
=
4
set
shiftwidth
=
4
" 不要用空格代替制表符
set
noexpandtab
" 在行和段开始处使用制表符
set
smarttab
" 显示行号
set
number
" 历史记录数
set
history
=
1000
"搜索逐字符高亮
set
hlsearch
set
incsearch
"语言设置
set
langmenu
=zh_CN.UTF
-8
set
helplang
=
cn
" 总是显示状态行
set
cmdheight
=
2
" 侦测文件类型
filetype
on
" 载入文件类型插件
filetype plugin
on
" 为特定文件类型载入相关缩进文件
filetype indent
on
" 保存全局变量
set
viminfo
+=!
" 带有如下符号的单词不要被换行分割
set
iskeyword
+=_
,$
,@
,%
,#
,-
" 字符间插入的像素行数目
"markdown配置
au
BufRead
,
BufNewFile *.{md
,mdown
,mkd
,mkdn
,markdown
,mdwn}
set
filetype
=mkd
"rkdown to HTML
nmap md :
!~
/.vim/markdown.pl %
> %.html
<CR
><CR
>
nmap
fi :
!firefox %.html &
<CR
><CR
>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""新文件标题
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自动插入文件头
autocmd
BufNewFile *.cpp
,*.[
ch]
,*.
sh
,*.java
,*.
py
,*.md exec
":call SetTitle()"
""定义函数SetTitle,自动插入文件头
func SetTitle
()
"如果文件类型为.sh文件
if &
filetype
==
'sh'
call setline
(
1
,
"\#########################################################################"
)
call append
(line
(
"."
),
"\# File Name: ".expand
(
"%"
))
call append
(line
(
"."
)+
1
,
"\# Author: ma6174"
)
call append
(line
(
"."
)+
3
,
"\# Created Time: ".strftime
(
"%c"
))
call append
(line
(
"."
)+
4
,
"\#########################################################################"
)
call append
(line
(
"."
)+
5
,
"\#!/bin/bash"
)
call append
(line
(
"."
)+
6
,
""
)
elseif &
filetype
==
'python'
call setline
(
1
,
"#!/usr/bin/env python"
)
call append
(line
(
"."
),
"#coding=utf-8"
)
call append
(line
(
"."
)+
1
,
""
)
elseif &
filetype
==
'mkd'
call setline
(
1
,
""
)
else
call setline
(
1
,
"/*************************************************************************"
)
call append
(line
(
"."
),
" > File Name: ".expand
(
"%"
))
call append
(line
(
"."
)+
1
,
" > Author: ma6174"
)
call append
(line
(
"."
)+
3
,
" > Created Time: ".strftime
(
"%c"
))
call append
(line
(
"."
)+
4
,
" ************************************************************************/"
)
call append
(line
(
"."
)+
5
,
""
)
endif
if &
filetype
==
'cpp'
call append
(line
(
"."
)+
6
,
"#include"
)
call append
(line
(
"."
)+
7
,
"using namespace std;"
)
call append
(line
(
"."
)+
8
,
""
)
endif
if &
filetype
==
'c'
call append
(line
(
"."
)+
6
,
"#include"
)
call append
(line
(
"."
)+
7
,
""
)
endif
" if &filetype == 'java'
" call append(line(".")+6,"public class ".expand("%"))
" call append(line(".")+7,"")
" endif
"新建文件后,自动定位到文件末尾
autocmd
BufNewFile * normal G
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"键盘命令
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
:nmap
<
silent
>
<F9
>
<ESC
>:Tlist
<RETURN
>
map
!
<C
-Z
>
<Esc
>zzi
map
!
<C
-O
>
<C
-Y
>,
map
<C
-A
> ggVGY
map
!
<C
-A
>
<Esc
>ggVGY
map
<F12
> gg
=G
" 选中状态下 Ctrl+c 复制
vmap
<C
-
c
>
"+y
"去空行
nnoremap
<F2
> :
g
/^\s*$/
d
<CR
>
"比较文件
nnoremap
<C
-F2
> :
vert
diffsplit
"列出当前目录文件
map
<F3
> :
tabnew .
<CR
>
"打开树状文件目录
map
<C
-F3
> \be
:autocmd
BufRead
,
BufNewFile *.dot map
<F5
> :
w
<CR
>:
!dot
-Tjpg
-
o %
<.jpg % && eog %
<.jpg
<CR
><CR
> && exec
"redr!"
"C,C++ 按F5编译运行
map
<F5
> :
call CompileRunGcc
()<CR
>
func
! CompileRunGcc
()
exec
"w"
if &
filetype
==
'c'
exec
"!g++ % -o %<"
exec
"! ./%<"
elseif &
filetype
==
'cpp'
exec
"!g++ % -o %<"
exec
"! ./%<"
elseif &
filetype
==
'java'
exec
"!javac %"
exec
"!java %<"
elseif &
filetype
==
'sh'
:
!./%
elseif &
filetype
==
'python'
exec
"!python2.7 %"
elseif &
filetype
==
'html'
exec
"!firefox % &"
elseif &
filetype
==
'mkd'
" exec "!touch ~/temp.html"
" exec "!perl ~/.vim/markdown.pl % > /tmp/temp.html<"
" exec "!markdown % > /tmp/temp.html<"
" exec "md"
exec
"!firefox /tmp/markdown.html &"
endif
endfunc
"C,C++的调试
map
<F8
> :
call Rungdb
()<CR
>
func
! Rungdb
()
exec
"w"
exec
"!g++ % -g -o %<"
exec
"!gdb ./%<"
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""实用设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has
(
"autocmd"
)
autocmd
BufReadPost *
\
if line
(
"'\""
)
>
0 && line
(
"'\""
)
<= line
(
"$"
)
|
\ exe
"normal g`\""
|
\
endif
endif
" 设置当文件被改动时自动载入
set
autoread
" quickfix模式
autocmd
FileType
c
,cpp map
<buffer
>
<leader
><space
> :
w
<
cr
>:
make
<
cr
>
"代码补全
set
completeopt
=preview
,menu
"允许插件
filetype plugin
on
"共享剪贴板
"set clipboard+=unnamed
"自动保存
set
autowrite
set
ruler
" 打开状态栏标尺
set
cursorline
" 突出显示当前行
set
magic
" 设置魔术
set
guioptions
-=T
" 隐藏工具栏
set
guioptions
-=
m
" 隐藏菜单栏
set
foldcolumn
=
0
set
foldmethod
=indent
set
foldlevel
=
3
" 不要使用vi的键盘模式,而是vim自己的
set
nocompatible
" 去掉输入错误的提示声音
set
noeb
" 在处理未保存或只读文件的时候,弹出确认
set
confirm
"禁止生成临时文件
set
nobackup
set
noswapfile
"搜索忽略大小写
set
ignorecase
set
linespace
=
0
" 增强模式中的命令行自动完成操作
set
wildmenu
" 使回格键(backspace)正常处理indent, eol, start等
set
backspace
=
2
" 允许backspace和光标键跨越行边界
set
whichwrap
+=<,>,
h
,
l
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
set
mouse
=
a
set
selection
=exclusive
set
selectmode
=
mouse
,
key
" 通过使用: commands命令,告诉我们文件的哪一行被改变过
set
report
=
0
" 在被分割的窗口间显示空白,便于阅读
set
fillchars
=
vert:\
,
stl:\
,stlnc:\
" 高亮显示匹配的括号
set
showmatch
" 匹配括号高亮的时间(单位是十分之一秒)
set
matchtime
=
1
" 光标移动到buffer的顶部和底部时保持3行距离
set
scrolloff
=
3
" 为C程序提供自动缩进
set
smartindent
" 高亮显示普通txt文件(需要txt.vim脚本)
au
BufRead
,
BufNewFile *
setfiletype txt
"自动补全
"":inoremap ( ()i
"":inoremap ) =ClosePair(')')
":inoremap { {}O
":inoremap } =ClosePair('}')
"":inoremap [ []i
"":inoremap ] =ClosePair(']')
"":inoremap " ""i
"":inoremap ' ''i
""function! ClosePair(char)
"" if getline('.')[col('.') - 1] == a:char
"" return "\"
"" else
"" return a:char
"" endif
""endfunction
filetype plugin indent
on
"打开文件类型检测, 加了这句才可以用智能补全
set
completeopt
=longest
,menu
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CTags的设定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let Tlist_Sort_Type
=
"name"
" 按照名称排序
let Tlist_Use_Right_Window
=
1
" 在右侧显示窗口
let Tlist_Compart_Format
=
1
" 压缩方式
let Tlist_Exist_OnlyWindow
=
1
" 如果只有一个buffer,kill窗口也kill掉buffer
let Tlist_File_Fold_Auto_Close
=
0
" 不要关闭其他文件的tags
let Tlist_Enable_Fold_Column
=
0
" 不要显示折叠树
"let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的
"设置tags
"set tags=tags
"set autochdir
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"其他东东
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"默认打开Taglist
let Tlist_Auto_Open
=
1
""""""""""""""""""""""""""""""
" Tag list (ctags)
""""""""""""""""""""""""""""""""
let Tlist_Ctags_Cmd
=
'/usr/local/bin/ctags'
let Tlist_Show_One_File
=
1
"不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow
=
1
"如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window
=
1
"在右侧窗口中显示taglist窗口
" minibufexpl插件的一般设置
let
g:miniBufExplMapWindowNavVim
=
1
let
g:miniBufExplMapWindowNavArrows
=
1
let
g:miniBufExplMapCTabSwitchBufs
=
1
let
g:miniBufExplModSelTarget
=
1
"输入法
:
let
g:vimim_map
=
'c-/'
":let g:vimim_cloud='sougou' " QQ云输入
:
let
g:vimim_punctuation
=
0
" 不用中文标点
:
set
pastetoggle
=<C
-H
>
:
let
g:vimim_cloud
=
-1
"python补全
let
g:pydiction_location
=
'~/.vim/after/complete-dict'
let
g:pydiction_menu_height
=
20
let Tlist_Ctags_Cmd
=
'/usr/local/bin/ctags'
let
g:miniBufExplMapWindowNavVim
=
1
let
g:miniBufExplMapWindowNavArrows
=
1
let
g:miniBufExplMapCTabSwitchBufs
=
1
let
g:miniBufExplModSelTarget
=
1
set
iskeyword
+=.
set
fileencodings
=utf
-8
set
termencoding
=utf
-8
set
encoding
=utf8
set
fileencoding
=utf8
set
fileencodings
=utf8
,ucs
-bom
,gbk
,cp936
,gb2312
,gb18030
let &
termencoding
=&
encoding
autocmd
FileType python
set
omnifunc
=pythoncomplete#Complete