vim
2016年05月13日

概要

vim/gvim作为现在常用的文本编辑工具,真的有必要认真的学习和配置一下.
不过由于vim的学习曲线陡峭和配置选项的过于繁杂,所以在这里汇总备忘.

安装

gentoo中安装gvim,对于各种附加功能,可以通过equery u gvim查看是否启用,写入到package.use文件里

emerge -av gvim

vim 配置文件结构

  • vim/gvim 以$HOME/.vimrc作为配置文件,此文件后于/etc/vim/xxrc文件读取 :h vimrc:h gvimrc
  • vim/gvim 默认读取$HOME/.vim目录的脚本 :h rtp

gentoo gvim默认在/etc/vim/gvimrc设置了lines 和 columns ,由于gvimrc后于vimrc文件加载,所以窗口大小设置总被覆盖.这问题纠结好久,后来set verbosefile 查看log才找到原因的.本来~/.vimrc~/.vim都是软链接的windows分区的文件,但是后来clang-complete插件的部分功能需要文件包含执行权限,所以不得已~/.vim取消了软链接.不过好在vundle可以批量更新管理插件.及由配置文件,可以很方便的管理.

配色方案

由于vim在终端种运行支持的颜色比较有限,所以需要设置256颜色 set T_Co=256所有的配色方案里,有关颜色的设置都是分为gui和term两部分,缺少某一部分,那一部分将没有配色方案,比较完善的配色方案会根据T_Co变量进行颜色的修正,比如darkburn.但是也有部分配色方案没有这种判断,而term的配色也不是256色,所以需要利用gui2term.py这个python脚本进行修正(不保证绝对成功)

前提:gui2term.py目录必须有rgb.txt文件,修改源配色方案文件中 let g:colors_name='xxxx’改为与源文件同名,并且删除下边所有关于term颜色的设置
python3 gui2term.py sourcefile newfile
把生成的新文件复制的~/.vim/colors/目录

:colorscheme filename "进行设置

插件

vundle
插件管理、安装和更新

showmarks
定位标记管理

marksbrowser
显示定位标记

A
c++ h和cpp文件切换

Grep
正则匹配

trans
在线翻译

webapi
功能库 trans依赖

OmniCppComplete
cpp补全 依赖tag文件的标记

Clang-complete
语法补全 依赖llvm/clang

YouCompleteMe
全能语法补全 依赖llvm/clang

c++ stl语法高亮
http://www.vim.org/scripts/script.php?script_id=4293

附属功能

clewn

clewn并不是Vim插件,其用处是联结vim与gdb。在打开clewn的时候,它利用NetBeans,把gVim与gdb无缝地联结起来,还可以像matlab一样,在调试的时候把鼠标放在变量名上,就会有一个ballon出来显示这个变量的值谁说只有emacs才能与gdb结合的好?另外它的另外一个替代品是VimGdb,这是个Vim插件

常用操作

vim的操作真是太繁杂了,这里有一份从网上抄录的速查命令,能解决绝大多数需求了.

添加序号

为以下四行增加行号有以下内容

    锄禾日当午
    汗滴禾下土
    谁知盘中餐
    粒粒皆辛苦

定位到第一行开头
第一步,在文本开头加一行文字,内容0

    0
    锄禾日当午
    汗滴禾下土
    谁知盘中餐
    粒粒皆辛苦

第二步,光标移动到第二行,按”qa"进入录制模式,接着按“0”把光标定位到第一列,按"k"到上一行,按"yw"复制上一行序号,按"j"回到原来的行,按"P"黏贴上一行序号,按”a"进入编辑模式,并在序号后加上点和空格。按"ESC"回到命令模式,按"0"回到首列,按"Ctrl-A"增加序号,按“j"把光标移到下一行。按"q"结束录制。然后就可以使用7@a给剩下的文本加上序号了。完整的录制按键序列为"qa0kywjPa. <ESC>0<ctrl-A>jq"

    1. 锄禾日当午
    2. 汗滴禾下土
    3. 谁知盘中餐
    4. 粒粒皆辛苦

如果需要用字母作为序号,那么先要确保nrformats设置中包含alpha选项。:set nrformats+=alpha
注意,Windows下的vim Ctrl-A是全选,需把mswin.vim中的如下内容注释

    " CTRL-A is Select all  
    "noremap <C-A> gggH<C-O>G  
    "inoremap <C-A> <C-O>gg<C-O>gH<C-O>G  
    "cnoremap <C-A> <C-C>gggH<C-O>G  
    "onoremap <C-A> <C-C>gggH<C-O>G  
    "snoremap <C-A> <C-C>gggH<C-O>G  
    "xnoremap <C-A> <C-C>ggVG  

或者临时性不加载mswin.vim文件。

求和

:%!awk '{print; sum+=$1 }END{print sum}'

批量修改文件编码

  1. 设置要转换的文件集合
:args ~/code/*.h 

如果需要递归检索

:args ~/code/**
:ar 

查看集合中的文件

  1. 转换编码
argdo set fenc=utf-8|update!

给出要在每个文件上执行的命令,这里是转换编码:

:argdo set fenc=utf-8 | update

这样就 ok 了,一边偷着乐去吧.这里要注意的是如果要同时执行多个命令则需要用 “|” 隔开,上面的update一定要写上,因为vim在一个文件被修改后尚未保存的情况下去编辑下一个文件会给出出错提示的,用上这个update就是更新文件了,这样就不会出这个问题了

当然args和argdo能做的事情多的很,比如可以在多个文件中批量替换,这个应该也很实用吧,具体可以查看 vim 的帮助文件:help args:help argdo

输入回车

c-v c-m

同步滚动

set scrollbind

中文文档

vim中文文档

安装

./vimcdoc.sh -i
```

使用
``` vim
:help usr 
"或者 
:help usr_29    "(29章节)
```