posts - 79, comments - 75, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

VIM终极使用技巧

Posted on 2011-11-06 18:35 sinojelly 阅读(...) 评论(...) 编辑 收藏
    VIM是一个使用非常方便、功能非常强大的文本编辑器。但有一定的学习成本。本文便是教您如何打造一个称心的VIM编辑环境,支持自动补齐、函数间快速跳转等功能。
    为了方便,直接在jeffy分享的vim配置基础上进行了少量改进,在此对jeffy表示感谢!

环境安装

安装前的准备

安装前请备份自己的.vim目录和.vimrc文件。
请安装7.2以上的VIM版本。
请安装ctags、cscope、unzip,详细安装方法请google。
 

安装jeffy提供的方案

$ sudo apt-get install exuberant-ctags cscope
$ svn checkout http://jeffy-vim.googlecode.com/svn/trunk/ jeffy-vim-read-only 
$ cd jeffy-vim-read-only
$ ./install.sh
 

扩展配置

主要是增加了vim-addon-manager相关配置,它是众多vim插件管理工具中非常出色的一个:
1、告诉它插件名字,它就能自动从git/hg/bzr/svn等版本管理工具或者vim插件发布网站下载最新版本并安装。
2、每个插件放在自己单独的目录,便于管理。
3、可以很方便的进行插件版本更新。
 
配置之前,先安装需要的插件:
mkdir ~/.vim/addons
cd ~/.vim/addons
git clone --depth 1 git://github.com/MarcWeber/vim-addon-manager.git
git clone --depth 1 git://github.com/MarcWeber/vim-addon-manager-known-repositories.git
注:~/.vim/addons就是用来保存插件的目录。
 
在~/.vimrc中配置正文内容之前增加如下内容:
" ADD BY CHENGUODONG: {{{1                                                       
let mapleader="
,"                                                                

"
Config vim-addon-manager                                                       
" Auto install/active plugins, and make each plugin to a single folder           
fun SetupVAM()                                                                   
  set runtimepath+=~/.vim/addons/vim-addon-manager                               
  call vam#ActivateAddons([                                                      
       \ 'eregex',                                                               
       \ 'FuzzyFinder',                                                          
       \ ])                                                                      
endf                                                                             
call SetupVAM()                                                                  

"
Enable and disable mouse use                                                   
" Use Shift+F11 to set nonumber and prepare to                                   
"
use mouse to copy it to system clipboard                                       
noremap <S-F11> :call ToggleMouse() <CR>                                         
function! ToggleMouse()                                                          
if &mouse == 'a'                                                                 
set mouse=                                                                                                                                    
set nonumber                                                                     
echo "Mouse usage disabled"                                                      
else                                                                             
set mouse=a                                                                      
set number                                                                       
echo "Mouse usage enabled"                                                       
endif                                                                            
endfunction                                                                      

" Key map for FuzzyFinder                                                        
"
Search files very quickly                                                      
nnoremap <leader>ff :FufFile<CR>  
 
 

关于vimrc配置的说明

