Vim的配置

GO

1. Vim配置文件说明

  • Vim的配置文件有两个,/etc/vimrc是Vim的全局配置文件,~/.vimrc是用户的Vim配置文件。一般我们配置的是自己家目录里的这个配置文件~/.vimrc
  • 在Vim的配置文件里,双引号"是注释符

2. 常用Vim配置选项

1
2
3
4
5
6
7
8
9
10
set hlsearch "高亮度反白
set backspace=2 "可随时用退格键删除
set autoindent "自动缩排
set ruler "可现实最后一行的状态
set showmode "左下角那一行的状态
set nu "显示行号
set background=dark "显示不同的底色色调
set nobackup "不自动建立*.~备份文件
syntax on "进行语法检验,颜色显示
color murphy

3. Vim7.1在Win下的编码设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"设置字体编码
"set guifont=Courier_New:h14:cANSI " 设置字体
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
"set encoding=utf-8
"set fileencodings=ucs-bom,utf-8,cp936
"set fileencoding=utf-8
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
"解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
"解决consle输出乱码
"language messages zh_CN.utf-8

4. 显示相关

1
2
3
4
5
6
7
8
9
10
11
12
set shortmess=atI " 启动的时候不显示那个援助乌干达儿童的提示
set number " 显示行号
syntax on " 语法高亮
set showcmd " 输入的命令显示出来,看的清楚些
set ruler " 打开状态栏标尺
set cursorline " 突出显示当前行
"set magic " 设置魔术
"set guioptions-=T " 隐藏工具栏
"set guioptions-=m " 隐藏菜单栏
set laststatus=1 " 启动显示状态行(1),总是显示状态行(2)
"set statusline=\ \ \ %F%m%r%h%w\ \ \ [FORMAT=%{&ff}]\ \ \ [TYPE=%Y]\ \ \ [POS=%l,%v][%p%%]
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ "状态行显示的内容

~~

1
2
3
4
5
6
7
8
9
10
11
"高亮所在行和所在列的设置
se cuc " 用浅色高亮当前列
se cul " 用浅色高亮当前行
highlight CursorLine cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE
"highlight CursorColumn cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE
"highlght 主要是用来配色的,包括语法高亮等个性化的配置。可以通过:h highlight,查看详细信息
"CursorLine 和 CursorColumn 分别表示当前所在的行列
"cterm 表示为原生vim设置样式,设置为NONE表示可以自定义设置。
"ctermbg 设置终端vim的背景色
"ctermfg 设置终端vim的前景色
"guibg 和 guifg 分别是设置gvim的背景色和前景色,本人平时都是使用终端打开 vim,所以只是设置终端下的样式

5. 功能相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
" 自动缩进 且 统一缩进为4
set autoindent
set cindent
set softtabstop=4
set shiftwidth=4
set tabstop=4 " Tab键的宽度
set nobackup " 从不备份
set autowrite " 自动保存
set backspace=2 " 使键(backspace)正常处理indent, eol, start等
set history=1000 " 历史记录数
set noeb " 去掉输入错误的提示声音
set confirm " 在处理未保存或只读文件的时候,弹出确认
set noexpandtab " 不要用空格代替制表符
set nocompatible " 不要使用vi的键盘模式,而是vim自己的
set ignorecase " 搜索忽略大小写
set cmdheight=2 " 命令行(在状态行下)的高度,默认为1,这里是2
au BufRead,BufNewFile * setfiletype txt " 高亮显示普通txt文件(需txt.vim脚本)

6. 设置自动缩进

本文内容转载自 阿铭Linux

