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] 表示检索范围,省略时表示当前行。如:“1,20” :表示从第1行到20行;“%” :表示整个文件,同“1,$”;“. ,$” :从当前行到文件尾;s : 表示替换操作[option] : 表示操作类型如:g 表示全局替换;c 表示进行确认p 表示替代结果逐行显示(Ctrl + L恢复屏幕);省略option时仅对每行第一个匹配串进行替换;如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
:%s/\(That\)or\(this\)/\u\2or\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$