曾经很长一段时间都是在用 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 种啊!)