vi笔记

来源:互联网 发布:2017零售业数据分析 编辑:程序博客网 时间:2024/03/28 19:52

刚进入vi时,处于指令模式,输入字符i,此时处于输入模式,输入完成后,按esc后指令模式。

 

进入vi

vi filename:打开或新建文件,并将光标置于第一行首

vi +n filename:打开文件,并将光标置于第n行首

vi + filename:打开文件,并将光标置于最后一行首

vi +/patternfilename:打开文件,并将光标置于第一个与pattern匹配的串处

vi -r filename:在上次正用vi编辑时发生系统崩溃,恢复filename

vifilename....filename:打开多个文件,依次编辑

 

离开vi

      若在输入模式下,先利用esc进入指令模式,而后选用以下指令离开vi

       :q!  退出但不保存

       :wq  保存并退出

       :ZZ   保存并退出

       :x  保存并退出

       :w  保存

       :q  退出

 

输入模式

      如何进入输入模式

              a  在光标之后插入

              A   在光标所在行末插入

              i    在光标前插入

              I    在光标所在行首插入

              o    新增一行,在该行下供输入资料用

              O    新增一行,在该行上供输入资料用

      如何离开输入模式

           按ESC

 

指令模式

      光标的移动

           h:光标左移一个字符

j或Ctrl+n:光标下移一行      nj:表示下移n行

k或Ctrl+p:光标上移一行      nk :表示上移n行

l:光标右移一个字符

0:(注意是数字零)光标移至当前行首

$:光标移至当前行尾

 

^:移至该行第一个字元处

H:光标移至屏幕顶行

M:光标移至屏幕中间行

L:光标移至屏幕最后行

G:移至该文件的最后一行

+:移至下一列的第一个字元处

-:移至上一列的第一个字元处

):光标移至句尾

(:光标移至句首

}:光标移至段落开尾

{:光标移至段落结头

 

space:光标右移一个字符

Backspace:光标左移一个字符

Enter:光标下移一行

w或W:光标右移一个字至字首

b或B:光标左移一个字至字首

e或E:光标右移一个字至字尾

 

n$:光标下移n-1行,并置到尾

nG:光标移至第n行首

n+:光标下移n行

n-:光标上移n行

ctrl+g:会显示该文件名称,该行的行号,文件中最末行的行号,光标所在行占总行号的百分比

 

fx :往右移动到 x 字符上

Fx :往左移动到 x 字符上

tx :往右移动到最近的x 字符前

Tx :往左移动到最近的 x 字符后

(注意:以上四个命令中,其中x是键入的字符)

分号,配合 f 和 t 使用,重复一次

逗号,配合 f 和 t 使用,反方向重复一次

 

      视窗的移动(屏幕翻滚)

           Ctrl+u:向文件首翻半屏

Ctrl+d:向文件尾翻半屏

 

Ctrl+b;向文件首翻一屏

Ctrl+f:向文件尾翻一屏

 

Ctrl+y;向文件首翻一行

Ctrl+e:向文件尾翻一行

nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部

 

 

插入文本类命令

i:在光标前

I:在当前行首

a:光标后

A:在当前行尾

o:在当前行之下新开一行

O:在当前行之上新开一行

r:替换当前字符

R:替换当前字符及其后的字符,直至按ESC键

s:从当前光标位置处开始,以输入的文本替代指定数目的字符

S:删除指定数目的行,并以所输入文本代替之

ncw或nCW:修改指定数目的字

nCC:修改指定数目的行

 

删除命令

ndw或ndW:删除光标处开始及其后的n-1个字

do:删至行首

d$:删至行尾

ndd:删除当前行及其后n-1行

x或X:删除一个字符,x删除光标后的,而X删除光标前的

Ctrl+u:删除输入方式下所输入的文本

 

搜索命令:

/pattern:从光标开始处向文件尾搜索pattern

?pattern:从光标开始处向文件首搜索pattern

n:在同一方向重复上一次搜索命令

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

 

替换命令

s 将当前字符替换为一个或多个字符

S 将当前行替换为一个或多个字符

5 s 将从当前字符开始的5个字符替换为一个或多个字符

:s/p1/p2/g:将当前行中所有p1均用p2替代

:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g:将文件中所有p1均用p2替换

:g/s1/s/s2/s3/g   第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

:%s/old_word/new_word/g   这个指令是于在整个文件中替换特定字符串

 

选项设置

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行下

:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下

:n1,n2 d:将n1行到n2行之间的内容删除

:w:保存当前文件

:e filename:打开文件filename进行编辑

:x:保存当前文件并退出

:wq:保存当前文件并退出

:q:退出vi

:q!:不保存文件并退出vi

:!command:执行shell命令command

:n1,n2w!command:将文件中n1行至n2行的内容作为command的输入并执行之,

  若不指定n1,n2,则表示将整个文件内容作为command的输入

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

 

 

删除命令操作

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

 

 

1.交换两个字符位置

xp

 

2.上下两行调换

ddp

 

3.把文件内容反转

:g/^/m0/ (未通过)

 

4.上下两行合并

J

 

5.删除所有行

dG

 

6.从当前位置删除到行尾

d$

 

7.从当前位置复制到行尾

y$ 如果要粘贴到其他地方 p 就可以了

由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态

 

8.写简写,跳出全称

:ab string strings

例如 ":ab usa United Statesof America",

当你在文见里插入 usa 时

United States of America 就蹦出来了

 

9.

:map keys new_seq

定义你当前 键盘命令

 

10.显示行号

:set [all]

vi or ex 的编辑状态

如 显示每行 :set nu

 

11.

在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的下面。

 

12.

单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

 

 

17. vi 环境选项 Solaris ksh

noautoindent nomodelines noshowmode

autoprint nonumber noslowopen

noautowrite nonovice tabstop=8

nobeautify nooptimize taglength=0

directory=/var/tmp paragraphs=IPLPPPQPPLIpplpipnpbtags=tags /usr/lib/tags

noedcompatible prompt tagstack

noerrorbells noreadonly term=vt100

noexrc redraw noterse

flash remap timeout

hardtabs=8 report=5 ttytype=vt100

noignorecase scroll=11 warn

nolisp sections=NHSHH HUuhsh+c window=23

nolist shell=/bin/ksh wrapscan

magic shiftwidth=8 wrapmargin=0

mesg noshowmatch nowriteany

 

For C-Shell:

setenv EXINIT "set nu"

For Bourne or Korn Shell:

EXINIT="set nu"; export EXINIT

For Korn Shell Only (alternate method):

typeset -x EXINIT="set nu"

在 .profile 里设置 vi 的环境选项 , 以上均测试过

 

18.标记文本

  mchar   用字母char标记当前光标的位置

  `char   移至char所标记处

  'char   移至char标记所在行的开头处

  "     移至当前行上一次所在位置(在光标移动之后)――一个双引号

  ''    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号

 

19. 如何在两个文件之间快速切换(注意:必须是一个窗口打开的文件)

方法一:同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi                  的文件之间切换。

              但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多                 文件vi状态时,屏幕底部仍然显示目前vi的是刚才的文件。

              (在HP-UX,Solaris,AIX上通过)

方法二:也可以使用:

              :e#

              进行切换

方法三:还可以用

              :n    ---à在这里n代表next

              进行切换

 

 

20.

sco 下VI 要在文本前同样的字符加用

%s/^/要加的内容/g 要在文本后同样的字符加

%s/$/要加的内容/g

 

 

原创粉丝点击