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 -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行内容