Vim

简介

我是 Vim 爱好者(但不排斥 Emacs啊), 这里收录一些 Vim 相关的文字。

Vim 作者(Bram Moolenaar)的个人网站

非常不错的学习 Vim 的网站

Vim logo

Vim 是什么?如何下载、安装之类的本身很简单,而且网络上有诸多的介绍,这里不再赘述。 至于为什么使用 Vim?我就不劝你了。

传说 Vim 的学习曲线很陡,确实如此。 不过越是陡峭,只要持续付出,每前进一点,就越是有成倍的提升,这是好事。

pic

Vim learning curves 来源 ^2^

这里是 我的个人 Vim 项目 ,包含有配置文件、部分插件及根据自身习惯改写的资源文件。 项目目录结构基本保持和 vim 安装目录一致,里面有一个 Addons 目录』 , 主要用来放置和 Vim 有关,但不适合放在 Vim 安装目录中的资源或工具文件。

我的大部分设置及插件都可以从 vimrc 中看出端倪,另外也可以参考我的 Blog

可以参考的 vimrc

精准广告投放

希望相互交流学习, 欢迎加入 Vim 的 GTalk 群

另外我发起了一个 Vim 脚本 文档中文计划 ,欢迎有热忱、有兴趣的朋友参与。

教程

选项 (Options)

编码 (Encoding)

字体 (fonts)

Windows gvim 启动时默认激活最大化。

1au GUIEnter * simalt ~x

参考 :h gui-win32-maximized 其他操作系统可以参考 在 kde 中让 gvim 自动最大化在 Gnome 下让 GVIM 自动最大化

设置宽度不明的文字(如 ”①②→ ) 为双宽度文本 参考

1set ambiwidth=double

高亮光标所在行(我选择不改变前景和背景色,只加了一条下划线):

1set cursorline
2hi cursorline guibg=NONE gui=underline

注:高亮当前行在一定程度上会影响 Vim 的性能,降低缓冲区更新速度。

diff 模式下:

  • 同步两侧的光标位置 (Vim 7.3 已默认支持此特性;)

  • 设置 分别跳转到上一个不同、下一个不同处,如果不是 diff 模式, 则分别设置为 QucikFix 的上一条、下一条信息行。

    1if &diff
    2    nmap <F7> [c
    3    nmap <F8> ]c
    4else
    5    map <F7> :cp<cr>
    6    map <F8> :cn<cr>
    7endif

让 Vim 的默认寄存器和系统剪贴板共享,可以在 vimrc 中加入:

1set clipboard+=unnamed

由于 Vim 寄存器比系统剪贴板强大太多,为了避免共享时相互干扰,我自己没有这样做。

另外,我不推荐,但是如果你希望 Vim 启动时自动进入插入模式,可以在 vimrc 中加入:

1exe "startinsert"

粘贴

1:set paste # 避免粘贴时重新格式化操作。

映射 (Mapping)

普通模式,可视模式和选择模式下使用 <Tab><Shift-Tab> 键来缩进文本。 在可视模式和选择模式下,可以自动恢复选中的文本。

1" Normal Mode, Visual Mode, and Select Mode,
2" use <Tab> and <Shift-Tab> to indent
3" @see http://c9s.blogspot.com/2007/10/vim-tips.html
4nmap <tab> v>
5nmap <s-tab> v<
6vmap <tab> >gv
7vmap <s-tab> <gv

注意:normal 模式下 键默认用于跳转到跳转列表较新的位置,我已经取消了这个设置, 毕竟 normal 模式下基本是使用 >>

选中一段文字并全文搜索这段文字

1vnoremap  *  y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
2vnoremap  #  y?<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>

自动补全成对的括号、引号

普通模式下使用空格键可以参考 gist:549200, 这个脚本可以让你在 normal 模式下输入 ![pic](count)<Space>

插入模式下使用 Meta 键(Windows 下是 Alt 键)+ 自定义快捷键来移动光标。 注意:灵格斯 (Lingoes Translator) 的热键可能会有冲突,禁用或这更换灵格斯的热键即可。