centos系统,修改vim的配置文件 /etc/vimrc 添加如下内容:

  • 打开 vimrc ,添加以下语句来使得语法高亮显示:syntax on
  • 如果此时语法还是没有高亮显示,那么在 /etc 目录下的profile文件中添加以下语句:export TERM=xterm-color
  • 解决方向键和退格键失效的问题(采用非兼容模式)
    • set nocompatible
    • set backspace=2
  • 设置 Windows 风格的 C/C++ 自动缩进(添加以下 set 语句到 vimrc 中)
    • 设置(软)制表符宽度为 4 :set tabstop=4set softtabstop=4
    • 设置缩进的空格数为 4:set shiftwidth=4
    • 设置自动缩进 :即每行的缩进值与上一行相等;使用 noautoindent 取消设置:set autoindent
    • 设置 使用 C/C++ 语言的自动缩进方式:set cindent
    • 设置 C/C++ 语言的具体缩进方式 :set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
    • 如果想在左侧显示文本的行号,可以用以下语句: set nu
    • 最后,如果没有下列语句,就加上吧:
      1
      2
      3
      4
      5
      if &term=="xterm"
      set t_Co=8
      set t_Sb=^[[4%dm
      set t_Sf=^[[3%dm
      endif

7. 按键相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
" 映射全选 ctrl+a
map <C-A> ggVG
"map! <C-A> <Esc>ggVGY
"map <F12> gg=G
---
" 选中状态下 Ctrl+c 复制
vmap <C-c> "+y
---
" 选中状态下 Ctrl+x 剪切
vmap <C-x> "+d
---
"列出当前目录文件
map <F3> :tabnew .<CR>
---
"打开树状文件目录
map <C-F3> \be

8. 编程相关

8.1. 未分类

1
2
3
4
5
6
7
set showmatch " 高亮显示匹配的括号
set matchtime=1 " 匹配括号高亮的时间(单位是十分之一秒)
set smartindent " 为C程序提供自动缩进
filetype on " 侦测文件类型
filetype plugin on " 载入文件类型插件
filetype indent on " 为特定文件类型载入相关缩进文件

8.2. 自动补全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
set completeopt=longest,menu "打开文件类型检测, 加了这句才可以用智能补全
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction
filetype plugin indent on

8.3. C、C++ 按F5编译运行,按F8调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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'
:!./%
endif
endfunc
map <F8> :call Rungdb()<CR>
func! Rungdb()
exec "w"
exec "!g++ % -g -o %<"
exec "!gdb ./%<"
endfunc

8.4. 新建.c、.h、.sh、.java、.py等文件时,自动插入文件头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.py,*.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头
let $author_name = "Theshu"
let $author_email = "theshu@qq.com"
func SetTitle()
"如果文件类型为.py文件
if &filetype == 'python'
call setline( 1,"\#!/usr/bin/python")
call append(line("."),"\#########################################################################")
call append(line(".")+1, "\# File Name : ".expand("%"))
call append(line(".")+2, "\# Program : ")
call append(line(".")+3, "\# \t > ")
call append(line(".")+4, "\# Author : ".$author_name)
call append(line(".")+5, "\# Email : ".$author_email)
call append(line(".")+6, "\# Created Time: ".strftime("%c"))
call append(line(".")+7, "\# History : ")
call append(line(".")+8, "\#########################################################################")
call append(line(".")+9, "")
endif
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline( 1,"\#!/bin/bash")
call append(line("."),"\#########################################################################")
call append(line(".")+1, "\# File Name : ".expand("%"))
call append(line(".")+2, "\# Program : ")
call append(line(".")+3, "\# \t > ")
call append(line(".")+4, "\# Author : ".$author_name)
call append(line(".")+5, "\# Email : ".$author_email)
call append(line(".")+6, "\# Created Time: ".strftime("%c"))
call append(line(".")+7, "\# History : ")
call append(line(".")+8, "\#########################################################################")
call append(line(".")+9, "")
endif
"如果文件为C++的*.cpp
if &filetype == 'cpp'
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Program: ")
call append(line(".")+2, "\t\t > ")
call append(line(".")+3, " > Author: ".$author_name)
call append(line(".")+4, " > Email: ".$author_email)
call append(line(".")+5, " > Created Time: ".strftime("%c"))
call append(line(".")+6, " ************************************************************************/")
call append(line(".")+7, "")
call append(line(".")+8, "#include<iostream>")
call append(line(".")+9, "using namespace std;")
call append(line(".")+10, "")
endif
"如果文件为C的*.c或*.h
if &filetype == 'c'
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Program: ")
call append(line(".")+2, "\t\t > ")
call append(line(".")+3, " > Author: ".$author_name)
call append(line(".")+4, " > Email: ".$author_email)
call append(line(".")+5, " > Created Time: ".strftime("%c"))
call append(line(".")+6, " ************************************************************************/")
call append(line(".")+7, "")
call append(line(".")+8, "#include<stdio.h>")
call append(line(".")+9, "")
endif
"如果文件为Java的*.java
if &filetype == 'java'
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Program: ")
call append(line(".")+2, "\t\t > ")
call append(line(".")+3, " > Author: ".$author_name)
call append(line(".")+4, " > Email: ".$author_email)
call append(line(".")+5, " > Created Time: ".strftime("%c"))
call append(line(".")+6, " ************************************************************************/")
call append(line(".")+7, "")
call append(line(".")+8, "")
call append(line(".")+9, "")
endif
"新建文件后,自动定位到文件末尾
autocmd BufNewFile * normal G
endfunc

OK

0%