[\u4e00-\u9fa5] 中文
guu 行小写
gUU 行大写
g~~ 行翻转(当然指大小写啦)
gUw 字小写(狭义字)
g~w 字翻转(狭义字)
vE~ 字翻转(广义字)
q/ 搜索命令历史的窗口
q: 命令行命令历史的窗口
/joe/e 光标停留在匹配单词最后一个字母处
/joe/e+1 光标停留在匹配单词最后一个字母的下一个字母处
/joe/s 光标停留在匹配单词第一个字母处
/^joe.*fred.*bill/ 标准正则表达式
/^[A-J]\+/ 找一个以A~J中一个字母重复两次或以上开头的行
/forum\(\_.\)*pent 多行匹配
/fred\_s*joe/i 中间可以有任何空白,包括换行符\n
/fred\|joe 匹配FRED或JOE
/\<fred\>/i 匹配fred,fred必须是一个独立的单词,而不是子串
/\<\d\d\d\d\> 匹配4个数字
\<\d\{4}\> 也是匹配4个数字
/<!--\_p\{-}--> 匹配多行注释

替换

:%s/\r//g 删除DOS方式的回车^M
:%s= *$== 删除行尾空白
:\'a,\'bg/fred/s/dick/joe/igc 非常有用!(ft,又来了!)
:%s= [^ ]\+$=&&= 复制最后一列
:%s= \f\+$=&&= 一样的功能
:%s= \S\+$=&& 还是一样 # 反向引用,或称记忆
:s/\(.*\):\(.*\)/\2 : \1/ 颠倒用:分割的两个字段
:%s/^\(.*\)\n\1/\1$/ 删除重复行 # 非贪婪匹配,{-}
:%s/<!--\_.\{-}-->// 又是删除多行注释(咦?为什么要说“又”呢?)
:s/__date__/\=strftime(\"%c\")/ 插入时间串# 处理列,替换所有在第三列中的str1
:g/\<fred\>/ 显示所有能够为单词fred所匹配的行
:g/<pattern>/z#.5 显示内容,还有行号,呵呵
:g/<pattern>/z#.5|echo \"===\" 漂亮的显示,ft!# 全局命令 (其他)
:g/^\s*$/d 删除所有空行
:g!/^dd/d 删除不含字串'dd'的行
:v/^dd/d 同上 # 译释:v == g!,就是不匹配!
:g/fred/,/joe/d: not line based (very powerfull)
:v/./.,/./-1join 压缩空行
:g/^$/,/./-j 压缩空行
:g/<input\|<form/p 或者 要用|
:g/^/pu _ 把文中空行扩增一倍 (pu = put) 即:原来两行间有一个空行,现在变成2个
:g/^/m0 按行翻转文章 (m = move)
:g/fred/t$ 拷贝行,从fred到文件末尾(EOF)
:%norm jdd 隔行删除
:\'a,\'bg/fred/s/joe/susan/gic 可以使用反向引用来匹配

GVIM 不同的地方

gvim -d file1 file2: v imdiff (比较不同)
dp 把 光标处的不同放到另一个文件
do 在 光标处从另一个文件取得不同

i<c-r>: 把 最后一个命令贴到当前位置
i<c-r>/ 把 最后一个搜索指令贴到当前位置

译释:i是进入insert模式,Ctrl-r是开启插入模式下register的引用 :和/分别引用了两个register的内容

c-f (即 ctrl 键与 f 键一同按下) 本命令即 page down.
c-b (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up
dw 表示删除从当前光标到光标所在单词结尾的内容.
y0 表示拷贝从当前光标到光标所在行首的内容.
d0 表示删除从当前光标到光标所在行首的内容.
y$ 表示拷贝从当前光标到光标所在行尾的内容.
d$ 表示删除从当前光标到光标所在行尾的内容.
yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
yy 表示拷贝光标所在行.
dd 表示删除光标所在行.
D 表示删除从当前光标到光标所在行尾的内容.
5fx 表示查找光标后第 5 个 x 字符.
5w(e) 移动光标到下五个单词.
5yy 表示拷贝光标以下 5 行.
5dd 表示删除光标以下 5 行.
y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容.
:12,24y 表示拷贝第12行到第24行之间的内容.
:12,y 表示拷贝第12行到光标所在行之间的内容.
:,24y 表示拷贝光标所在行到第24行之间的内容.
<< 输入此命令则光标所在行向左移动一个 tab.
>> 输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:12,24> 此命令将12行到14行的数据都向右移动一个 tab.
:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
:%s/^/\=line(".")/ 在每行行首添加行号
:g/^/ s//=line(‘.’).’ ‘/
###删除命令操作
d l 删除当前字符(与x命令功能相同)
d 0 删除到某一行的开始位置
d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
d w 删除到某个单词的结尾位置
d 3 w 删除到第三个单词的结尾位置
d b 删除到某个单词的开始位置
d W 删除到某个以空格作为分隔符的单词的结尾位置
d B 删除到某个以空格作为分隔符的单词的开始位置
d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
d ) 删除到某个语句的结尾位置
d 4 ) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d } 删除到某个段落的结尾位置
d { 删除到某个段落的开始位置
d 7 { 删除到当前段落起始位置之前的第7个段落位置
d d 删除当前行
d /t e x t 删除当前到文本中出现" t e x t"中所指定字样的位置
d fc 删除从文本中出现字符"c"的位置
d tc 删除当前行直到下一个字符" c"所出现位置之间的内容
D 删除到某一行的结尾
d $ 删除到某一行的结尾
5 d d 删除从当前行所开始的5行内容
d L 删除直到屏幕上最后一行的内容
d H 删除直到屏幕上第一行的内容
d G 删除直到工作缓存区结尾的内容
d 1 G 删除直到工作缓存区开始的内容
c l 更改当前字符
c w 修改到某个单词的结尾位置
c 3 w 修改到第三个单词的结尾位置
c b 修改到某个单词的开始位置
c W 修改到某个以空格作为分隔符的单词的结尾位置
c B 修改到某个以空格作为分隔符的单词的开始位置
c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
c 0 修改到某行的结尾位置
c ) 修改到某个语句的结尾位置
c 4 ) 修改到第四个语句的结尾位置
c( 修改到某个语句的开始位置
c } 修改到某个段落的结尾位置
c { 修改到某个段落的开始位置
c 7 { 修改到当前段落起始位置之前的第7个段落位置
c tc 修改当前行直到下一个字符c所出现位置之间的内容
C 修改到某一行的结尾
c c 修改当前行
5 c c 修改从当前行所开始的5行内容