linux vi /vim 用法

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\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$

相关推荐