原地址:http://tnerual.eriogerg.free.fr/vim.html
翻译:ssword
这里的排版弄的挺难看的,大家如果觉得有用,就将就下吧。
Basic movement
基本移动
| h l k j | 左移、右移一个字符;上一行,下一行; |
| b w | 左移、右移一个词元 |
| ge e | 左移、右移到一个词元末尾 |
| { } | 前、后移动一个段落 |
| ( ) | 前、后移动一个句子 |
| 0 ^ $ | 句子的开头、首字符、最后一个字符 |
| nG ngg | 第n行的句首、句尾 |
| n% | 文件的n%处(n不可省略) |
| n| | 当前行的第n列 |
| % | 匹配下一个括号,中括号,大括号,注释或#define |
| nH nL | 当前窗口从顶数、从底数第n行 |
| M | 当前窗口的中间行 |
Insertion & replace→ insert mode
插入&替换 ->插入模式
| i a | 在光标前、后插入 |
| I A | 在当前行前、后插入 |
| gI | 在当前行的第一列插入 |
| o O | 在当前行的上、下插一新行 |
| rc | 把光标下的字符替换为c |
| grc | 同rc相似,不过不影响布局 |
| R | 替换从光标往后的所有字符 |
| gR | 同R相似,不过不影响布局 |
| cm | 修改到移动命令m指向的位置 |
| cc or S | 修改当前行 |
| C | 修改到行尾 |
| s | 修改一个字符,并进入插入模式 |
| ~ | 转换当前字符的大小写,并右移光标 |
| g~m | 转换字符大小写到移动命令m指向的位置 |
| gum gUm | 将移动命令m中间的字符转换为大写、小写 |
| 按照移动命令m,左移、右移缩进 | |
| n< < n>> | 左移、右移n个缩进 |
Deletion
删除
| x X | 删除当前字符、前一个字符 |
| dm | 删除到移动命令m指向的位置 |
| dd D | 删除当前行 |
| J gJ | 将当前行与下一行合并 |
| :rd↵ | 删除区间内的文本 |
| :rdx↵ | 删除区间内的文本,并将其存入寄存器x |
Insert mode
插入模式
| ^Vc ^Vn | 逐字插入字符c、数值n |
| ^A | 在当前输入的文本前插入 |
| ^@ | 同^A,并退出到命令模式 |
| ^Rx ^R^Rx | 逐字)插入x寄存器的内容 |
| ^N ^P | 在光标前、光标后自动完成 |
| ^W | 删除光标前一个单词 |
| ^U | 删除前面输入的文本 |
| ^D ^T | 左移、右移一个缩进 |
| ^Kc1c2 or c1←c2 | 插入一个digraph |
| ^Oc | 进入临时命令模式执行c |
| ^X^E ^X^Y | 向上、向下滚动 |
| 回到命令模式 |
Copying
复制
| “x | 将下个用于删除、复制、粘贴的寄存器设置为x |
| :reg↵ | 显示所有寄存器的内容 |
| :reg x↵ | 显示x寄存器的内容 |
| ym | 复制移动命令m之间的文本 |
| yy or Y | 复制当前行 |
| p P | 将寄存器中的文本粘贴到光标前、后 |
| ]p [p | 同p P,并自动处理缩进 |
| gp gP | 同p P,并保留光标。 |
Advanced insertion
高级插入
| g?m | 对移动命令m中间的文本进行rot13加密 |
| n^A n^X | 对移动命令m中间的文本进行rot13加密 |
| gqm | 将移动命令m中间的多行文本格式化为同一宽度 |
| :rce w↵ | 将区间r中的内容以w为宽度居中 |
| :rle i↵ | 将区间r中的内容以i个缩进左对齐 |
| :rri w↵ | 将区间r中的内容以w为宽度右对齐 |
| !mc↵ | 以c命令过滤处理移动命令m中间的文本 |
| n!!c↵ | 以c命令过滤处理n行文本 |
| :r!c↵ | 以c命令处理区间r中间的文本 |
Visual mode
可视模式
| v V ^V | 开始、退出选取文本 |
| o | 将光标移动到选取文本的开始 |
| gv | 回到上一个选取的文本 |
| aw as ap | 选取一个单词、句子、段落 |
| ab aB | 选取一个()、{}块 |
Undoing, repeating & registers
撤销,重复和寄存器
| u U | 撤销上一个命令,返回上一个修改的行 |
| . ^R | 重复上一个修改,重复上一个撤销 |
| n. | 重复上一个修改n次 |
| qc qC | 记录、追加输入的字符到寄存器c |
| q | 停止记录 |
| @c | 执行寄存器c的内容 |
| @@ | 重复执行上一个@命令 |
| :@c↵ | 把寄存器c作为Ex命令执行 |
| :rg/p/c↵ | 对区间r中匹配p的文本执行Ex命令c |
Complex movement
高级移动
| - + | 上移,下移到行首 | |
| B W | 按空格左移、右移一个词元 | |
| gE E | 按空格左移、右移到一个词元的末尾 | |
| n | 下移n-1行到行首 | |
| g0 gm | 当前行首、行中央 | |
| g^ g$ | 当前行的首字符、尾字符 | |
| gk gj | 上移、下移 | |
| fc Fc | 下一个、前一个字符c | |
| tc Tc | 下一个、前一个字符c的前面 | |
| ; , | 重复上一个fFtT操作,反方向 | |
| [[ ]] | 上一个、下一个节开头 | |
| [] ][ | 上一个、下一个节结尾 | |
| [( ]) | 上一个、下一个未关闭的括号 | |
| [{ ]} | 上一个、下一个未关闭的大括号 | |
| [m ]m | 上一个、下一个java方法的开头 | |
| [# ]# | 上一个、下一个未关闭的#if #else #endif | |
| [* ]* | 上一个、下一个/* */的开头和结尾 |
Search & substitution
搜索 &替换
| /s↵ ?s↵ | 向前、向后搜索s |
| /s/o↵ ?s?o↵ | 按o个偏移向前、向后搜索s |
| n or /↵ | 向前重复上一个搜索 |
| N or ?↵ | 向后重复上一个搜索 |
| # * | 向前、向后搜索当前词元 |
| g# g* | 同上,额外匹配不完整的词元 |
| gd gD | 当前符号的局部、全局定义 |
| :rs/f/t/x↵ | 将区间r中匹配f的文本替换为t |
| :rs x↵ | 以新的区间和x重复替换 |
Special characters in search patterns
模式匹配中的特殊字符
| . ^ $ | 任一字符,行的首字符,尾字符 |
| \< \> | 单词的开头,结尾 |
| [c1-c2] | 在c1..c2之间的任一字符 |
| [^c1-c2] | 不在c1..c2之间的任一字符 |
| \i \k \I \K | 标志符,关键字;字母,数字 |
| \f \p \F \P | 文件名;可打印字符;字母;数字 |
| \s \S | 空格;非空字符 |
| \e \t \r \b | ←>键 |
| \= * \+ | 匹配0个或一个、0个或多个、一个或多个模式 |
| \| | 两个选择 |
| \( \) | 将一组模式组合成一个 |
| \& \n | 匹配全部、匹配第n个括号中的内容 * |
| \u \l | 匹配下一个大写、小写字母 |
| \c \C | 忽略、匹配下一个模式 |
Offsets in search commands
偏移
| n or +n | 下n行的第1列 |
| -n | 上n行的第1列 |
| e+n e-n | 匹配文本结尾右边、左边的第n个字符 |
| s+n s-n | 匹配文本右边开头右边、左边的第n个字符 |
| ;sc | 向下执行搜索命令sc |
Marks and motions
标记 &跳转
| mc,c∈[a..Z] | 把当前位置标记为c,c∈[a..Z] |
| `c `C | 跳到当前文件、任意文件的c标记 |
| `0..9 | 跳到上一个位置 |
| “ `” | 跳到上一个位置,上一次编辑的位置 |
| `[ `] | 跳到上一个修改段落的开头、结尾 |
| :marks? | 输出可用的标记列表 |
| :jumps? | 输出跳转列表 |
| n^O | 跳到跳转列表的前一个位置 |
| n^I | 跳到跳转列表的后一个位置 |
Key mapping & abbreviations
键映射 &缩写
| :map c e↵ | 在普通模式和可见模式中将c映射为e |
| :map! c e↵ | 在插入模式和命令模式中将c映射为e |
| :unmap c↵ :unmap! c↵ | 移除映射c |
| :mk f↵ | 将当前的映射和设置写入到文件f |
| :ab c e↵ | 把e设置为c的别名 |
| :ab c↵ | 显示c开头的所有别名 |
| :una c↵ | 移除别名c |
Tags
标签
| :ta t↵ | 跳到t匹配的tag |
| :nta↵ | 跳到列表中后面第n个tag |
| ^] ^T | 跳到光标指向的tag,从tag返回 |
| :ts t↵ | 列出匹配的tag供选择跳转 |
| :tj t↵ | 跳到标签t,如果有多个匹配则提示选择 |
| :tags↵ | 显示tag列表 |
| :npo↵ :n^T↵ | 向前返回、跳至第n个tag |
| :tl↵ | 跳到最后一个匹配的tag |
| ^W} :pt t↵ | 当前光标指向的前一个tag、 t匹配的tag |
| ^W] | 分割窗口,显示当前光标指向的tag |
| ^Wz or :pc↵ | 关闭显示tag的窗口 |
Scrolling & multi-windowing
滚动 &多窗口
| ^E ^Y | 向上、向下滚动一行 |
| ^D ^U | 向上、向下滚动半页 |
| ^F ^B | 向上、向下滚动一页 |
| zt or z↵ | 将当前行滚动到窗口顶部 |
| zz or z. | 将当前行滚动到窗口中央 |
| zb or z- | 将当前行滚动到窗口底部 |
| zh zl | 向右、向左滚动一个字符 |
| zH zL | 向右、向左移动半屏 |
| ^Ws or :split↵ | 将窗口分割成两个 |
| ^Wn or :new↵ | 创建一个新窗口 |
| ^Wo or :on↵ | 关掉当前窗口以外的其他窗口 |
| ^Wj ^Wk | 移动到下一个、上一个窗口 |
| ^Ww ^W^W | 移动到下一个、上一个窗口 (wrap)* |
Ex commands
Ex命令
| :e f | 编辑文件f,如果没有更改 |
| :e! f | 强制编辑文件(默认覆盖原先的修改) |
| :wn :wN | 写入文件,并编辑下一个、前一个文件 |
| :n :N | 编辑文件列表中的下一个、前一个文件 |
| :rw | 把区间r写入到当前文件 |
| :rw f | 把区间r写入到文件f |
| :rw>>f | 把如见r追加到文件f |
| :q :q! | 退出并确认,强制退出忽略修改 |
| :wq or :x or ZZ | 写入到当前文件并退出 |
| :r f | 将光标下的内容插入文件f |
| :r! c | 将光标下的内容经命令c处理的结果插入 |
| :args | 显示参数列表 |
| :rc a :rm a | 复制、移动区间r到a行下 |
Ex ranges
Ex区间
| . $ | 文件的当前行,最后一行 |
| % * | 整个文件、可视部分 |
| ‘t | 标记t指向的位置 |
| /p/ ?p? | 匹配的下一个、前一个位置 |
| +n -n | 当前行的前n-1行、后n-1行 |
Folding
折叠
| zfm | 创建折叠到移动命令m指向的位置 |
| :rfo | 为区间r创建折叠 |
| zd zE | 移除当前折叠、当前窗口的所有折叠 |
| zo zc zO zC | 打开、关闭一个折叠;递归地执行 |
| [z ]z | 移动到当前打开折叠的开头、结尾 |
| zj zk | 向下、向上移动到下一个折叠的开头、结尾 |
Miscellaneous
杂
| :sh↵ :!c↵ | 运行shell,执行shell命令c |
| K | 在man中搜索当前关键字 |
| :make↵ | 执行make,读取错误并跳转到首个错误 |
| :cn↵ :cp↵ | 显示下一个、前一个错误 |
| :cl↵ :cf↵ | 显示所有错误、从文件中读取错误 |
| ^L ^G | 重绘屏幕,显示文件名及位置 |
| g^G | 显示光标所在行、列及字符位置 |
| ga | 显示当前字符的ascii值 |
| gf | 打开当前光标下的文件名 |
| :redir>f↵ | 将输出重定向到文件f |
| :mkview ↵ | 保存view配置[到文件f] |
| :loadview ↵ | 装载view配置[从文件f] |
ps:高数59分华丽地挂掉鸟~

至今为止用弱智 VC9 IDE 的飘过……
ps.现在我越来越觉得暑假好好学学高数是很必要的了……
我gvim用的其实挺弱智的
ps:真的很有必要…
话说论坛里 N 皇后那个帖子更新了,您给看看吧……
1、话说这排版还是不错的,至少版式没乱!
右边的侧边栏太宽了些?这比例是6:4?
(原谅我目测能力有限又懒得使用辅助工具去量吧!)
2、ssword同学在哪学校?可否透漏下?或者发我邮箱里?我将为您保密
@kshaoye风云の三少 山东理工小博士幼儿园啊…
@ssword 哦…………
唉,与编程之路渐行渐远。
为什么不用vi_cheat_sheet?
我把它做桌面,不记得了就看看桌面,呵呵。。。。
@kang
呵呵,搞成桌面真是好主意!
当时翻译的时候还不知道vim的:help有多牛逼…囧
竟然还有“高级插入”,本页太有用了,收藏了。谢谢。
@Vayn *^_^*