1. http://linux.vbird.org/
鸟哥这里有vi的东西很全
2.vim多标签处理 《转》
1、打 开 新 标 签 页
启动 Vim 时用 "vim -p filename ..."
:tabe[dit] *:tabe
*
*:tabedit
*
*:tabnew
*
:tabnew 在当前标签页之后打开带空窗口的新标签页。
:tabe[dit] [++opt] [+cmd] {file}
:tabnew [++opt] [+cmd] {file}
打开新标签页并编辑 {file}
,其余和 |:edit
| 类同。
:tabf[ind] [++opt] [+cmd] {file}
*:tabf
*
*:tabfind
*
打开新标签页并编辑 'path' 里的 {file}
,其余和 |:find
| 类同。
{仅当编译时加入 |+file_in_path
| 特性才有效}
:[count]
tab {cmd}
*:tab
*
执行 {cmd}
,如果它打开新窗口,使用新标签页代替。不能用于
|:diffsplit
|、|:diffpatch
|、|:execute
| 和 |:normal
|。
如果省略 [count]
,标签页出现在当前标签页之后。如果指定
[count]
,新标签页出现在第 [count]
个标签页之后。":0tab cmd" 使
新标签页出现在第一个位置。例如:
:tab split " 在新标签页上打开当前缓冲区
:tab help gt " 打开标签页显示 "gt" 的帮助
2、
关 闭 标 签 页
*:tabc
*
*:tabclose
*
:tabc[lose][!] 关闭当前标签页。
如下情形使该命令失败:
- 屏幕上只有一个标签页。 *E784
*
- 如果 'hidden' 没有置位,没有 [!],缓冲区有修改,而且该缓冲区
没有其它窗口。
缓冲区的修改不会被写入,也不会丢失。所以这可以说是个 "安全的"
命令。
:tabc[lose][!] {count}
关闭第 {count}
个标签页。失败条件和上面的 ':tabclose' 相同。
*:tabo
*
*:tabonly
*
:tabo[nly][!] 关闭所有其它的标签页。
如果置位 'hidden' 选项,所有关闭窗口的缓冲区成为隐藏。
如果没有置位 'hidden' 但置位 'autowrite' 选项,写回修改过的缓
冲区。否则,包含修改过的缓冲区的窗口不会被删除。但如果给出
[!],这些窗口成为隐藏。修改过的缓冲区永远不会被放弃,所以永远
不被丢失这些改动。
3、切 换 到 另 一 个 标 签 页
:tabn[ext] *:tabn
*
*:tabnext
*
*gt
*
<C-PageDown>
*CTRL-<PageDown>
*
*<C-PageDown>
*
gt *i_CTRL-<PageDown>
*
*i_<C-PageDown>
*
转到下一个标签页。最后一个标签页则回绕到第一个。
:tabn[ext] {count}
{count}
<C-PageDown>
{count}
gt 转到第 {count}
个标签页。首个标签页编号为 1。
:tabp[revious] *:tabp
*
*:tabprevious
*
*gT
*
*:tabN
*
:tabN[ext] *:tabNext
*
*CTRL-<PageUp>
*
<C-PageUp>
*<C-PageUp>
*
*i_CTRL-<PageUp>
*
*i_<C-PageUp>
*
gT 转到前一个标签页。首个标签页则回绕到最后一个。
:tabp[revious] {count}
:tabN[ext] {count}
{count}
<C-PageUp>
{count}
gT 转到前面 {count}
个标签页。首个标签页则回绕到最后一个。
:tabr[ewind] *:tabfir
*
*:tabfirst
*
*:tabr
*
*:tabrewind
*
:tabfir[st] 转到第一个标签页。
*:tabl
*
*:tablast
*
:tabl[ast] 转到最后一个标签页。
4、其它命令:
*:tabs
*
:tabs 列出标签页和它们包含的窗口。
当前窗口显示 ">"。
修改过的缓冲区显示 "+"。
5、重 新 排 列 标 签 页:
:tabm[ove] [N] *:tabm
*
*:tabmove
*
把当前标签页移到第 N 个标签页之后。用 0 使当前标签页成为首个标
签页。如果没有 N,当前标签页成为最后一个。
6、循 环 遍 历 所 有 标 签 页:
*:tabd
*
*:tabdo
*
:tabd[o] {cmd}
对每个标签页执行 {cmd}
。
大致相当于:
:tabfirst
:{cmd}
:tabnext
:{cmd}
等等
只对每个标签页的当前窗口进行操作。如果某个标签页出现错误,不再
继续访问其余的标签页。
最后一个标签页 (或任何出错的标签页) 成为当前标签页。
{cmd}
可以包含 '|' 以连接多个命令。
{cmd}
不能打开标签页、关闭标签页或重排标签页。
{Vi 无此功能}
{仅当编译时加入 |+listcmds
| 特性才有效}
另见 |:windo
|、|:argdo
| 和 |:bufdo
|。
VIM 全局替换:
语法为 :[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g
[addr] 表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
s : 表示替换操作
[option] : 表示操作类型
如:g 表示全局替换;
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
下面是一些例子:
#将That or this 换成 This or that
:%s/\(That\) or \(this\)/\u\2 or \l\1/
—-
#将句尾的child换成children
:%s/child\([ ,.;!:?]\)/children\1/g
—-
#将mgi/r/abox换成mgi/r/asquare
:g/mg\([ira]\)box/s//mg//my\1square/g <=> :g/mg[ira]box/s/box/square/g
—-
#将多个空格换成一个空格
:%s/ */ /g
—-
#使用空格替换句号或者冒号后面的一个或者多个空格
:%s/\([:.]\) */\1 /g
—-
#删除所有空行
:g/^$/d
—-
#删除所有的空白行和空行
:g/^[ ][ ]*$/d
—-
#在每行的开始插入两个空白
:%s/^/> /
—-
#在接下来的6行末尾加入.
:.,5/$/./
—-
#颠倒文件的行序
:g/.*/m0O <=> :g/^/m0O
—-
#寻找不是数字的开始行,并将其移到文件尾部
:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
—-
#将文件的第12到17行内容复制10词放到当前文件的尾部
:1,10g/^/12,17t$
~~~~重复次数的作用
—-
#将chapter开始行下面的第二行的内容写道begin文件中
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$