VI学习笔记

来源:互联网 发布:手机淘宝修改评价链接 编辑:程序博客网 时间:2024/04/27 19:37


 

光标移动命令

l :光标右移一个字符
space
:光标右移一个字符
Backspace
:光标左移一个字符
k
Ctrl+p:光标上移一行
j
Ctrl+n :光标下移一行
Enter
:光标下移一行
w
W :光标右移一个字至字首
b
B :光标左移一个字至字首
e
E :光标右移一个字至字尾
nG
:光标移至第n行首
n+
:光标下移n
n-
:光标上移n
n$
:光标移至第n行尾
H
:光标移至屏幕顶行
M
:光标移至屏幕中间行
L
:光标移至屏幕最后行
0
:(注意是数字零)光标移至当前行首 屏幕翻滚类命令
Ctrl+u
:向文档首翻半屏
Ctrl+d
:向文档尾翻半屏
Ctrl+f
:向文档尾翻一屏
Ctrl+b
:向文档首翻一屏

Ctrl+g:显示行列信息
nz
:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
0
|:回到行首

^:回到行首第一个个字符

$:到行尾最后一个字符。

{:回到段落开始

}:回到段落结尾

(:到句子开头

):到句子结尾

V:高亮当前行,光标移动可以高亮多行

v:高亮光标处到行尾,,光标移动可以高亮多行。选中后按“=”可以自动缩进

Ctrl+v:高亮块(列方向高亮)

g+d:高亮当前字,并可以使用n在高亮字中跳跃

G:移动到文件结尾

 

通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。

编辑命令

i :在光标前插入

I :在当前行首插入

J:两行合并

a:光标后
A
:在当前行尾
o
:在当前行之下新开一行
O
:在当前行之上新开一行

P:将缓存信息粘贴到当前行上一行

p:将缓存信息粘贴到当前行下一行
r
:替换当前字符
R
:替换当前字符及其后的字符,直至按ESC
s
:从当前光标位置处开始,以输入的文本替代指定数目的字符
S
:删除指定数目的行,并以所输入文本代替之

cw:修改当前词(删除并进入编辑模式)
ncw
nCW:修改指定数目的字
dw
:删除当前词,不进入编辑模式

nCC:修改指定数目的行 ndwndW:删除光标处开始及其后的n-1个字
do
:删至行首
d$
:删至行尾
ndd
:删除当前行及其后n-1
x
X:删除一个字符,x删除光标后的,而X删除光标前的

nx:删除当前光标后的n个字符

xp:左右字符互换
Ctrl+u
:删除输入方式下所输入的文本 /pattern:从光标开始处向文档尾搜索pattern
?pattern
:从光标开始处向文档首搜索pattern

/pattern:从光标开始向文档尾部搜索pattern
n
:在同一方向重复上一次搜索命令

N
:在反方向上重复上一次搜索命令

U:恢复全部操作

u:恢复每次操作

yyY:复制当前行

 

.:(注意此命令为点)重复执行上一个命令

命令行输入

q

!

s/p1/p2/g:将当前行中任何p1均用p2替代
n1,n2s/p1/p2/g:将第n1n2行中任何p1均用p2替代

%s/p1/p2/g:将全文范围内将p1替换为p2
g/p1/s//p2/g:将文档中任何p1均用p2替换 all:列出任何选项配置情况

n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
n1,n2 d :将n1行到n2行之间的内容删除
w :保存当前文档
e filename:打开文档filename进行编辑
x:保存当前文档并退出

zz:保存当前文档并退出

!command:执行shell命令command
n1,n2 w!command:将文档中n1行至n2行的内容作为command的输入并执行之,若不指定n1n2,则表示将整个文档内容作为command的输入

r!command:将命令command的输出结果放到当前行

"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl
:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p
:取出寄存器?中的内容并将其放到光标位置处。这里?能够是个字母,也能够是个数字

tabe:新建一个标签页

tabn tabp:切换到下(或上)一个标签页

close:关闭当前标签页

qa:退出说有标签页

make:直接编译工程,如果有问题按回车会定位问题位置                 

set

         all:显示全部信息

term:配置终端类型
ignorance
:在搜索中忽略大小写
list
:显示制表位(Ctrl+I)和行尾标志($)
number
:显示行号

report
:显示由面向行的命令修改过的数目
terse
:显示简短的警告信息
warn
:在转到别的文档时若没保存当前文档则显示NO write信息
nomagic
:允许在搜索模式中,使用前面不带“/”的特别字符
nowrapscan
:禁止vi在搜索到达文档两端时,又从另一端开始
mesg
:允许vi显示其他用户用write写到自己终端上的信息 n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下

VI命令参数

vi filename :打开或新建文档,并将光标置于第一行首
vi +n filename
:打开文档,并将光标置于第n行首
vi + filename
:打开文档,并将光标置于最后一行首
vi +/pattern filename
:打开文档,并将光标置于第一个和pattern匹配的串处
vi -r filename
:在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename
:打开多个文档,依次进行编辑 h :光标左移一个字符

 

 

Vi多窗口编辑

vim可以在多分割窗口(multi-split-screen )环境下编辑多个文件。想了解有关详情可输入:help usr_08.txt

  要分割屏幕显示多个不同文件,在vi命令提示符后输入:
  :split another-file 上下分割窗口
  :vsplit another-file 左右分割窗口

         :res n 将当前窗口设置为n行。

         :only 只保留当前窗口

         :new 打开新窗口

         切换窗口 Ctrl + w 按一次加上下键可以自己选择切换方向,按两次则从上到下自动遍历窗口

         扩大窗口 Ctrl-w + 扩大窗口

         缩小窗口 Ctrl-w - 缩小当前编辑窗口

 

保存部分内容

可以保存当前编辑的文件的部分内容,方法是按 Escape,然后输入 :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w 表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。对于最后一行,可以使用 $ 表示文件的末尾。可以在 w 后面使用两个大于号(>>)表示希望把内容附加到文件中而不是覆盖文件。清单 12 中的示例把第 6 到第 9 行(含)附加到文件 /tmp/newfile 中。

 

Vi标签使用

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|

 

 


原创粉丝点击