Yang

Vim tips

2012-04-25 09:25:00

这篇博客分享一些个人觉得有用的 Vim 插件和配置。

首先明确一些环境和一些术语说明:
我所使用的是 Ubuntu 17.04 上的 vim8.0 版本;
下面的配置中,<C 表示 Ctrl 键,比如 <C-v> 表示按住 Ctrl 后按 v 键;
下面的配置中,<M 表示 Alt 键,比如 <M-t> 表示按住 Alt 后按 t 键;
我在说明中提到的“前”,一般的意思是“右或者下”,“后”的意思一般是“左或者上”;
我提到的“字”一般表示一个英文字母或者一个汉字;
我提到的“词”表示一个英文单词,对于中文的话,被英文/标点符号等隔开的就算一个词而不是逻辑上的一个词语。

一、基本操作

这部分的内容,不需要使用额外的外挂和配置文件,事实上我觉得这也是使用Vim首先必须熟悉掌握的一些操作。

1. 切换模式

Esc C-[ C-c i I o O a A v V <C-v>

这些是切换模式的键,可以从在 Vim 的各种模式之间切换。

2. 重复命令

. [N]

这两个是非常有用的命令.

3. 移动命令

h j k l 0 ^ $ e E b B w W f F t ; , gg G H L M ENTER [[ ]] % :[N] 

这些是Vim中的移动命令,就是在 Normal 模式下定位光标位置。

4. 编辑命令

x X d y p P "ayy "ap r R c o D C s S Y u C-r .  << >>

5. 查找/替换

从这里开始,就要介绍一种 Vim 中的另一种模式:命令模式,在 Normal 模式下输入 : 就可以进入命令模式,Esc 返回普通模式。

6. record

q @

q 命令在使用过程中需要使用两次: 第一次表示开 始记录,第一次按下 q 之后还需要输入一个字符表示要把记录的宏存到哪个位置,第二次表示记录的结束。 q 需要 @ 配合使用。 @ 是读取指定寄存器中的操作记录,并将这些操作顺序 地重新执行一遍, 这里举一个例子说明,输入 1 到 100 的数:

i
1
<ESC>
qa
yyp
<C-a>
q
100@a

7. tab

在编辑多个文件的时候,使用多标签可以方便的在不同文件之间切换。

8. 多窗口

如果屏幕够大的话,使用多个窗口来编辑文件要比多标签更舒服,比如我可以在写.c文件的时候在旁边用个窗口显示对应的.h文件的内容。

二、配置文件篇

这部分,是通过配置文件,对 vim 进行定制使得更加符合自己的编辑习惯,我的完整配置文件在这里,这里对其中的部分进行说明。

关于备份文件的配置

set backup " Enable backup
set backupdir=~/.vim/backup " Set backup directory
set directory=~/.vim/swap,/tmp " Set swap file directory
autocmd BufWritePre * let &backupext = strftime(".%m-%d-%H-%M") " Keep more backups for one file

搜索模式里面的一些配置

set magic " Enable magic matching
set showmatch " Show matching bracets
set hlsearch " Highlight search things
set smartcase " Ignore case when searching
set ignorecase

有用的键盘绑定

关于多标签和多窗口编辑的键绑定

nnoremap tp :tabprevious<CR>
nnoremap tn :tabnext<CR>
nnoremap to :tabnew<CR>
nnoremap tc :tabclose<CR>
nnoremap gf <C-W>gf 

nmap <silent> <C-k> <C-W><C-k>
nmap <silent> <C-j> <C-W><C-j>
nmap <silent> <C-h> <C-W><C-h>
nmap <silent> <C-l> <C-W><C-l>

F[N]键的绑定:

nnoremap <silent> <F2> :TlistToggle<CR>:TlistUpdate<CR>
nnoremap <F3> :Rgrep<CR>
nmap <F4> :noh<cr><ESC>
inoremap <F5> <C-R>=strftime("%Y-%m-%d %T %Z")<CR>
nnoremap <F5> :w<CR>:make!<CR>
nnoremap <F6> :w<CR>:make! %< CC=gcc CFLAGS="-Wall -g -O2"<CR>:!./%<<CR>
inoremap <F6> <ESC>:w<CR>:make! %< CC=gcc CFLAGS="-Wall -g -O2"<CR>:!./%<<CR>
nnoremap <silent> <F7> :botright copen<CR>
nnoremap <silent> <F8> :cclose<CR>
nnoremap <silent> <F9> :NERDTreeToggle<CR>
nnoremap <silent> <F10> :set number!<CR>

禁用了方向键:

map <UP> <NOP>
map <DOWN> <NOP>
map <LEFT> <NOP>
map <RIGHT> <NOP>
inoremap <UP> <NOP>
inoremap <DOWN> <NOP>
inoremap <LEFT> <NOP>
inoremap <RIGHt> <NOP>

autocmd

autocmd, 就是 vim 根据判断文件格式自动执行的一些命令,具体关于autocmd的配置,可以参考我的完整配置文件,在配置文件中,对所有的配置都进行了注释,有了前面这些命令和配置介绍的基础,应该可以看明白并且根据自己的需要进行修改。

三、插件介绍篇

使用vim,就免不了用到一些外挂来增强功能,我使用 vim 主要是编辑 C、Makefile、Markdown 等文件,因此我用到的插件列表是这些 这里对其中的部分插件进行介绍

1. Vundle

首先是 Vundle 插件,没有用这个插件之前,管理 vim 的插件是一件很头疼的事情,特别是安装了某个插件但是试用后觉得不好用然后要删除那个插件的时候,总是很麻烦,经过搜索,终于让我找到了 Vundle, vundle 插件需要安装 git。

安装&配置:

git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

然后在 vimrc 中添加如下内容:

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
Bundle 'vim-plugin-foo'
Bundle 'vim-plugin-bar'

使用:
先在 vimrc 中添加需要安装的插件比如:Bundle 'a.vim', 然后 :BundleInstall 就可以安装插件。
vimrc 中移除添加的插件,然后 :BundleClean 就可以删除对应的插件,下面介绍到的插件都使用这种方式安装。

2. SnipMate&SuperTab-continued

这组插件用来自动补全一些内容,在写代码的时候非常方便使用。 使用:输入某些文本(在 snipmate 插件中进行定义)内容后,按 tab 就可以补全,比如在 C 语言代码文件中可以补全的有 main, if, inc, Inc, for等等。

3. DoxygenToolkit&The-NERD-Commenter

这一组插件来给代码文件添加注释。
配置:

let g:DoxygenToolkit_authorName="Vortex - txc DOT yang AT gmail DOT com"
let g:DoxygenToolkit_briefTag_funcName="yes"
let s:licenseTag = "Copyleft(C)\<enter>"
let s:licenseTag = s:licenseTag . "For free\<enter>"
let g:DoxygenToolkit_licenseTag = s:licenseTag
let g:doxygen_enhanced_color=1
map <leader>da :DoxAuthor<CR>
map <leader>df :Dox<CR>
map <leader>db :DoxLic<CR>
map <leader>dc a /*  */<LEFT><LEFT><LEFT>

使用:
在函数名称上面 ,df 为改函数添加函数头注释
,da 可以添加文件头,其中的信息在上面的配置文件中修改
,cc 注释当前行
,cs 更性感的方式注释代码区域
,cu 取消注释
,cA 在不同的注释风格之间切换

4. repeat.vim&surround.vim

这一组插件用来重复一些操作,是 . 命令的加强版,具体的使用可以查看各自插件的文档,都有很详细的例子。

5. vim-powerline

非常漂亮的状态栏定制插件.


上面这些配置和插件,是我在使用Vim过程中总结的一点知识,记录在这里方便遗忘的时候查阅, 也供同样跟我一样刚开始使用 Vim 的朋友们参考。

参考文章:

vim入门进阶与折腾