介绍右上角的*号是用来标注我自己认为重要命令的!
Vi简介
- vi是“visual interface”的简称。开发者为Bill Joy。https://en.wikipedia.org/wiki/Bill_Joy
- vim(vi improve)由传统的vi发展而来。
- vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序
- vi可以执行输出、删除、查找、替换、块操作等众多文本操作 。
- vi不是一个排版程序,它可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。
- vi是全屏幕文本编辑器,它没有菜单,只有命令。Vi的功能十分强大,但是命令繁多,不容易掌握
为何要学习使用Vi编辑器?
- 所有的UNIX/Linux系统都内置vi,其他文本编辑器则未必
- 用telnet和SSH远程管理Linux时,只能用vi
- 服务器工作在运行级3(纯字符界面)时,只能用vi
- Linux系统出现故障,无法使用图形界面时,只能用vi
- 很多软件的编辑接口最终会调用vi(如后面的crontab、visudo等)
- 当需要修改某些只读的系统文件(同时不改变该文件读写属性)时,需要使用vi
- Vim有程序编辑能力,可以识别语法。是一个“程序开发工具”而不仅仅只是文字处理软件
- 必要时采用vi
设置vi
在某些系统中,vi和vim可能不是一个程序,例如FC12!那么怎么设置vi就是调用vim呢?
我们可以运行这样的命令:
像在我的虚拟机上运行时
[hswbugyj@localhost temp]$ which vim
/usr/bin/vim
[hswbugyj@localhost temp]$ which vi
alias vi='vim'
/usr/bin/vim
结果表明在我的centos7上的vi和vim是运行同一个程序!
[root@jiangjian ~]# which vi
/bin/vi
[root@jiangjian ~]# which vim
/usr/bin/vim
这个的结果表明的就是连个命令运行的就不是一个程序了!
可以编辑用户主目录下的一个隐藏文件.ashrc
进行设置,
vi /home/hswbugyj/.bashrc
在文件末尾加上:
alias vi='vim'
就是上面运行which vi
显示的那样,修改后保存退出,source .bashrc
刷新这个配置文件!然后再运行which vi就和我的一样了!
或者可以直接通过alias vi='vim'命令设置!
vi的使用步骤
- $ vi test.c 进入命令模式 (默认模式,移动光标只能在该模式)
- 按“ i” 键,进入插入模式,此时方可输入文本。
- 输入结束后,按ESC键回到命令模式。
- 随后有几种选择:
- :q! 放弃编辑的内容并退出vi,强行退出。*
- :wq 保存对文件的修改并退出vi,即“存盘退出”,可用‘:x’替代*
- :w! 强行将修改存盘(哪怕是只读文件),在系统管理中有用,有些系统配置文件是只读的,如要修改只有如此。*
- :w 保存对文件的修改但不离开vi,类似“保存”。:w filename表示“另存为filename”*
- :q 离开vi,如文件被修改,则系统提示拒绝退出。*
注意:如果启动vi时没有指定文件名,在保存时必须在“:x”后空一格然后指定文件名,即“:x test.c”
由命令状态进入插入状态可按以下几个键:
- a:在光标之后加入文字
- i: 在光标之前加入文字
- o: 在光标所在行的下一行增加一空行,并将光标置于该行的 行首,等待输入文本。*
- O: 在光标上一行增加空行。*
在命令状态(又叫编辑状态)下的快捷键使用:
- x 删除光标所在的字符
- X 删除光标所在之前一字符
- dd 删除光标所在行*
- cc dd+插入*
- yy 复制光标所在行*
在命令状态(又叫编辑状态)下的快捷键使用:
- r 用跟在该指令后面的字符取代光标所在字符。(比如ra,则用a取代光标所在字符。)*
- R 进入取代状态,直到按下ESC键为止。
- D 以行为单位,删除光标后所有字符*
- 3D表示删除光标所在行从光标后所有字符,还有光标所在行后两整行。
- :n1,n2d :将n1行到n2行之间的内容删除
- d3l:删除右边3个字符;
可视化“块”选择:
先把光标移到所需选取文本的最前面,在编辑模式下输入v,表示”可视模式”,再移到需选取模块的最后面,被选取文本呈反色显示,用y、d、n再进行处理。
V:行选择
Ctrl+v: 矩形块选择
在命令状态(又叫编辑状态)下的快捷键使用(移动):
- h,j,k,l :左/下/上/右 (或用方向键); *
- 0:行首;$:行尾;(Home/End键也可)
- H,M,L:移至屏幕左上角、屏幕中间行、屏幕最底行。*
- {,}:段首,段尾。
- (,):句首,句尾。
- G:移到文件最后一行
- nG/1G/gg:移到第n行(配合:set nu)/第1行/第1行
d、y这一类指令在vi中有如下指令格式:
- 操作指令+操作范围=命令
- 操作指令就是d、y
- 操作范围:
e: 由光标所在位置至该字符串的最后一个字符。
w: 由光标所在位置至下一个字符串的第一个字符。
b: 由光标所在位置至前一个字符串的第一个字符。
$: 由光标所在位置至该行的最后一个字符。
0: 由光标所在位置至该行的第一个字符。
如:
- dw : 删除光标所在单词,如光标在单词中间,则从光标所在位置删至词尾并连同空格。
ndw是什么效果? (删除n个单词)
- db:删除光标前一个单词。
- d$:删除从当前字符到行尾所有字符。
- d0:删除从光标到行首的所有字符。
p 粘贴
- 如何复制一行,如何移动一行
yy+p dd+p *
- 在编辑状态,在指令前加入一个数字n,则该指令动作会重复执行n次。如在指令后按‘.’重复执行一次。(继续按‘.’,继续重复)。*
如何复制10行,如何移动10行
10yy+p 10dd+p
光标往下移10行用10j,往上移10行用10k
u 恢复最后一次指令执行前的结果,即“Undo”* *
字符串:在光标之后查找该字符串
- ?字符串:在光标之前查找该字符串 *
- n: 往下继续寻找下一个相同的字符串
- N: 往上继续寻找下一个相同的字符串
查找并替换字符串:
- :s/str1/str2/g 将所有str1替换为str2(g表示global,s表示substitute)
未指定范围则默认为当前
如:
- :1,16s/str1/str2/g 将1到16行的替换。
- : ., .+n/-n:当前行加n行/减n行。
- :1,$s/str1/str2/gc 从第1到最后一行进行替换,替换前询问用户(confirm)
编辑多个文档
- vi file1 file2
当第一个文件编辑完后,利用“ :w” 指令将该文档在缓冲区存档,然后再利用“:n”指令加载另一个文档。(n表示next)
同时编辑两个文件,将其中一个文件的一行复制到另一个文件当中: vi file1 fiel2
yy
:n
p
:n
(有问题,系统显示:这已经是最后一个文档了!,要用:N切换到前一个,用:e filex指定编辑哪一个)
在编辑状态下的set命令:
- :set cindent (设置c语言源程序缩进,nocindent反之。)
- :set cindent shiftwidth=4 默认shiftwidth=8
- :syntax on 语法高亮 (off为关闭)
- :set nohlsearch(去掉查找文本时的高亮显示,hlsearch反之)
- :set number(或:set nu,显示行号;:set nonumber反之)
- :set autoindent (noautoindent)
- :行号:就可以到那一行。
也可以在~/.vimrc中设置,则一直有效
vi的其他操作
- 在命令模式下输入:! ,后面跟命令名,可以暂时脱离vi,执行linux命令
- 在命令模式下输入!!,可以将linux命令结果输入文件
- :r 文件名a,可以将文件a内容读入当前文件
- :n1, n2w 文件名a,可以将当前文件第n1到n2行写入文件a
- :n1, n2w >>文件名a,追加写入
网友评论