目录
用 vim 也有一段时间了, 真心是越用越好用, 现已作为敲代码主力以及默认文本编辑器
于是来共享下自己的 vim 配置, 文章底部免费赠送个人在用的 gVim 绿色版以及配置,
也可以到 github 查看
此外, 可以参见 这篇文章 来一键进行配置
以下配置在 Windows gVim, Ubuntu vim, Mac vim, Mac MacVim, Android VimTouch 测试过 :)
插件
废话不多说, 先推荐下个人在用的插件: (排名按照字母顺序)
个人自己写的一些插件在此: http://zsaber.com/blog/p/70,
很多都是现有插件的强化替代, 本文就不列了
通用
-
junegunn/vim-plug
管理插件的插件, 下文所有插件都可以用
Plug '插件名字'
进行安装之前一直用 Vundle, 后来换这货, 因为足够简单, 而且装插件的速度快
-
vim-scripts/xterm16.vim
个人唯一在用的 vim 主题, 可以在各种终端下的显示都比较正常 (因为一些特殊原因, 本人偶尔会在 8 位色终端下跑 vim)
不想纠结各种奇怪的显示问题的话, 强力推荐这个主题作为备用
相对的, 256 色主题个人推荐使用
tomasr/molokai
或morhetz/gruvbox
, 美观, 看着也不累 -
cohama/agit.vim
简单好用的 git 历史查看
-
DataWraith/auto_mkdir
vim 一个文件名时, 自动创建中间的目录结构
-
jiangmiao/auto-pairs
输入括号引号什么的时候自动补全配对
同类插件挺多, 不过这个感觉用着效果最好, 不过偶尔会出现奇怪的 BUG, 所以建议还是把这货的退格和回车的映射禁用掉
-
vim-scripts/BufOnly.vim
关闭除当前 buffer 外所有 buffer, 简单好用
-
ap/vim-buftabline
显示 buffer 列表, 之前一直用 minibufexpl, 但这货用 tabline 来实现, 果然效果好了很多,
唯一遗憾的是, 这货的配置项太少了 -
vim-scripts/CmdlineComplete
命令模式下可以按
<c-p>
之类的按键来自动补全, 补全的内容可以是当前 buffer 中的内容, 偶尔还挺实用的, 不过也仅限于偶尔 -
junegunn/vim-easy-align
按照指定字符进行列对齐, 非常适合拿来做一些排版操作
(不过这货的命令规则太他喵的难记了, 需要一段时间适应) -
dkprice/vim-easygrep
作为一个从来记不住 grep 命令的人, 这个拿来做全工程替换还是挺不错的
默认使用的是 vim 的 magic 模式的正则表达式, 可以开启 perl 风格的正则,
具体参照 这里 -
Lokaltog/vim-easymotion
这个真心太好用了, 再也不用数格子进行跳转了, 光标可以随心所欲的跳来跳去了, 强力推荐
个人把这货映射到 s 上
map s
(easymotion-s) map S (easymotion-sol-bd-jk) 此外, 想要支持中文的话, 可以参考 ZSaberLv0/vim-easymotion-chs
-
othree/eregex.vim
搜索和替换的时候使用 perl 风格的正则表达式, 强力推荐替换掉 vim 自带的正则
-
terryma/vim-expand-region
一键快速选中括号引号之类的东西包含的区域
不过这玩意儿可能存在卡以及需要按多次的问题, 但是目前好像没发现靠谱的替代品
-
drmikehenry/vim-fontsize
快速调整 gVim 的字体大小, 并且不依赖系统字体 (很多其他同类插件需要明确指定字体)
-
haya14busa/incsearch-fuzzy.vim
模糊匹配的 incsearch, 需要
haya14busa/incsearch.vim
-
Yggdroot/LeaderF
模糊匹配打开文件, 而且可以通过路径过滤, 相当好用
不过这货需要 Python, 如果没有的, 建议
kien/ctrlp.vim
作为备胎, 毕竟快速打开文件还是必备功能 -
AndrewRadev/linediff.vim
通过选择快速 diff 同一个 buffer 内的内容, 有时候挺好用的
-
andymass/vim-matchup
用 vim 自带的 % 键, 在各种标记语言的 tag 之间快速跳转
这货相比历史悠久的
adelarsq/vim-matchit
, 好处是可以高亮, 坏处是跳转行为略微有点奇怪, 以及文件复杂了可能会卡 -
scrooloose/nerdtree
众所周知的树形文件浏览器
-
jistr/vim-nerdtree-tabs
nerdtree 的插件, 让所有 tab 共用同一个 nerdtree 侧边栏
-
ZSaberLv0/nerdtree_menu_util
个人整理的 nerdtree 的插件, 给 nerdtree 添加一些好用的菜单项
-
-
google/vim-searchindex
简单好用的显示搜索匹配个数的玩意儿
-
vim-scripts/ShowTrailingWhitespace
行尾空格会以高亮显示出来, 保持优良代码风格必备
-
kshenoy/vim-signature
可视化的 mark, 简单好用
-
ervandew/supertab
按 tab 来进行自动完成, 并且可以根据当前场景使用不同自动完成模式, 再也不用纠结到底用
<c-p>
还是<c-n>
什么的了 -
tpope/vim-surround
快速添加删除和修改外层标签, 比如括号, html tag, 还可以添加自定义标签, 非常好用
-
SirVer/ultisnips
快速插入一些预定义模板, 需要较长时间折腾属于自己的配置
如果需要支持
python2
, 这有个我的备份ZSaberLv0/ultisnips_py2
个人在用的模板 ZSaberLv0/ZF_ultisnips
-
KabbAmine/vZoom.vim
简单好用的窗口最大化工具
-
ianva/vim-youdao-translater
翻译插件, 老实讲, 一个能打的都没有, 就这个凑合能用一下
-
yuratomo/w3m.vim
虽然看起来没卵用, 但是说不定哪天需要 ssh 到 VPS 科学上网呢 233
编程语言相关
好用但难配置的补全引擎先列在前面:
-
neoclide/coc.nvim
有
node
的话别折腾别的了, 还是用这个吧 -
ncm2/ncm2 or Shougo/deoplete.nvim
这俩在我来看都差不多, 好处是只要 python, 坏处是性能相对较差
-
Valloric/YouCompleteMe
大名鼎鼎的语义补全插件, 不过已经有
neoclide/coc.nvim
这样的更好的替代品了- ZSaberLv0/ycm_conf_default : 好用的默认配置
其它通用插件列表:
-
taxilian/a.vim
输入 :A 在 h/cpp 文件间切换
-
tyru/caw.vim
快速注释/反注释一些内容, 这货应该算是支持文件类型最多的了
-
CompleteParameter.vim
好用的函数参数补全, 需要配合一些 complete engine, 比如
neoclide/coc.nvim
-
sheerun/vim-polyglot
大而全的文件类型收集, 不过广的代价大约就是不精吧
-
vim-syntastic/syntastic
知名的语法检查插件, 好处是几乎不用怎么配置, 系统有相关 tools 就自动生效
语言相关插件:
-
Rip-Rip/clang_complete
很好用的补全插件, 安装比各种补全插件容易多了, 不过问题也多,
容易崩溃, 没有异步补全, 不支持模糊匹配, 备胎 -
rhysd/vim-gfm-syntax
markdown 语法高亮等功能, 同类插件很多, 但是这个总体来说比较综合一点, 而且也支持代码块高亮
-
mzlogin/vim-markdown-toc
插入并自动更新目录, 简单好用
-
amiorin/vim-fenced-code-blocks
用于快速的编辑某一小段的代码块, 适合 markdown 这种内嵌其它语言代码块的
-
mhinz/vim-lookup
没有补全引擎的情况下, 查找 vim 的函数, 有时候挺好用的
-
sukima/xmledit
自动匹配 xml 标签
按键映射
扯完了插件, 当然要扯一下 vim 的各种按键映射
-
leader
let mapleader="'"
这个也纯粹个人喜好, 用单引号来做 leader, 因为个人偶尔在手机上用 vim, 单引号比较方便输入
-
esc
inoremap
l inoremap jk l cnoremap jk if has('terminal') || has('nvim') tnoremap jk tnoremap endif nnoremap xnoremap onoremap 之前一直用 jj 来当 esc, 虽然被很多大神诅咒为祸害新人的按键映射, 不过真的还是挺好用的
后来经过别人推荐, 改成用 jk 了, 用起来更顺手
个人在
<esc>
后加了个 l, 在大多数场景下更符合惯性思维吧, 具体体会一下就知道了顺便还映射了命令模式下用 jk 退出, 看到
<c-c>
而不是<esc>
的时候有没有感觉脑子一抽? :D -
visual 模式
nnoremap V
vnoremap V nnoremap V vnoremap V 交换行选择和列选择模式, 因为感觉列选择模式明显用的次数更多
-
select 模式的一些映射
let s:_selectmode_keys='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$%^&*-_=+\\|;:,./?)]}>' for i in range(strlen(s:_selectmode_keys)) silent! execute 'snoremap
' . s:_selectmode_keys[i] . ' "_c' . s:_selectmode_keys[i] endfor silent! snoremap silent! snoremap jk gv silent! snoremap "_c silent! snoremap ( "_c() i silent! snoremap [ "_c[] i silent! snoremap { "_c{} i silent! snoremap < "_c<> i silent! snoremap ' "_c'' i silent! snoremap " "_c"" i silent! snoremap <c-g>"_c
`i 在 select 模式下可以直接输入任意键来输入并替换原来的内容, 目前主要发现在 clang_complete 中非常好用
-
光标移动
nnoremap
zh nnoremap zl nnoremap nnoremap 滚屏幕, 毕竟 ctrl + hljk 比较顺手
inoremap
inoremap inoremap inoremap 编辑模式下快速的移动光标, 这个倒是觉得挺必要的, 比直接按方向键或切换模式什么的方便多了
cnoremap
cnoremap cnoremap cnoremap 命令模式下移动光标
nnoremap H :bp
nnoremap L :bn 快速切换 buffer, 配合 minibufexpl 很好用
nnoremap J
xnoremap J nnoremap K xnoremap K 翻页, 这个就纯粹个人喜好了, 偶尔在手机上用 vim, 这样比较好按
-
光标跳转
nmap z, % xmap z, % omap z, % nnoremap , $ xnoremap , $ onoremap , $ nnoremap g, g$ xnoremap g, g$ onoremap g, g$
个人喜好, 因为在手机上一些符号真心不好打
nnoremap j gj xnoremap j gj onoremap j gj nnoremap gj j xnoremap gj j onoremap gj j nnoremap k gk xnoremap k gk onoremap k gk nnoremap gk k xnoremap gk k onoremap gk k
在自动换行模式下, jk 可以按照习惯的方式上下移动, 这个当时我还找了挺久
-
括号跳转
nnoremap zg
nnoremap zg) va) h% nnoremap z) va) h xnoremap zg) <mz
>va)h%m>`zm<:delmarks z gv xnoremap z) <mz
>va)`zm<:delmarks z gvh nnoremap zg] va] h% nnoremap z] va] h xnoremap zg] <mz
>va]h%m>`zm<:delmarks z gv xnoremap z] <mz
>va]`zm<:delmarks z gvh nnoremap zg} va} h% nnoremap z} va} h xnoremap zg} <mz
>va}h%m>`zm<:delmarks z gv xnoremap z} <mz
>va}`zm<:delmarks z gvh nnoremap zg> va> h% nnoremap z> va> h xnoremap zg> <mz
>va>h%m>`zm<:delmarks z gv xnoremap z> <mz
>va>`zm<:delmarks z gvh nnoremap zg" vi" ` xnoremap zg" <mz
>vi"<m>
zm<:delmarks zgv xnoremap z" <mz
>vi"`zm<:delmarks z gv nnoremap zg' vi' ` xnoremap zg' <mz
>vi'<m>
zm<:delmarks zgv xnoremap z' <mz
>vi'`zm<:delmarks z gv nmap zg; zg} nmap z; z} xmap zg; zg} xmap z; z} 在括号内时, 跳转到对应的括号上, 具体自行试试就知道了
-
tag 跳转
nnoremap zj
nnoremap zk nnoremap zh :tprevious nnoremap zl :tnext 讲真, 撸多了会觉得 ctrl 键很不好用, 而且很多 ctrl 相关的快捷键没啥规律, 记不住
-
撤销
nnoremap U
个人喜好, 毕竟要把 u 和
<c-r>
联想到一起还是有点困难的, 而且这样更好按 -
删除替换时, 不要覆盖剪贴板
nnoremap c "_c xnoremap c "_c nnoremap d "_d xnoremap d "_d nnoremap
"_dl vnoremap"_d inoremap删除, visual 模式粘贴时, 不要替换剪贴板内容, 这个我也赌五毛很多人想要却不知道怎么实现
-
各种粘贴
if has('clipboard') nnoremap zp :let @" = @*
:echo 'copied from system clipboard' else nnoremap zp endif set clipboard+=unnamed set clipboard+=unnamedplus nnoremap p gP xnoremap p "_dgP nnoremap P gp xnoremap P "_dgp nmap p xmap p if has('clipboard') inoremap * " paste as user typed " to ensure the command would exist in command history function! ZF_Setting_command_paste() call feedkeys("\ *", 't') return '' endfunction cnoremap '' . ZF_Setting_command_paste() snoremap "_c * else inoremap " cnoremap " snoremap "_dgP endif 具体含义请自行
:h register
, 感觉这样明显更符合常规的使用习惯 -
窗口移动和大小
nnoremap B :bufdo
nnoremap zs :w nnoremap ZS :wa nnoremap zx :w :bd nnoremap ZX :wa :bufdo bd nnoremap cx :bd! nnoremap CX :bufdo bd! nnoremap x :bd command! W w !sudo tee % > /dev/null nnoremap WH h nnoremap WL l nnoremap WJ j nnoremap WK k nnoremap WO :resize :vertical resize nnoremap WI :vertical resize nnoremap WU :resize nnoremap WW w nnoremap WN = nnoremap Wh 30 < nnoremap Wl 30 > nnoremap Wj 10 + nnoremap Wk 10 - 具体不解释了, 用了许久后总结出来的映射
-
折叠模式
xnoremap ZH zf nnoremap ZH zc nnoremap ZL zo nnoremap Zh zC nnoremap Zl zO nnoremap ZU zE nnoremap ZI zM nnoremap ZO zR
hjkl 这么顺手的按键怎么可以不多用用
-
比较模式
nnoremap D
nnoremap DJ ]czz nnoremap DK [czz nnoremap DH do xnoremap DH :diffget nnoremap DL dp xnoremap DL :diffput nnoremap DD :diffupdate hjkl 这么顺手的按键怎么可以不多用用 +1
-
快速左右缩进和上下移动一行
nnoremap C
nnoremap CH v"txhh"tp nnoremap CL v"tx"tp nnoremap CJ mT:m+ `T:delmarks T :echo '' nnoremap CK mT:m-2 `T:delmarks T :echo '' xnoremap CH "txhh"tp <hm<
>hm>gv xnoremap CL "tx"tp<lm<
>lm>gv xnoremap CJ :m'>+gv xnoremap CK :m'<-2 gv nnoremap < << nnoremap > >> -
增减数字
nnoremap CI
nnoremap CU set nrformats+=alpha 非常不喜欢用 ctrl 的快捷键, 于是又整了个大写字母的
-
宏相关
function! ZF_Setting_VimMacroMap() nnoremap Q :call ZF_Setting_VimMacroBegin(0)
nnoremap zQ :call ZF_Setting_VimMacroBegin(1) nnoremap cQ :let @t='let @m="' . @m . '"' q:"tgP nmap M @m endfunction function! ZF_Setting_VimMacroBegin(isAppend) nnoremap Q q:call ZF_Setting_VimMacroEnd() nnoremap M q:call ZF_Setting_VimMacroEnd() @m if a:isAppend!=1 normal! qm else normal! qM endif endfunction function! ZF_Setting_VimMacroEnd() call ZF_Setting_VimMacroMap() echo 'macro recorded, use M in normal mode to repeat' endfunction augroup ZF_Setting_VimMacro_augroup autocmd! autocmd User ZFVimrcPostNormal \ call ZF_Setting_VimMacroMap() \| nnoremap :: q:k$ \| nnoremap // q/k$ augroup END 按一个键明显比按两下更快嘛
-
快速编辑命令行的命令
function! ZF_Setting_cmdEdit() let cmdtype = getcmdtype() if cmdtype != ':' && cmdtype != '/' return '' endif call feedkeys("\
q" . cmdtype . 'k0' . (getcmdpos() - 1) . 'li', 'nt') return '' endfunction cnoremap ;; ZF_Setting_cmdEdit() 简单粗暴又好用
-
搜索相关
nnoremap / /\v nnoremap ? /\v nnoremap
vr :.,$s/\v/gec xnoremap vr "ty:.,$s/\v t//gec nnoremap zr :.,$s/\v/gec < >/ xnoremap zr "ty:.,$s/\v< t>//gec nnoremap v/ :%s/\v//gn xnoremap v/ "ty:%s/\v t//gn nnoremap z/ :%s/\v< t>//gn xnoremap z/ "ty:%s/\v< t>//gn 自行体会一下就知道这么映射的好用之处了
如果有装
othree/eregex.vim
的话, 对应命令替换一下, 比如:S
-
ctrl+z
nnoremap
现在应该不会有人去用默认的 suspend 功能吧..?
小工具
一些简单但很实用的功能, 我都扔到单独一个插件去折腾了, 参见 ZSaberLv0/ZFVimUtil
这里列一些非常实用的东西:
-
ZF_ExecShell
: 执行 shell 命令并复制执行结果到剪贴板这个如果 shell 命令熟悉的话可以搞出非常多玩法, 比如 find 找出文件之后贴到 vim buffer 中编辑, 快速生成一大堆 shell 命令
-
ZF_OpenAllFileInClipboard
: 打开剪贴板中所有文件配合
ZF_ExecShell
很好用, 比如 find 之后直接用 vim 打开所有找到的文件 -
ZF_RunShellScriptInClipboard
: 执行剪贴板中的 shell 命令配合
ZF_ExecShell
, 然后用 vim 编辑 shell 命令, 再快速执行, 非常方便实用, 而且不容易出错 -
ZF_ExecCmd
: 执行 vim 命令并复制执行结果到剪贴板 -
ZF_Calc
: 计算器 -
ZF_NumberConvert
: 进制转换 -
ZF_DiffBuffer
: 快速比较两个 buffer -
ZF_FoldBlock
: 用正则来做代码块折叠 -
ZF_FoldBrace
: 折叠各种括号内的内容
其它设置项
然后是一些 vim 默认设置的修改
-
常规
set hidden set list set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+ set modeline silent! set shortmess+=F set showcmd set showmatch set wildmenu set autoread set nobackup set nowritebackup set noswapfile set nowrap set synmaxcol=200 set lazyredraw set guioptions=gtk set whichwrap=b,s,<,>,[,] set display=lastline set sessionoptions-=options function! ZF_Setting_common_action() set number set textwidth=0 set iskeyword=@,48-57,_,128-167,224-235 endfunction call ZF_Setting_common_action() augroup ZF_Setting_common_augroup autocmd! autocmd FileType,BufNewFile,BufReadPost * call ZF_Setting_common_action() augroup END
一般都会设置的, 但是没设的时候想找还很麻烦, 建议都 :help 一下
-
大文件的自动适配
function! ZF_Setting_isLargeFile(file) let size = getfsize(a:file) let largeFile = get(g:, 'ZF_Setting_largefile', 2 * 1024 * 1024) if size == -2 || (largeFile > 0 && size > largeFile) return 1 endif let largeColumn = get(g:, 'ZF_Setting_largefile_column', 2000) if largeColumn > 0 && filereadable(a:file) for line in readfile(a:file, '', get(g:, 'ZF_Setting_largefile_columnChecklines', 20)) if len(line) >= largeColumn return 1 endif endfor endif return 0 endfunction augroup ZF_Setting_largefile_augroup autocmd! function! s:ZF_Setting_largefile_restore(...) set eventignore-=FileType endfunction function! s:ZF_Setting_largefile_setup(notifyRestore) if ZF_Setting_isLargeFile(expand('
')) set eventignore+=FileType if has('timers') call timer_start(1, function('s:ZF_Setting_largefile_restore')) endif setlocal bufhidden=unload setlocal foldmethod=manual setlocal nofoldenable setlocal nocursorline setlocal norelativenumber let b:zf_vim_largefile = 1 doautocmd User ZFVimLargeFile else if get(b:, 'zf_vim_largefile', 0) && a:notifyRestore let b:zf_vim_largefile = 0 doautocmd User ZFVimLargeFile endif endif endfunction autocmd User ZFVimLargeFile silent autocmd BufReadPre * call s:ZF_Setting_largefile_setup(0) autocmd BufWritePost * call s:ZF_Setting_largefile_setup(1) augroup END -
编码
set fileformats=unix,dos set fileformat=unix set encoding=utf-8 set fileencoding=utf-8 set fileencodings=utf-8,ucs-bom,chinese
因为基本都在用 UTF8, 所以也挺少遇到编码问题, 不知道是否有更好的配置方法
-
搜索相关
set ignorecase set smartcase set hlsearch set incsearch let s:ZF_Setting_ToggleSearch_last = '' function! ZF_Setting_ToggleSearch() if s:ZF_Setting_ToggleSearch_last == '' || s:ZF_Setting_ToggleSearch_last == @/ let s:ZF_Setting_ToggleSearch_last = @/ echo '' . s:ZF_Setting_ToggleSearch_last return endif echo 'choose search pattern:' echo ' j: ' . s:ZF_Setting_ToggleSearch_last echo ' k: ' . @/ let confirm = nr2char(getchar()) redraw! if confirm == 'j' let @/ = s:ZF_Setting_ToggleSearch_last silent! normal! n echo '' . @/ elseif confirm == 'k' let s:ZF_Setting_ToggleSearch_last = @/ silent! normal! n echo '' . @/ else echo 'canceled' endif endfunction nnoremap zb :call ZF_Setting_ToggleSearch()
nnoremap zn viw b/ N xnoremap zn "ty/ t N nnoremap zm viw b/\< \> N xnoremap zm "ty/\< t\> N nnoremap z/n viw b:%s/ //gn `` xnoremap z/n "ty:%s/ t//gn `` nnoremap z/m viw b:%s/\< \>//gn `` xnoremap z/m "ty:%s/\< t\>//gn `` 需要提一下的是 incsearch 感觉挺实用的, 不过不少平台都因为性能而默认关闭
另外, 星号搜索是全字匹配, 其实大多时候不要全字匹配会更方便, 所以特意又折腾了 zn 和 zm 的按键映射
-
tab 和对齐相关
set expandtab set shiftwidth=4 set softtabstop=0 set tabstop=4 set smartindent set cindent set autoindent set cinkeys=0{,0},0),:,!^F,o,O,e
cinkeys 是个好玩的东西, 有兴趣可以
:h
一下 -
编辑相关
set virtualedit=onemore,block set selection=exclusive set guicursor=a:block-blinkon0 set backspace=indent,eol,start set scrolloff=5 set sidescrolloff=5 set selectmode=key set mouse=
比较关键的是
virtualedit
和selection
另外, 把 mouse 关掉, ssh 终端里用才更方便复制屏幕内容
-
禁用斜体字
if v:version > 704 && get(g:, 'ZF_Setting_disableItalic', 1) function! ZF_Setting_disableItalic() let his = '' try redir => his silent highlight finally redir END endtry let his = substitute(his, '\n\s\+', ' ', 'g') for line in split(his, "\n") if line !~ ' links to ' && line !~ ' cleared$' execute 'hi' substitute(substitute(line, ' xxx ', ' ', ''), 'italic', 'none', 'g') endif endfor endfunction function! ZF_Setting_disableItalic_auto() if g:zf_low_performance augroup ZF_Setting_disableItalic_auto_augroup autocmd! augroup END else silent! call ZF_Setting_disableItalic() augroup ZF_Setting_disableItalic_auto_augroup autocmd! autocmd FileType,BufNewFile,BufReadPost * silent! call ZF_Setting_disableItalic() augroup END endif endfunction call ZF_Setting_disableItalic_auto() augroup ZF_Setting_disableItalic_augroup autocmd! autocmd User ZFVimLowPerf call ZF_Setting_disableItalic_auto() augroup END endif
vim 的斜体字一般都很难看啊…
-
状态栏
set laststatus=2 let &statusline='%<%f %m%r%=%k %l/%L : %c %y [%{(&bomb?",BOM ":"")}%{(&fenc=="")?&enc:&fenc} %{(&fileformat)}] %4b %04B %3p%%' augroup ZF_Setting_quickfix_statusline_augroup autocmd! autocmd BufWinEnter quickfix,qf \ let &l:statusline='%<%t %=%k %l/%L : %c %4b %04B %3p%%' augroup END
vim 状态栏的显示, 其实这样就足够了, 没太大必要专门去安装插件
-
补全相关
inoremap
pumvisible() ? "\ " : "\ u\ " inoremap pumvisible() ? ' ' : ' =pumvisible() ? "\ Up>" : "" ' inoremap pumvisible() ? ' ' : ' =pumvisible() ? "\ Down>" : "" ' inoremap pumvisible() ? ' ' : ' ' inoremap pumvisible() ? ' ' : ' ' set completeopt=menuone,longest set complete=.,w,b,u,k,t set omnifunc=syntaxcomplete#Complete 需要注意的是
complete
的设置会影响补全性能 -
折叠相关
function! ZF_Setting_fold_action() set foldminlines=0 set foldlevel=128 set foldmethod=manual normal! zE endfunction call ZF_Setting_fold_action() augroup ZF_Setting_fold_augroup autocmd! autocmd FileType,BufNewFile,BufReadPost * call ZF_Setting_fold_action() augroup END
个人更喜欢手动折叠
-
比较模式
set diffopt=filler,context:200
-
q 键
nnoremap q
xnoremap q onoremap q augroup ZF_setting_cmdwin autocmd! autocmd CmdwinEnter * \ nnoremap q :q augroup END augroup ZF_Setting_qToEsc_augroup autocmd! autocmd CmdwinEnter * \ nnoremap q :q autocmd BufWinEnter quickfix,qf \ nnoremap q :bd \| nnoremap vt :bd \| nnoremap :lclose \| nnoremap o :lclose \| setlocal foldmethod=indent autocmd FileType help \ nnoremap q :q augroup END vim 的宏是个好用的东西, 不过说实话使用频率远不如其它一些基本按键, 所以交换一下 Q 和 q 用起来更爽
尤其很多插件都把 q 作为退出按键, 统一一下习惯总是好的
平台相关设置
Windows
-
启动最大化
autocmd GUIEnter * simalt ~x
一般情况下我还是喜欢启动时居中 (参见 这里),
不过有些情况下并不靠谱, 对不齐, 所以最大化还得留着 -
shell
if exists('&completeslash') set completeslash=slash endif let $PATH = 'C:\cygwin\bin;C:\cygwin64\bin;' . $PATH
Windows 下还是要安装个 cygwin 比较好, 这样才有 grep 等各种好用的东西
但是建议不要设 cygwin 为默认 shell, 使用 cmd.exe 能兼容大多数情况 (因为大多数插件有对 Windows 做兼容处理, 此时用 cygwin 反而会出问题)
把 cygwin 的路径设置到 PATH 最前面, 可以防止一些命令和 Windows 自带的冲突, 比如
find
shellslash 则见仁见智了, 在 Windows 下偶尔会造成一些插件出问题, 好在新版本加了个
completeslash
Cygwin
本配置也可以完美的在 cygwin 下使用, 不过需要注意两个参数, 建议放在 .vimrc
顶部
set shell=bash
set shellcmdflag=-c
DroidVim
Android 平台有相当好用的 DroidVim 了, 本文配置也可用于 DroidVim, 不过配置起来会麻烦一点
纯 VimL 的插件基本都可正常使用, 需要外部命令的则可能无法正常使用
安装
首先当然得装 DroidVim 本体了
装完后可以先打开玩玩, 改一下 DroidVim 本身的设置
配置
DroidVim 的配置在这个目录:
/data/data/com.droidvim/files/home/.vimrc
然而这货里面肯定是跑不了 git 了, 所以建议在电脑上更新好配置, 然后复制到上述路径
需要复制的内容, 以及最后的目录结构:
/data/data/com.droidvim/files/home/
.vim/
bundle/
...
.vimrc
zf_vimrc.vim
下载
共享一下本人在用的绿色版 vim (Windows 版本), 以及相应的 vimrc: 点我下载
或者, 也可以到 github 查看最新的配置 (时不时更新)
- 网盘里的版本可能较旧, 建议运行一下
:call ZF_VimrcUpdate()
, 可以自动更新所有内容和插件 - 网盘里的绿色版已经配好大部分东西, 建议再装个
cygwin
+python
+node
即可 - *nix 版本可以超快速的一键安装啦:
curl zsaber.com/vim | sh
, 具体参见 这里
over
转载请注明来自: http://zsaber.com/blog/p/31
既然都来了, 有啥想法顺便留个言呗? (无奈小广告太多, 需审核, 见谅)
手机上怎么用?还是搞不定
别的平台装好, 然后把 .vim .vimrc zf_vimrc.vim 复制到 /data/data/net.momodalo.app.vimtouch/files/ 目录下
尴尬,不能用!!
不能用具体是指什么