我的vim配置脚本
自己的VIM 配置脚本,拥有自主独立知识产权(参考了一点别人的),只使用了一个插件ctags ,主要实现了一下功能:
- 自动补全括号,双引号,单引号,包括{},(),"" , ''只要输入符号的左边部分,自动补全,并以插入模式自动将光标移动到符号内部
- 在{},() 内部按下Enter键,自动换两行,并将光标移动到两行中的第一行,并完成自动缩进
- 命令模式下,快捷键"s",保存文件,保存文件的同时,自动刷新tags,按下ctrl+]和ctrl+t 实现函数 ,结构体 , 类的自动跳转和返回。
- 命令模式下,快捷键"q",退出VIM
- 在插入模式,光标右边是},),",',按下Tab键自动跳出该符号,如果不知这些符号,完成缩进动作
- 在命令模式,按下"t",列出所有打开的文件
- 在命令模式,按下";",调出命令输入行
- 在命令模式,按下<- 和->可以在打开的Buffer之间切换
- 可以用鼠标点击
- 高亮光标所在行
- 状态高亮显示当前打开文件信息
- F4关闭当前Buffer
其他更复杂的配置,以后慢慢补充
"设置帮助文档为中文 set helplang=cn "设置编码 set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1 "高亮显示 syntax enable syntax on "显示行数 set number "设置tab键 set tabstop=4 "设置缩进 set softtabstop=4 set shiftwidth=4 "设置自动缩进 set autoindent set cindent "不产生swap文件和备份文件 set noswapfile set nobackup "设置检查拼写(感觉用着没有啥子效果) "set spell "显示光标所在行号 set cursorline "显示光标所在行号和列号 set ruler "鼠标可以在buffer中点击 set mouse=a set showmode "高亮搜索关键字 set hlsearch "智能搜索 set incsearch "搜索忽略大小写 set ignorecase "显示输入的命令 set showcmd "打开文件类型检测 filetype on filetype plugin on "设置常用符号自动补全(注意:inore是指 vim的各种工作模式) inoremap ( ()<ESC>i inoremap [ []<ESC>i inoremap " ""<ESC>i inoremap ' ''<ESC>i inoremap { {}<ESC>i "自定义快捷键(注意这里的<cr>表示字符’<‘c'‘r’>,在配置脚本中等同于Enter键) "保存和退出 nmap s :w<cr> nmap q :q<cr> "使用左右方向键在不同buffer之间的切换 nmap <Left> :bp<CR> nmap <Right> :bn<CR> "F4关闭当前buffer nmap <F4> :bd<CR> nmap f :e "在打开的文件之间互相切换 nmap t :ls<cr> nmap b :b nmap ; : "在编辑模式下,按下'{'或'(',括号将自动补全,光标移动到括号中,如果按下'Enter'键,实现自动换行并缩进 inoremap <CR> <C-R>=Enterskip()<CR> function Enterskip() let char = getline(".")[col(".") - 1] if char == '}' || char == ')' return "\<CR>\<ESC>O" else return "\<CR>" endif endf "在编辑模式下,如果在当光标右边是下面这些符号,按下'Tab'键,自动跳出括号,反之正常的tab键功能 inoremap <Tab> <C-R>=Tabskip()<CR> function Tabskip() let char = getline(".")[col(".") - 1] if char == '}' || char == ']' || char == '"' || char == '>' || char == ')' || char == "'" return "\<Right>" else return "\<Tab>" endif endf "待定脚本(还没搞明白的脚本) "inoremap ] <c-r>=ClosePair(']')<CR>(这条脚本待定) "inoremap < <><LEFT> "inoremap * **<LEFT> "只针对c,cpp文件才使用大括号跨行自动补全功能 "inoremap ) <c-r>=ClosePair(')')<CR> "autocmd FileType c,cpp,go inoremap { {<CR>}<ESC>O "针对sh 文件使用大括号当前行自动补全功能 "autocmd FileType sh inoremap { {}<ESC>i "inoremap } <c-r>=ClosePair('}')<CR> "function! ClosePair(char) " if getline('.')[col('.') - 1] == a:char " return "\<Right>" " else " return a:char " endif "endfunction "ctags 自动补全(每次保存文件的时候执行ctags -R) "--languages=c++,c,java,Make,Sh, 就是制定了本次ctags扫描的语言是什么 "--c++-kinds=+px 指示ctags扫描一些函数声明 autocmd BufWritePost * call system("ctags --tag-relative=yes -f ~/.tagsdir/tags -R --languages=c++,c,Java,Make,Sh, --c++-kinds=+px --fields=+aiKSz --extra=+q") "autocmd BufWritePost * call system("ctags --tag-relative=yes -f /home/satan/.tagsdir/tags -R *") "因为每次保存文件的时候,都会刷新tags文件,但是都是在文件所在文件的当前文件夹下刷新,这样下次使用跳转的时候,会出现多个选择,所以直接指定一个tags生成的文件夹 set tags=/home/satan/.tagsdir/tags set autochdir " 在状态栏显示当前文件的相关信息 set laststatus=2 " 总是显示状态栏 highlight StatusLine cterm=bold ctermfg=black ctermbg=yellow " 获取当前路径,将$HOME转化为~ function! CurDir() let curdir = substitute(getcwd(), $HOME, "~", "g") return curdir endfunction set statusline=[%n]\ %f%m%r%h\ \|\ \ pwd:\ %{CurDir()}\ \ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\ @\ %{hostname()}