转自:http://book.douban.com/review/2048676/

 

常用技巧
下面总结一下我从这本书和其它地方学到的一些常见的设置和技巧(我自认为是中高级的,可是有些读者可能认为某些部分是初级的)。

2.1全局替换
%s/old/new/g

2.2多文件替换
多文件替换,比如要替换所有.c文件中a_value为a_value,可以使用如下方法:
vi *.c
:argdo %s/a_value/b_value/ge | update
其中update是直接替换覆盖原文件,若需要确认,则可使用
:argdo %s/a_value/b_value/gec | update

2.3增加多行注释
方法一:
Ctrl+v; 选定所需行; I; #|//; Esc两次
比如需要增加#或者是//这种注释。Ctrl + v 定位到开始行,然后选定需要的行,然后执行 I 命令,然后输入 # 或 //,然后按 Esc键两次,即可把注释操作应用到所有选定的行,记住选定不能使用v指令,而应该使用Ctrl + v (清除注释请参考上面的方法)(v是按行选定,Ctrl + v 是按照列选定)
方法二:
:起始行,终止行s/要替换字符/替换为新字符/g
比如::1,20s/^/\/\//g

2.4 ab技巧
:ab 替代符 原始信息
比如::ab mail abc@gmail.com

2.5分割窗口功能
分割窗口:
:split [filename] (水平分割)
:vsplit [filename] (垂直分割)
:new (打开一个窗口编辑新文件)
窗口跳转:
CTRL+W w (循环跳转)
CTRL+W (h|j|k|l) (上下左右)
关闭(当前)窗口:
:close
关闭所有其它窗口:
:only
增减窗口大小
CTRL+W +/-
缓冲区跳转:
:bnext (下一缓冲区)
:blast (上一缓冲区)
退出所有窗口
:qall
保存所有窗口:
:wall
保存并退出所有窗口:
:wqall

2.6改变颜色配置
:colorscheme mycolors
Vim自带多种配色方案,可以根据需要自己选用。若不知道系统有哪些配色方案,可以在输入:colorscheme(空格)后用Shift+Tab键选择。

2.7显示和不显示行号
显示行号:set nu[mber]
取消显示行号:set nonu

2.8更好的状态行
通过设置statusline可以设置更好的状态行,我选择的设置是:
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [ASCII=\%03.3b]\
[POS=%4l,%3v][%p%%]\ [LEN=%L]
它可以显示当前文件的路径和文件名以及整个文件的长度。

2.9光标行和光标列
:set cursorline (设置光标行)
:set cursorcolumn (设置光标列)
其中我觉得光标行更有用些。Vim默认设置,要找到光标所在位置不是很方便。

2.10语言拼写检查
set spell
set spelllang=en,de,it
中文需要语言包支持,不过最常用的还是英文检查吧

2.11键绑定
map 对Normal, Insert, Visual和Command-line模式均有效
imap Insert模式有效
cmap Command-line模式有效
nmap Normal模式有效
vmap Visual模式有效
键绑定可以定义一些键的组合为一个快捷键,如:
imap <C-s> <ESC>:w<CR>a

2.12定位功能
{ 段首
} 段尾
g, 前一修改处
g; 后一修改处
( 句首
) 句尾
w 下一单词头
b 前一单词头
% 跳至匹配括号
[[ 和 ][ 向后|前至下一区段开始
[] 和 ]] 向后|前至下一区段结束
[{ 跳至块开始
]} 跳至块结束
[/ 跳至注释块开始
]/ 跳至注释块结束
gd (Goto Declaration) 跳至定义处
gD 跳至全局变量定义处
gj 跳至长行下一段
gk 跳至长行上一段
gf (Goto File) 打开文件
?向前查找
/ 向后查找
?? 重复上一向前查找
// 重复上一向后查找
# 向前查找光标下词(整词匹配)
* 向后查找光标下词(整词匹配)
g# 向前查找光标下字符串(不必是整词)
g* 向后查找光标下字符串(不必是整词)
vimgrep /pattern/[j][g] file file2 … fileN 多文件查找
使用标志(mark)定位:
0~9 系统自用
a-z 本文件mark (使用方法: 标志:ma, 调至标志 `a)
A-Z 跨文件的mark
:marks 查看所有标志
:delmarks 删除标志

2.13 自动补全
Ctrl+p 自动补全单词
Ctrl+n 自动补全单词(向前查找)两者一般感觉不到区别
Ctrl+x Ctrl+k 通过字典补全单词
Ctrl+x Ctrl+t 从同义词典(thesaurus)补全
Ctrl+x Ctrl+f 文件名自动完成(很有用)
Ctrl+x Ctrl+l 自动完成整行
Ctrl+x Ctrl+i 从当前和包含文件补全
Ctrl+x Ctrl+o 全能自动补全,需要set omnifunc
说明:
设置字典的方式:在.vimrc中增加以下语句(借用look命令的字典库)
set dictionary+=/usr/share/dict/words
即可使用Ctrl+x Ctrl+k功能,很好很强大!

2.14 使用宏
qx (开始录制宏至寄存器x,x可以为任何字母,但是最常见的是q)
command1

q (结束录制)
@x (引用宏)
@@ (重复上次宏使用)
2.15读写文件或命令内容
:r filename (读入文件内容)
:m,nw filename (将m~n行内容写入文件)
r!command (插入command命令结果)

2.16使用寄存器
无名寄存器 “”
数字寄存器 “0 “1 … “9
有名寄存器(Named Registers) “a~”z “A~”Z (大写寄存器内容追加,而不是覆盖)
只读寄存器:
“% 当前活动缓冲区文件名
“# 前一文件的文件名,替换文件
“. 最后插入的文本
“: 最后命令行运行的命令
黑洞寄存器: “- 进入的永远消失
搜索模式寄存器 “/
表达式寄存器: “= (使用:输入表达式后ENTER, p粘贴)

2.17折叠
zfa{ 创建折叠
zc 折叠
zo 打开折叠
zM 折叠所有
zR 打开所有折叠

2.18文件比较vimdiff
:vimdiff file1 file2
:diffsplit filename
或命令行下 vim –d file1 file2 可进行文件比较
[c 前一差别
]c 后一差别

2.19缩进
>% 缩进块中内容
<% 反缩进块中内容
>i{ {内部缩进(不包括{})
>a{ {内容缩进(包括{})
<i{ 反缩进
<a{ 反缩进

2.20使用文件模板
:autocmd BufNewFile *.html 0r $VIMHOME/template/html.tpl
可以在创建新的.html文件时读入模板(html.tpl中内容)

2.21识别中文字体
你的Vim在打开中文文件时都是乱码吗?若是这样,在.vimrc中加入以下几行就可以了:
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc

3. 常用插件
Vim中的插件有许多,上Vim.org自己查吧,不过我自己使用以下几个,也觉得是用有用的。以下只说明这些插件的用途,具体用法不做详细介绍。有了这些插件,足以形成一个可以与VC媲美的集成开发环境了。
3.1 ctags
实现标签跳转,C/C++/Java编程时很有用。命令行下ctags –R *创立标签,Ctrl+]/Ctrl+O跳转,Ctrl+T返回
3.2 taglist
生成文件纲要,包括函数、关键字等。安装后使用:Tlist
3.3 A
实现头文件跳转。ctags不能查找头文件
3.4 NERDtree
目录浏览功能。可以用o命令打开目录或文件,非常好用
3.5 MiniBuffer
打开多个文件时,生成一个类似标签页的导航菜单,可以用Ctrl+w w命令跳转至该部分并用Tab选择不同文件
3.6 calendar
日历插件