1、" 开头的行是注释。
2、{{{1 标签是为了后面的内容可以折叠起来。
3、ActivateAddons后面列出了自动激活的插件名字,如果插件不存在会自动安装。
4、增加Shift+F11快捷键进行显示行号和鼠标操作的切换,不显示行号时,就可以用鼠标复制内容到系统剪贴板。
5、安装FuzzyFinder之后,会提示安装L9,选择Y安装即可,无须把它设置到自动激活列表中。
6、由于vim-adon-manager-known-repositories 收集的插件有些是用bzr管理的,所以最好安装上bzr:
$ sudo apt-get install bzr
 

常用快捷键

F9    当前目录下生成tags
F12   当前目录下生成cscope数据库
F11   全屏切换
Shift+F11  鼠标模式切换(便于去掉行号,用鼠标复制内容到剪贴板)
 
Ctrl+]    跳到函数实现(鼠标双击也可以)
Ctrl+T   跳回上一次位置
:ta func   跳转到func函数
Ctrl+WW   在窗口间切换
:sp    filename    打开另外一个文件
F2    在左边打开类型、函数列表(ctags)
F3    在右边打开选择文件窗口(按F3退出)(NERD)
F4    在下方打开最近访问文件窗口(按q退出)(MRU)
F5    符号搜索(按两次F5退出)
,sc    跳转到当前函数被调用处(cscope)
,be    打开buffer浏览器,查看当前已打开的文件
,zz    当前窗口最大化
:!cmd   VI中执行shell命令
zo     展开折叠的行
zc     折叠行
:wq   保存退出
gg     到达文章开头
G      到达文件结尾
v        进入Visual模式字选择
V       进入Visual模式行选择
Ctrl+v  进入Visual模式块选择
y         复制
p         粘贴
dd       删除行(保存到寄存器)
2dd     删除2行
x         删除字符
r<c>    当前字符替换为<c>,“<c>”可以是任意单个字符
dw       删除单词
2dw     删除2个单词
Ctrl+Z   后台
fg           前台
jobs       查看后台任务
 
列模式插入:
ctrl+v    进入块选择
3j          选中若干行
I            进入插入模式(Shift+i)
<some>   输入想要输入的内容
Esc         就会发现输入的内容在列模式下选中的行都生效了。
 
列模式删除:
ctrl+v
3j
x
 
模式切换
i    插入模式
R  替换模式
 
在函数中移动光标的快捷键:
        [[ 转到上一个位于第一列的“{”
        ]] 转到下一个位于第一列的“{”
        { 转到上一个空行
        } 转到下一个空行
        gd 转到当前光标所指的局部变量的定义
        * 转到当前光标所指的单词下一次出现的地方
        # 转到当前光标所指的单词上一次出现的地方
        括号的匹配
        % 用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。
 
 

插件使用补充说明

通用的帮助查找方法:查看~/.vim/addons/<plugin>/doc中的帮助文件。

ctags & cscope

生成符号表:
cd project_dir
ctags -R *                   (在当前目录生成tags,快捷键F9)
cscope -Rbkq             (在当前目录生成cscope.in.out、cscope.out、cscope.po.out,快捷键F12)
 
注意:
1、所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。
2、cscope功能与ctags类似,但更强大,可以搜索出函数调用关系。
 

vim-addon-manager

使用方法:
InstallAddons {name} ...
    从网络安装指定的插件。通常情况下,应该使用ActivateAddons 命令直接激活。只有在需要了解插件包含的文件列表时才使用这个命令先安装,后激活。
ActivateAddons {name} ...
    激活指定的插件。如果插件没有安装,则先从网络下载安装,然后激活。
ActivateInstalledAddons {name} ...
    激活指定的插件指定的插件已经被安装,但没有激活。这个命令和ActivateAddons 命令的区别仅在于只补全已经安装的插件。
UpdateAddons [{name} ...]
    更新指定的插件到最新版本。如果没有参数则更新所所有已安装插件。
UninstallNotLoadedAddons {name} ...
    卸载指定的插件。
 

eregex 

支持Perl正则表达式。它用function把perl正则表达式转换为vi正则表达式再执行。
用法:
:M/     搜索。(也可以映射到/上)
:S        替换。(大写的S)
 

FuzzyFinder

快速搜索目录、文件。
 
.vimrc中增加配置:
"Key map for FuzzyFinder                                                       
nnoremap <leader>ff :FufFile<CR> 
 
用法:
,ff    快速搜索文件
 

DrawIt

vim中画图。
 
用法:
普通模式,输入",di"进入DrawIt模式,左下角有“DrawIt”字样。
此时,通过光标键,就可以画线(在普通模式)。
 
,di      开始画图
,ds     停止画图
光标键   画直线,拐弯处自动处理(hjkl不行)
PageUp/PageDown  画斜线  
 

其它vim知识

中文帮助

 

查看帮助

:help  
:help CTRL-H    查看普通模式下的CTRL-H帮助
:help i_CTRL-H  查看插入模式下的CTRL-H帮助
:help keycodes
:help colorscheme
 

键盘映射

:map <F5> i{<Esc>ea}<Esc>                   在单词两边加上{},e的作用是移动到词尾。
 
:map       普通,可视模式及操作符等待模式
:vmap     可视模式
:nmap     普通模式
:omap     操作符等待模式
:map!     插入和命令行模式
:imap      插入模式
:cmap     命令行模式
 
查看当前定义的映射:
:map
 

替换

%s/pattern/replacement/g
%:表示作用于所有行。
s:表示替换。
g:表示行中所有匹配点。
 

查看vi当前配置

:set
其中,runtimepath就是插件的可能安装位置。
一般插件包含如下几个目录:plugin、autoload、doc
 

vim插件格式

vimball缩写为vba,使用vim-addon-manager之后,不再需要直接安装vba,可以作个简单了解。
vimball (see :help vimball)
 
vim DrawIt.vba.gz
:so %
:q
 

配置文件同步到dropbox

链接配置文件到dropbox中的文件:
$ ln -s ~/Dropbox/home/linux/config/vimrc -T ~/.vimrc