文章目录
- vi与vim
- vi的使用
- 范例
- 按键说明
- 一般指令模式可用的按钮说明:光标移动、复制贴上、搜寻取代等
- 一般指令模式切换到编辑模式的可用的按钮说明
- 一般指令模式切换到命令行界面的可用按钮说明
- vim的暂存盘、救援回复与打开时的警告讯息
vi与vim
一、Linux上面的指令都默认使用vi
作为数据编辑的接口,所以一定要学会vi
二、vim是vi的进阶版本,vim可以用颜色或底线等方式来显示一些特殊的信息,vi是老式的文书处理器,vim是个“程序编辑器”
vi的使用
一、vi分为三种模式:一般指令模式、编辑模式、命令行命令模式
- 一般指令模式 (command mode):以vi打开一个文件就直接进入一般指令模式了(这是默认模式,也简称为一般模式)。在这个模式中, 你可以使用“上下左右”按键来移动光标,你可以使用“删除字符”或“删除整列”来处理文件内容, 也可以使用“复制、贴上”来处理你的文件数据。
- 编辑模式 (insert mode):在一般指令模式中无法编辑文件内容,按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式。通常在Linux中,按下这些按键时,在画面的左下方会出现“INSERT或REPLACE”字样,此时才可以进行编辑。而如果要回到一般指令模式时, 则必须要按下“Esc”这个按键即可退出编辑模式。
- 命令行命令模式(command-line mode):在一般模式当中,输入“: / ?”三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中, 可以执行“搜寻数据”的动作,而读取、存盘、大量取代字符、离开vi、显示行号等等的动作则是在此模式中达成的!
范例
使用vi
来创建一个名为welcome.txt
的文件:
- 使用
vi filename
进入一般指令模式:
[dmtsai@study ~]$ /bin/vi welcome.txt
# 在CentOS7中,由于一般帐号默认vi已经被vim取代了,因此要输入绝对路径来执行才行!
整个画面主要分为两部份,上半部与最底下一行两者可以视为独立的,图中那个虚线是不存在的,本文用来说明而已啦!上半部显示的是档案的实际内容,最底下一行则是状态显示列(如下图的[New File]信息),或者是命令下达列:
如果你开启的档案是旧档(已经存在的档案),则可能会出现如下的信息:
箭头所指的那个/etc/man.config" 141L, 4617C
代表的是『档名为/etc/man.conf
,档案内有141行以及具有4617个字符』的意思! 那一行的内容并不是在档案内,而是在vi
显示一些信息的地方喔!
- 按下
i
进入编辑模式,开始编辑文字
注意:在
vi
里面,[tab]
这个按钮所得到的结果与空格符所得到的结果不一样 - 按下
[ESC]
按钮回到一般指令模式 - 进入命令行界面,文件储存并离开
vi
环境:输入:wq
即可存盘离开!
注意:
- 按下
:
光标就会移动到最下面一行去!- 存盘(write)并离开(quit)
在提示字符后面输入ls -l
就可以看到我们刚刚创建的welcome.txt
文件啦!整个图示有点像下面这样:
如果你的文件权限不对,例如为-r--r--r--
时,那么可能无法写入,此时可以使用强制写入的方式,即使用:wq!
(多加一个惊叹号即可!)不过,这是在你的权限可以改变的情况下才能成立的!
按键说明
一般指令模式可用的按钮说明:光标移动、复制贴上、搜寻取代等
一、光标移动
移动光标的方法 | |
---|---|
h 或 向左方向键(←) | 光标向左移动一个字符 |
j 或 向下方向键(↓) | 光标向下移动一个字符 |
k 或 向上方向键(↑) | 光标向上移动一个字符 |
l 或 向右方向键(→) | 光标向右移动一个字符 |
l 或 向右方向键(→) | 光标向右移动一个字符 |
如果你将右手放在键盘上的话,你会发现hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。如果想要进行多次移动的话,例如向下移动30列,可以使用30j 或30↓ 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! | |
[Ctrl] + [f] | 屏幕“向下”移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕“向上”移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕“向下”移动半页 |
[Ctrl] + [u] | 屏幕“向上”移动半页 |
+ | 光标移动到非空白字符的下一列 |
- | 光标移动到非空白字符的上一列 |
n<space> | 那个 n 表示“数字”,例如20。按下数字后再按空白键,光标会向右移动这一列的n个字符。例如20<space> 则光标会向后面移动20个字符距离。 |
0或功能键[Home] | 移动到这一行的最前面字符处(常用) |
$或功能键[End] | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个文件的最后一行(常用) |
nG | n为数字。移动到这个文件的第n行。例如20G则会移动到这个文件的第20行(可配合:set nu ) |
gg | 移动到这个文件的第一行,相当于1G啊!(常用) |
n<Enter> | n为数字。光标向下移动n行(常用) |
二、搜寻与取代
方法 | 含义 |
---|---|
/word | 向光标之下寻找一个名称为word 的字串 |
?word | 向光标之上寻找一个字串名称为word的字串 |
n | 这个n是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行/vbird去向下搜寻vbird这个字串,则按下n后,会向下继续搜寻下一个名称为vbird的字串。如果是执行?vbird的话,那么按下n则会向上继续搜寻名称为vbird的字串! |
N | 这个N是英文按键。与n刚好相反,为“反向”进行前一个搜寻动作。例如/vbird后,按下N则表示“向上”搜寻vbird 。 |
:n1,n2s/word1/word2/g | n1与n2为数字。在第n1与n2行之间寻找word1这个字串,并将该字串取代为word2,举例来说,在100到200行之间搜寻vbird并取代为VBIRD则::100,200s/vbird/VBIRD/g (常用) |
:1,$s/word1/word2/g | 从第一行到最后一行寻找word1字串,并将该字串取代为word2!(常用) |
:1,$s/word1/word2/gc | 从第一行到最后一行寻找word1字串,并将该字串取代为word2!且在取代前显示提示字符给使用者确认(confirm) 是否需要取代!(常用) |
三、删除、复制与贴上
方法 | 含义 |
---|---|
x, X | x为向后删除一个字符(相当于[del]按键),X为向前删除一个字符(相当于[backspace]亦即是倒退键) (常用) |
nx | n为数字,连续向后删除n个字符。举例来说,我要连续删除10个字符:10x |
dd | 删除光标所在的那一整列(常用) |
ndd | n为数字。删除光标所在的向下n行,例如20dd则是删除20行(常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除光标所在处,到该行的最后一个字符 |
d0 | 删除光标所在处,到该行的最前面一个字符 |
yy | 复制光标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下n行,例如20yy则是复制20行(常用) |
y1G | 复制光标所在行到第一行的所有数据 |
yG | 复制光标所在列到最后一列的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, P | p为将已复制的数据在光标下一行贴上,P则为贴在光标上一列!举例来说,我目前光标在第20行,且已经复制了10行数据。则按下p后,那10行数据会贴在原本的20行之后,亦即由21行开始贴。但如果是按下P呢?那么原本的第20行会被推到变成30行。(常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除10列:[10cj] |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
. | 重复前一个动作。如果你想要重复删除、重复贴上等等动作,按下小数点. 就好了!(常用) |
一般指令模式切换到编辑模式的可用的按钮说明
进入插入或取代的编辑模式 | |
---|---|
i, I | 进入插入模式(Insert mode):i为从目前光标所在处插入,I为在目前所在行的第一个非空白字符处开始插入。(常用) |
a, A | 进入插入模式(Insert mode):a为从目前光标所在的下一个字符处开始插入,A 为从光标所在列的最后一个字符处开始插入。(常用) |
r, R | 进入取代模式(Replace mode):r只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下ESC为止;(常用) |
[Esc] | 退出编辑模式,回到一般指令模式中(常用) |
上面除最后一个[Esc]
按键外,在vi画面的左下角处会出现--INSERT--
或--REPLACE--
的字样。你想要在文件里面输入字符时,一定要在左下角处看到 INSERT
或REPLACE
才能输入喔!
一般指令模式切换到命令行界面的可用按钮说明
命令行界面的储存、离开等指令 | |
---|---|
:w | 将编辑的数据写入硬盘文件中(常用) |
:w! | 若文件属性为只读时,强制写入该文件。不过到底能不能写入,还是跟你对该文件的文件权限有关啊! |
:q | 离开vi(常用) |
:q! | 若曾修改过文件,又不想储存,使用! 为强制离开不储存盘案。 |
注意:惊叹号 (! ) 在vi 当中,常常具有强制的意思 | |
:wq | 储存后离开,若为:wq! 则为强制储存后离开(常用) |
ZZ | 若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开! |
:w [filename] | 将编辑的数据储存成另一个文件(类似另存新文件) |
:r [filename] | 在编辑的数据中,读入另一个文件的数据。亦即将filename这个文件内容加到光标所在行后面 |
:n1,n2 w [filename] | 将n1到n2的内容储存成filename这个文件。 |
:! command | 暂时离开vi到命令行界面下执行command的显示结果!例如:! ls /home 表示可在vi当中察看/home下面以ls输出的文件信息! |
vim环境的变更 | |
:set nu | 显示行号,设置之后,会在每一列的字首显示该行的行号 |
:set nonu | 与set nu相反,为取消行号! |
在vi中,数字通常代表重复做几次,或去到第几个什么什么的意思。举例来说,要删除50行,则是用50dd
,数字加在动作之前~要向下移动20行就是20j
或者是20↓
vim的暂存盘、救援回复与打开时的警告讯息
一、回复:当你的系统因为某些原因而导致类似死机的情况时,还可以通过某些特别的机制来让你将之前未储存的数据“救”回来!
二、当我们在使用vim
编辑时,vim
会在与被编辑的文件的目录下,再创建一个名为.filename.swp
的文件。比如说我们在上一个小节谈到的编辑 /tmp/vitest/man_db.conf
这个文件时,vim
会主动的创建 /tmp/vitest/.man_db.conf.swp
的暂存盘,你对man_db.conf
做的动作就会被记录到这个.man_db.conf.swp
当中喔!如果你的系统因为某些原因断线了,导致你编辑的文件还没有储存,这个时候.man_db.conf.swp
就能够发挥救援的功能了!