(1)寄存器
VIM里面的寄存器可以用来保存拷贝的文本、记录的宏、设置的书签等等,一般的编辑器都只有一个剪切板(MS Office加入了多个剪切板),而VIM和Emacs编辑器中的多寄存器可以实现多个剪切板的功能。VIM中有九类寄存器:
无名寄存器 " 最近一次删除/修改/替换操作的文本都会放入这个寄存器
10个数字寄存器 0-9 拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用的,在每次存入内容到寄存器1时,原有的内容会依次存入到后一个寄存器中。
小删除寄存器 - 删除内容少于一行时放入这个寄存器。
26个命名寄存器 a-zA-Z 大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用。
四个只读寄存器 :.%# 特殊用途。
表达式寄存器 = 特殊用途。
选择和拖放寄存器 *+~ 用于与系统剪切板交互,以及接收拖放操作的内容。
黑洞寄存器 _ 放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器。
最后一次搜索模式寄存器 / 保存最后一次搜索的正则表达式。
使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"*y可以将visual mode下选择
的内容拷贝到系统剪切板,使用"+p或者"*p可以将剪切板中的内容粘贴到VIM中,如果打开了
mswin特性的话则在insert mode下使用Ctrl-x,Ctrl-v,Ctrl-c了。
Reference: :help registers
(2) 宏
Normal mode下按q<reg>,<reg>指{a-zA-Z0-9"}37个寄存器中的一个,然后可以进行任何操作,包括在模式间切 换,最后在Normal模式下按q可以结束宏录制,用@<reg>命令可以应用这个宏,命令前可以带数字前缀表示执行多少次这个宏。
Reference: :help q
(3) 书签
Normal mode下按m<reg>作书签,<reg>指26个命名寄存器中的一个,然后可以用'<reg>或者`<reg>跳到书签处。
Reference: :help m
(4) 映射
VI/VIM可以将某个按键序列映射到一个命令序列上,比如在配置文件.vimrc(Windows下是_vimrc)中写入
map <F6> <ESC>i<C-R>=strftime("%Y-%m-%d")<ESC><ESC>
即可以在Normal mode下插入当前日期。
Reference: :help :map
(5) 缩写
VI/VIM支持用一个缩写字符串代替一个长的字符串,比如
:ab hw hello world
然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”。这里展示一个Emacs下abbrev功能的动画(没错,是Emacs的):
http://www.bloomington.in.us/~brutt/msf-abbrev.html
http://www.bloomington.in.us/~brutt/msf-abbrev-demo.gif
Reference: :help :ab
(6) :s//和:g//,:!g//
这两个命名加上正则表达式,常常能完成非常复杂的编辑任务,可以毫不夸张地说是VIM的两柄瑞士军刀。:s是替换操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。
http://www.vim.org/tips/tip.php?tip_id=1063这个tip可以把:g找到的行拷贝到一个新的缓冲区中,非常有用。
Reference: :help :s
:help :g
(7) 插件
VIM自己有脚本语言,另外也支持用Perl/Python/Tcl/Ruby/Scheme编写插件,这些插件极大的丰富了VIM的功能。
(8) color scheme
VIM有许多配色方案,下面这个链接有许多配色方案效果的图样:http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/
(9) 二进制编辑
VIM可以利用xxd实现二进制编辑,不过这项功能还是不够好用。
(10) sign
sign指在编辑窗口的最左列显示一个标记,利用这个功能能实现很多IDE中的书签标记或者断点标记。
Reference: :help sign