1noremap! <M-j> <Down>
2noremap! <M-k> <Up>
3noremap! <M-h> <left>
4noremap! <M-l> <Right>

使用 Windows Explorer 打开当前文件所在文件夹,并选中目标文件,可以参考 gist#482563,这个脚本同时支持文件和 NERD_tree。

快速启动命令行 (cmd),并将默认目录设置为当前文件所在目录,可以参考 gist#482560,这个脚本同样支持文件和 NERD_tree。

切换 Quickfix 窗口的打开和关闭状态。

1nmap <F4> :cw<CR>

默认隐藏菜单栏和工具栏,可以通过 切换显示和隐藏。

1" Toggle Menu and Toolbar
2" @see http://liyanrui.is-programmer.com/articles/1791/gvim-menu-and-toolbar-toggle.html
3set guioptions-=m
4set guioptions-=T
5map <silent> <F2> :if &guioptions =~# 'T' <Bar>
6        \set guioptions-=T <Bar>
7        \set guioptions-=m <bar>
8    \else <Bar>
9        \set guioptions+=T <Bar>
10        \set guioptions+=m <Bar>
11    \endif<CR>

在保存文件时自动去除无效空白,包括行尾空白和文件最后的空行。

1" Remove trailing whitespace when writing a buffer, but not for diff files.
2" From: Vigil
3" @see http://blog.bs2.to/post/EdwardLee/17961
4function RemoveTrailingWhitespace()
5    if &ft != "diff"
6        let b:curcol = col(".")
7        let b:curline = line(".")
8        silent! %s/\s\+$//
9        silent! %s/\(\s*\n\)\+\%$//
10        call cursor(b:curline, b:curcol)
11    endif
12endfunction
13autocmd BufWritePre * call RemoveTrailingWhitespace()

外观 (Theme,Color Scheme)

Syntax

Indent & Formats

插件 (Plugins)

http://ark.asengard.net/blog/wp-content/uploads/2009/10/success_vim.jpg 来源

技巧 (Tips)

打开、保存文件时,显示文件选择对话框,更多可以 :h browse

1:browse w<cr>
2:bro e<cr>

其他技巧 (Tips)

Cheat Sheet

集合

Vim 脚本开发

延伸阅读

原生 Vim

Vim Like

Vim Games

书籍 (Books)

社区

幽默 & 文化

Holy-War.png

来源

可以印 Tee 的大图 2

pic 来源

pic 來源

来源 ^2^

大图 来源

来源

user friendly

http://en.tiraecol.net/modules/comic/cache/images/tiraecol_en-2.png via: Vim vs. Emacs

http://retrazos.pe/img/emacs-vim.jpg 来源

http://imgs.xkcd.com/comics/real_programmers.png via: REAL PROGRAMMERS

请在 Vim 中输入命令: :help! 或使用缩写 :h!

请在 Vim 中输入命令: :h 42 探索生命的意义。

请在 Vim 中输入命令: :h howto 并看文档的最后。

世界上的程序员分三种, 一种使用 Emacs, 一种使用 Vim, 剩余的是其它。
给人一条 Vim 命令, 他能折腾一晚上; 告诉他怎么自定义 Vim 命令, 他能捣腾一辈子。 -- Emacs

《大腕》编辑器版:

.. 周围同事不是用 Vim 就是 Emacs , 你要是用一 UltraEdit,你都不好意思跟人家打招呼… 什么插件呀,语法高亮呀,拼写检查呀,能给它开的都给它开着,就是一个字儿:酷。 你说这么牛 B 一东西,怎么着学会也得小半年吧。 半年!入门都远着呢,能学会移动光标就不错了,你还别说耗不起,就这还只是左右移动
对我来说 Vi 是禅, 使用 Vi 就是使用禅。 每个命令都是心印, 这对用户来说是深奥的, 对未入门者来说是无法了解的。 每次使用它你都能发现真理。 --Satish Reddy
商业化产品可能是有用的, 但最好的东西往往是免费的, 空气,水,Vim。
Q: How to generate a random string? A: Put a fresh student in front of vi and tell him to quit.