曾经很长一段时间都是在用 Quanta Plus/Kwrite 来写代码,Quanta Plus 好在自动补充和标签页,而 Kwrite 好在轻便而有功能齐全。后来因为要对代码做批处理,于是慢慢转移到 vim 这款*nix 下最强大的编辑器下来了,以至于现在几乎 100%的时间都是用 vim 来写代码,包括在 blogbus 里给 blogbus hack 写日志。总结了一些我在用 g?Vim 过程中的 tips:

自动识别各种中文编码

.vimrc 文件里加入这句,基本上所有中文编码都没问题了,包括繁体中文

set fileencodings=ucs-bom,utf8,GB18030,Big5,latin1

粘贴文本格式乱了?

写代码时经常要从网页上或其他地方粘贴点代码过来用,但是一贴进 vim 里格式就乱了怎么办?.vimrc 里加入这两句:

set nopaste 
set pastetoggle=<F10>

以上代码的作用是当你需要粘贴代码时先按下 F10 进入切换到 paste,这时再粘贴进去就不会有问题了。为什么不直接设置 set paste 呢? 因为 set paste 在 gVIM 下可能会导致工具栏里的粘贴键失效。

推荐在 gVIM 下使用 desert 主题

desert 是 gVIM 下一个非常 candy 的代码高亮主题,也是我目前看过的最舒服的高亮显示环境了。Gentoo 里的 vim 默认就附带了这个主题,启用它只需要设置:

colorscheme desert

就行了,如果没有这款主题的话,在 下载后将其放到 ~/.vim/colors 目录下再启用就是了。

看起来不是一般的舒服啊 :D

映射常有按键

习惯了 Ctrl+V, Ctrl+S 的文本编辑模式? 习惯了 Ctrl+T, Ctrl+Tab…的 Firefox 标签工作模式? 将以下代码贴如你的 .vimrc 中就是了!

" 映射 Ctrl+V 键粘贴内容 
nmap   :set paste"*p:set nopaste 

" Ctrl+S 实现保存,如果未命名文件名会提示你选择保存路径和文件名
if has("gui_running")
  :map   :if expand("%") == "":browse confirm w:else:confirm w:endif
endif

" Ctrl+A 实现全选
map  ggVG

" Map the hotkeys working like firefox!
if has("gui_running")
  :map  : tabnew " Ctrl+T 新建标签页
  :map  : tabnext "Ctrl+Tab 切换标签页
  :map  : close "Ctrl+W 关闭当前标签页
endif

自动创建模板

用过 Gentoo 的都知道,如果输入 vim package.ebuild,系统会根据文件后缀名自动创建一个最基本的 ebuild 文件模板,以节省编写时间。同样,可以把这招扩展到任意格式的文件下来,以 html 格式为例,先创建一个名为 skeleton.html(Whatever you like) 的基础模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<meta name="description" content="" />
	<meta name="keywords" content="" />
	<title></title>
	<style type="text/css">
		body {font: 12px Verdana,'Lucida Grande',Sans-Serif;}
	</style>
</head>
<body>

</body>
</html>

然后把文件放到 ~/.vim/skeleton/ 下,在 .vimrc 中加入这句:

au BufNewFile *.html 0r ~/.vim/skeleton/skeleton.html|norm 13G

以后用 vim 创建以 html 为后缀的任意文件时都会直接套用该模板并将光标直接跳到 <body> (13G) 内。

好用的插件

SuperTab 根据你已输入过的内容,按 Tab 键时实现自动补充

NERD Commenter 强悍的注释插件,支持 N 种格式的注释 ( 真的是 NNN 种啊!)