Vi 命令总结


使用vi编辑一个文件:vi filename    /*如果该文件存在,则打开;如果该文件不存在,则创建*/
使用vi创建一个没有文件名字的文件:vi  /*在保存的时候指定文件的名字*/
启动vim时,当以-C选项启动时,vim会尽可能向像vi一样,运行在兼容模式
以只读方式打开文件:vi -R fliename      或者 view filename
根据保存在临时文件中的文件来恢复文件:vi -r filename
保存并退出vi:ZZ(命令模式)
不保存并退出vi:  :q!(命令模式)/*!用来表示忽略某些类型的自动检查*/
当需要在vi中输入控制符的时候,先输入Ctrl+V然后紧跟控制符。
ex命令比vi命令要长,所有的ex命令都以:开头,并且,结束时必须按下<Return>
在按下<Return>之前,发现命令输入错误,可以用两种措施解决:
1.按<ESC>,取消这个命令
2.通过以下键对命令进行纠正
<Backspace>/<Delete>  //删除键入的最后一个字符,但是仍然会显示
^W                    //删除键入的最后一个单词
^X/^U                 //删除整行


光标的移动
H、J、K、L对应左、下、上、右
<left> <Down> <Up> <Right>对应左、下、上、右
0将光标移动到当前行的开头
$将光标移动到当前行的末尾
^将光标移动到当前行的第一个非空格/制表符的字符上
w将光标移动到下一个单词的词首
e将光标移动到下一个单词的词尾
b将光标移动到上一个单词的词首
W同w,忽略标点符号
E同e,忽略标点符号
B同b,忽略标点符号
)向前移动到下一个句子
(向后移动到上一个句子
{向前移动到下一个段落
}向后移动到上一个段落
通常在两个句子之间放两个空格,在两个段落之间放一个空白行。
H将光标移动到屏幕的顶部
M将光标移动到屏幕的中间
L将光标移动到屏幕的顶部
可以在以上这些命令前加上数字表示移动的次数。


在编辑缓冲区中移动
^F向下移动一屏
^B向上移动一屏
^D向下移动半屏
^U向上移动半屏
同样,可以在以上这些命令前加上数字表示移动的次数。


跳转到前一个位置
``返回到前一个位置
G跳转到编辑缓冲区的末尾
ma标记当前行为a   `a跳转到标记行的准确位置         'a跳转到标记行的行头


搜索模式
/目标 光标向前搜索跳转到该目标上,如果需要重复该搜索模式则需要输入/即可
?目标 光标向后搜索跳转到该目标上,如果需要重复该搜索模式则需要输入?即可
如果希望相同方向查找同一模式的,需要按n,如果希望反向搜索,则按N。
使用行号:   :set number 关闭行号:     :set nonumber
Ctrl+G显示文件名字以及光标位于文件的位置
nG或者:n跳转到n行
1G或者gg或者:1跳转到编辑缓冲区的第一行
:$或者G跳转到缓冲区的最后一行


插入文本
i改变到输入模式:在当前光标位置前插入数据
a改变到输入模式:在当前光标位置后插入数据
I改变到输入模式:在当前行开头处插入数据
A改变到输入模式:在当前行末尾处插入数据
o改变到输入模式:在当前行下面插入一行
O改变到输入模式:在当前行上面插入一行


修改文本
不需要进入输入模式,只能修改一个字符:将将光标移动到修改的字符上,键入r+新字符
如果希望替换掉多个字符,那么光标移动到需要替换的字符的开头,键入R(这将会自动切换到输入模式),然后键入新字符。
如果替换的数据与原来的并不相同,将光标移动到需要替换的字符的位置,键入s,此时需要替换的字符将变成一个$,然后,输入新值。
如果想要替换从当前的光标的位置到这一行的末尾的所有字符,可以键入C,这时最后一个字符将被用$标记,然后键入新值。
替换一整行:S或者cc
c+移动光标命令会替换从光标当前位置到由移动命令所指定的位置之间的所有字符,c可以与任意的单字符的光标移动命令组合使用,并且可以在中间加入重复的次数。


替换文本
:s/pattern/replace/      替换当前行
:lines/pattern/replace/  替换指定行
:line,lines/pattern/repalce/ 替换范围的行
:%s/pattern/replace/     替换所有行
在命令的末尾可以使用c(表示confirm)告诉vi替换之前要显示确认,同时,也可以使用g(表示global)替换每行上的所有匹配项。,默认的情况下,是该行上的第一个匹配项。在指定行号的时候,可以使用数字,也可以使用.(表示当前行),$(表示编辑缓冲区的最后一行)指定行号。


删除文本
x   删除当前光标处的字符
X   删除光标左边的字符
D   删除从当前光标到本行末尾的字符
dmove 删除从当前光标到move所给位置的额字符(move表示光标移动命令)
dd  删除当前行
另外还有两个ex命令:
:lined  删除指定行
:line,lined 删除指定范围的行


撤销或重复改变
u    撤销上一条命令对编辑缓冲区的修改(连续按两下会撤销自己回到原来的样子)
U    恢复当前行(只有在光标没有理离开修改的当前行才有效)
.    重复上一命令对编辑缓冲区的修改


恢复删除
在vi中每删除一行或者多行文本时,vi都将删除掉内容保存在编号缓冲区中(注意编号缓冲区只存储删除掉的行,如果是删除几个字符则不会存储在编号缓冲区中),共有9隔个这样的编号缓冲区。这时,就可以将编号缓冲区的内容插入到当前文本中。通过键入“,后面加缓冲区编号,在跟一个p或者P(表示put)命令就可以实现上述功能,其中p表示在当前行的下面插入,P命令表示在当前行的上面插入。
注意在vi中有一个比较特别的命令组合:
"1pu"2pu"3pu
"1pu.u.u
上述两种命令等价,对于第二条命令:.会自动将缓冲区的编号加1.


移动文本
vi中有一个无名缓冲区用来存储上一次删除的文本的备份,且只能存放最近一次删除的文本。可以通过P或者p命令将无名缓冲区中的内容复制到编辑缓冲区中。
p     复制上一次删除的内容,插入倒光标的后面/下面
P     复制上一次删除的内容,插入倒光标的前面/上面
xp    调换两个字符
deep  调换两个单词(此时光标要移动到这个单词的前面的空格处)
ddp   调换两行


复制文本
复制文本都指定位置的基本三个步骤:
1.使用y(表示yank,接出),yy命令将文本将编辑缓冲区复制到无名缓冲区中,但是不删除文本。
2.将光标移动到希望插入文本的位置
3.使用p或者P命令执行插入


可以使用~改变当前字符的大小写,它将自动跳过非字符的字母表,改变一个字符之后,它将自动右移一个位置。


显示选项
显示所有选项的值:   :set all
显示某一选项的值:   :set option?
显示了改变了默 认值的选项:  :set 


在键入的过程中自动换行  :set warpmargin=n(n表示从右边缘算起空格的位置,当n为0的时候关闭换行)
文本缩进: :set autoindent


分隔与连接行
将光标移动到需要换行处,键入r<Return>
将几行连接成一行:将光标移动第一行,然后键入J


复制与移动行
将新行x~y的内容插入倒行z之后
:x[,y]coz             /*co:copy不删除原始行*/
:x[,y]mz              /*m:move删除原始行*/


输入shell命令
:!command   暂停vi,执行shell命令
:!!         暂停vi,执行行前一个shell命令


将文件中的数据插入到编辑缓冲区中的指定行:   :[line]r file
将文件中的数据插入到编辑缓冲区中的当前行:   :r file
将程序的输出插入到编辑缓冲区中的指定行:   :[line]r !porgram
将程序的输出插入到编辑缓冲区中的当前行:   :r !porgram


使用程序处理数据
使用!和!!命令把编辑缓冲区的行发送给另一个程序,该程序的输出将会替换原始的行。
n!!program            在n个行上执行程序program
!move program         从当前行值move行执行程序program


将数据写入原始文件
当用vi打开一个文件时,文件中的内容被复制到编辑缓冲区中,当对文件进行编辑的时候,原始文件保持不变,只是对编辑缓冲区中的内容进行了修改。
可以在不退出vi的情况下,使用如下的命令,不时的将内容写入到原始文件中进行备份:
:w                    将数据写入原始文件
:w file               将数据写入file文件
:w! file              覆盖一个已有的文件
:w>> file             将数据追加到指定的文件中


切换到一个新文件
:e file               切换编辑指定文件
:e!                   重新编辑当前文件,忽略自动检查
:e! file              编辑指定文件,忽略自动检查


使用缩写
创建缩写:   :ab [short long]   /*ab为abbreviate缩写,short时缩写,long是缩写的原文*/
删除缩写:   :una short
查看所有的缩写列表:   :ab


创建宏

:map [x  commands]      x是一个字符,commands是vi或者ex命令序列。


使用vi打开多个文件

vi file1 file2 file3

:n 切换到文件2 (n=next)
:e# 或 :N    切换回到刚才编辑的文件 
比如当前编辑文件为a,:n跳至b,再:n跳至c,:e#回到b,想回到a的话用:ea

打开一个,vi 文件名

然后在vi的命令输入状态下输入 
:sp 另外一个文件的路径及文件名

如此就可以在一个窗口打开多个文件了。
或者用 vi -o file1 file2 file3....用分割屏幕窗口方式同时打开多个文件。
可以使用 ctrl + 两次按 w 或者ctrl + w 然后按上下键在上下窗口间切换。

在这几个打开的文件,拷贝文件可以使用剪贴板:

要拷贝一行到剪贴板中:
"*yy或者"+yy

要粘贴回来:
"*p或者"+p


            
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值