1. spf13简介

Steve Francia使用的vim配置, vim插件插件集合.

2. spf13常用插件简单使用, 中文.

  • Surronund 编辑字符周围的符号的.
# *号表示当前光标停留位置, 所有的操作在vim的nomal模式

Old text                  Command     New text ~
"Hello *world!"           ds"         Hello world!
[123+4*56]/2              cs])        (123+456)/2
"Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>
if *x>3 {                 ysW(        if ( x>3 ) {
my $str = *whee!;         vllllS'     my $str = 'whee!';
  • EasyMotion 跳到任何地方
# 再打对应的字符就可直接跳到单词的首字符位置
,,w

# 再打对应的字符就可直接跳到单词的尾字符位置
,,e
  • Fugitive Git的插件, 可以vim中批量提交git文件, 查看git diff等.
# <leader> 这里就 , 键
<leader>gs :Gstatus
<leader>gd :Gdiff
<leader>gc :Gcommit
<leader>gb :Gblame
<leader>gl :Glog
<leader>gp :Git push
  • Syntastic 语法检查, 有语法错误的地方会有提示.

  • NERDTree vim的目录.

一些在Normal模式下的快捷键

# 切换是否显示NERDTree目录
control + e

# 切换到左边目录中
control + h

# 切换到右边文件中
control + l

# 在文件中左右切换是
shift + h 右, l 右

ctrl + w + h    光标 focus 左侧树形目录
ctrl + w + l    光标 focus 右侧文件显示窗口
ctrl + w + w    光标自动在左右侧窗口切换
ctrl + w + r    移动当前窗口的布局位置

o       在已有窗口中打开文件、目录或书签,并跳到该窗口
go      在已有窗口 中打开文件、目录或书签,但不跳到该窗口
t       在新 Tab 中打开选中文件/书签,并跳到新 Tab
T       在新 Tab 中打开选中文件/书签,但不跳到新 Tab
i       split 一个新窗口打开选中文件,并跳到该窗口
gi      split 一个新窗口打开选中文件,但不跳到该窗口
s       vsplit 一个新窗口打开选中文件,并跳到该窗口
gs      vsplit 一个新 窗口打开选中文件,但不跳到该窗口
!       执行当前文件
O       递归打开选中 结点下的所有目录
x       合拢选中结点的父目录
X       递归 合拢选中结点下的所有目录
e       Edit the current dif

双击    相当于 NERDTree-o
中键    对文件相当于 NERDTree-i,对目录相当于 NERDTree-e

D       删除当前书签

P       跳到根结点
p       跳到父结点
K       跳到当前目录下同级的第一个结点
J       跳到当前目录下同级的最后一个结点
k       跳到当前目录下同级的前一个结点
j       跳到当前目录下同级的后一个结点

C       将选中目录或选中文件的父目录设为根结点
u       将当前根结点的父目录设为根目录,并变成合拢原根结点
U       将当前根结点的父目录设为根目录,但保持展开原根结点
r       递归刷新选中目录
R       递归刷新根结点
m       显示文件系统菜单
cd      将 CWD 设为选中目录

I       切换是否显示隐藏文件
f       切换是否使用文件过滤器
F       切换是否显示文件
B       切换是否显示书签

q       关闭 NerdTree 窗口
?       切换是否显示 Quick Help

:tabnew [++opt选项] [+cmd] 文件      建立对指定文件新的tab
:tabc   关闭当前的 tab
:tabo   关闭所有其他的 tab
:tabs   查看所有打开的 tab
:tabp   前一个 tab
:tabn   后一个 tab

标准模式下:
gT      前一个 tab
gt      后一个 tab

MacVim 还可以借助快捷键来完成 tab 的关闭、切换
cmd+w   关闭当前的 tab
cmd+{   前一个 tab
cmd+}   后一个 tab
  • Emmet.vim 用来快捷生成代码的
# #标签可生成id, $是自增, *3是数据3
div>p#foo$*3>a

h$[title=item$]{Header $}*3

# 跳转到下一个编辑点
<leader> + n
  • NERDCommenter 用来智能注释的
# 注释或取消注释
<leader> + c + 空格键

# 智能注释
<leader> + c + s

我个人的配置.

1. 使用的插件.vimrc.bundles.local

Bundle 'rizzatti/dash.vim'
"Plugin 'heracek/HTML-AutoCloseTag', {'name': 'HTML-AutoCloseTag2'}
UnBundle 'amirh/HTML-AutoCloseTag'


Bundle 'nginx.vim'

# 快速搜索文件
Bundle 'junegunn/fzf.vim'
Bundle 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

# 让目录树也显示git文件状态
Bundle 'Xuyuanp/nerdtree-git-plugin'

# 自动对齐
Bundle 'junegunn/vim-easy-align'

2. 使用的.vimrc.local文件.

1. 强烈推荐设置新键到:w保存, :wq保存退出, :q这些键

这样, 快速, 慢了就触发录制功能, 再按q会退出.

保存退出就只用1个键2次就可以了, 这个使用的最多, 完成不用移动手指位置.

nnoremap qq :wq<CR>
nnoremap qw :w<CR>
nnoremap q0 :q<CR>
nnoremap q- :bw<CR>
nnoremap qa :qa<CR>

2. 完整的.vimrc.local文件

set nospell
"退出编辑模式时自动保存
au InsertLeave *.* write

" 主题
"colo

"编辑行没有黑色条
highlight CursorLine cterm=NONE ctermbg=NONE
"设置编辑模式下, vim可以使用emacs的光标移动
inoremap <C-e> <END>
inoremap <C-a> <HOME>
inoremap <C-f> <Right>
inoremap <C-b> <Left>
inoremap <C-p> <up>
inoremap <C-n> <Down>
inoremap <C-d> <Delete>
inoremap <C-h> <BS>

"neocomplete不加载python文件的补全
"autocmd FileType python NeoCompleteLock

"禁用鼠标
"set mouse-=a

" fasd.vim <tab> shortkey
nnoremap <silent> <C-p> :Files<CR>

let g:ctrlp_map = '<C-i><c-p>'

" emmet
let g:user_emmet_mode='a'
let g:user_emmet_leader_key='<C-L>'
let g:user_emmet_install_global = 0


autocmd FileType html,css,markdown EmmetInstall

set foldmethod=manual

hi Folded term=NONE cterm=NONE ctermbg=236

" Syntastic 自定义出现语法错误的提示符号.
"let g:syntastic_error_symbol = "\u2717"
"let g:syntastic_warning_symbol = "\u26A0"
let g:syntastic_error_symbol = '●'
let g:syntastic_warning_symbol = '▶︎'
let syntastic_style_error_symbol = '○●'
let syntastic_style_warning_symbol = '○▶︎'
let g:multi_cursor_use_default_mapping=0

" Default mapping
let g:multi_cursor_start_word_key      = '<C-n>'
let g:multi_cursor_select_all_word_key = '<A-n>'
let g:multi_cursor_start_key           = 'g<C-n>'
let g:multi_cursor_select_all_key      = 'g<A-n>'
let g:multi_cursor_next_key            = '<C-n>'
let g:multi_cursor_prev_key            = '<C-p>'
let g:multi_cursor_skip_key            = '<C-x>'


noremap <leader>fw :bw<CR>
noremap <leader>fn :bn<CR>
noremap <leader>fb :bp<CR>
noremap <leader>i i<CR><Esc>
noremap <leader>tc :tabc<CR>
noremap <leader>to :tabo<CR>
noremap <leader>tn :tabnew<space>

noremap <leader>no :nohl<CR>

nmap <Leader>aa :Tabularize /+=<CR>
vmap <Leader>aa :Tabularize /+=<CR>

nmap <Leader>ff :EasyAlign<space>
vmap <Leader>ff :EasyAlign<space>

nmap ff- :EasyAlign */[:=\|]\+/is<CR>
vmap ff- :EasyAlign */[:=\|]\+/is<CR>
nmap ff, :EasyAlign */[,]\+/is<CR>
vmap ff, :EasyAlign */[,]\+/is<CR>
nmap ff; :EasyAlign */[;]\+/is<CR>
vmap ff; :EasyAlign */[;]\+/is<CR>
nmap ff= :EasyAlign */[\+]\+/is<CR>
vmap ff= :EasyAlign */[\+]\+/is<CR>
nmap ff0 :EasyAlign *\is<CR>
vmap ff0 :EasyAlign *\is<CR>


nnoremap qq :wq<CR>
nnoremap qw :w<CR>
nnoremap q0 :q<CR>
nnoremap q- :bw<CR>
nnoremap qa :qa<CR>


"autocmd VimEnter * NERDTree
" NERDTree 显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
" 是否显示隐藏文件
let NERDTreeShowHidden=0
" 设置宽度
let NERDTreeWinSize=28
" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1
" 忽略一下文件的显示
let NERDTreeIgnore=['\.pyc','\~$','\.swp']
" 显示书签列表
let NERDTreeShowBookmarks=1


let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "⦿",
    \ "Staged"    : "●",
    \ "Untracked" : "○",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "□",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }



let g:deoplete#enable_at_startup = 1
"let g:pymode_init = 0
"let g:pymode_lint = 0

let g:pymode_python = 'python3'

nmap <leader>mm i<space><ESC>

" java

autocmd FileType java setlocal omnifunc=javacomplete#Complete

" youcompleteme
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
let g:ycm_key_invoke_completion = '<c-x>'


" tagbar
let g:tagbar_width=22
let g:tagbar_right=1