打造你的Vim[基本篇]

配色相关

1
2
3
4
" 颜色相关
syntax enable " 开启高亮
colorscheme solarized " 将主题设置为solarized
set background=dark " 并不是改变背景颜色,只是告诉vim背景应该是什么样的

通用设置

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
" 通用设置
set nocompatible " 与VI不兼容
set encoding=utf8
set fileformats=unix,dos,mac " 换行符号 \r \r\n 还是 \n
filetype plugin indent on " 自动检测文件类型,允许为不同文件设置插件与缩进
set autoread " 文件变化时自动读取变化
set scrolloff=7 " 光标上下至少有7行
set wildmenu " 命令行补全增强
set ruler " 显示光标所在行列
set hidden " 当不用某buffer时将其隐藏
set backspace=eol,start,indent " 让你的退格键比较正常
set whichwrap+=<,>,h,l " 比较复杂,见http://edyfox.codecarver.org/html/_vimrc_for_beginners.html
set lazyredraw " 执行宏时不进行重画
set magic " 搜索时指定的参数
set showmatch " 显示配对括号
set matchtime=5 " 显示配对括号的时间(单位为1/10秒)
set wildignore+=*/tmp/*,*.so,*.o,*.a,*.obj,*.swp,*.zip,*.pyc,*.pyo,*.class,.DS_Store " 忽略的文件
set relativenumber " 显示行号
let mapleader="," " 将leader映射为逗号

" 关掉各种响铃和报错
set noerrorbells
set novisualbell
set t_vb=
set tm=500

" 搜索相关
set ignorecase " 不区分大小写
set smartcase " 如果输入的pattern含大写,那么就区分大小写了
set hlsearch " 高亮搜索结果
set incsearch " 输入多少pattern实时显示搜索结果


" 取消备份文件(这个看自己)
set nobackup
set nowritebackup
set noswapfile

" 文本,tab,缩进
set expandtab " 将tab自动转换为空格
set smarttab " tab的长度与shiftwidth一致(之前与tabstop和softtablstop一致)
set shiftwidth=4 " 缩进长度大小
set tabstop=4 " 一个tab的大小
set linebreak " 太长换行
set autoindent " 在另起一行时继承上一行的indent
set smartindent " 写C-like程序的时候智能增加/减少缩进(其他语言的程序也可以)
set wrap " 超出编辑器宽度换行(与linebreak区别在于它可以中间截断一个词)

Tricks

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
" :W sudo 保存文件
command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
" neovim并不支持,需要suda.vim 插件

map <silent> <leader><cr> :noh<cr> " <leader>回车取消高亮

function! VisualSelection(direction, extra_filter) range
let l:saved_reg = @"
execute "normal! vgvy"

let l:pattern = escape(@", "\\/.*'$^~[]")
let l:pattern = substitute(l:pattern, "\n$", "", "")

if a:direction == 'gv'
call CmdLine("Ack '" . l:pattern . "' " )
elseif a:direction == 'replace'
call CmdLine("%s" . '/'. l:pattern . '/')
endif

let @/ = l:pattern
let @" = l:saved_reg
endfunction
" 搜索选定内容
vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
" 更方便的切换窗口
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" 在关闭文件之后也可以undo
try
set undodir=~/.vim_runtime/temp_dirs/undodir
set undofile
catch