9.1 vi与vim
vim是vi的升级版,使用vi/vim的原因
-
所有UNIX-like系统都会内置vi
-
很多软件的编辑接口都会主动调用vi(比如crotab)
-
vim具有程序编辑能力,主动地以字体颜色辨别语法的正确性
-
程序简单,编辑速度很快
9.2 vi的使用
vi分成3种模式:
-
一般命令模式(command mode)
vi打开文件后直接进入,或者其他模式下按【Esc】
-
编辑模式(insert mode)
一般命令模式下输入【i o a等】即可进入
-
命令行模式(command-line mode)
一般命令模式下输入【: / ?】即可进入
9.2.2 按键说明
1、一般命令模式(command mode)
1)移动光标的方法
移动光标的方法 | |
---|---|
hjkl | 左下上右移动一个字符 |
Ctrl+f | [Page Down] |
Ctrl+b | [Page Up] |
数字0 | [Home],本行的第一个字符 |
$ | [End],本行的最后一个字符 |
G | 文件的最后一行 |
gg | 文件的第一行 |
n<Enter> | 光标向下移动n行 |
2)查找与替换
查找与替换 | |
---|---|
/word | 向光标之下寻找一个名称叫word的字符串 |
?word | 向上找 |
n | 重复前一个查找操作 |
N | 【反向】进行前一个查找操作 |
:n1,n2s/word1/word2/g | 替换word1为word2,行数是n1~n2 |
:1,$s/word1/word2/g | 替换word1为word2,全文 |
:1,$s/word1/word2/gc | 替换前询问用户(confirm) |
3)删除、复制和粘贴
删除、复制和粘贴 | |
---|---|
x和X | x是向后删除一个字符,X是向前删除一个字符 |
dd | 删除当前行 |
ndd | 删除光标所在的向下n行 |
yy | 复制当行,在前面加数字,就是复制n行 |
p与P | p是把复制的数据粘贴到光标下一行,P是上一行 |
u | 恢复前一个操作 |
Ctrl+r | 重做被恢复的前一个操作,不能重复操作 |
. | 小数点,重复操作 |
2、编辑模式(insert mode)
进入插入或替换的编辑模式 | |
---|---|
i和I | i为【从目前光标所在处插入】,I为【从当前行的第一个字符处插入】 |
a和A | a为【从当前光标的下一个字符处插入】,A为【从当前行的最后一个字符处插入】 |
o和O | o为【光标的下一行开始插入】,O为【光标的上一行开始插入】 |
r和R | r为【替换光标所在的一个字符】,R为【替换光标所在的连续字符】 |
3、命令行模式(command-line mode)
w保存,q退出,wq保存后退出,加上!就是强制的意思,read only用户必须加!,其中否能强制写入取决用户的文件权限
9.2.4 vim的缓存和恢复
在用vi编辑文件时会产生一个缓存文件(.文件名.swp),如果编辑文件时被异常终端,导致缓存无法正常结束,那么它就不会消失,如下:
-rwx------. 1 root root 1978 Jul 28 16:16 passwd.backo
-rw-------. 1 tecs tecs 12288 Jul 28 16:07 .passwd.backo.swp
此时你再编辑改文件,会弹出来提醒事项,如下,想要不弹出,记得删除缓存文件
E325: ATTENTION
Found a swap file by the name ".passwd.backo.swp" <==有缓存文件
owned by: tecs dated: Thu Jul 28 16:07:17 2022
file name: /tmp/passwd.backo <==缓存文件属于哪个实际的文件
modified: YES
user name: tecs host name: host-192-168-177-76
process ID: 1187669
While opening file "passwd.backo"
dated: Thu Jul 28 16:16:58 2022
NEWER than swap file!
# 发生错误的2个原因和解决方法
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r passwd.backo"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".passwd.backo.swp"
to avoid this message.
"passwd.backo" 40L, 1978C
Press ENTER or type command to continue
此时输入【R】就可以从缓存文件将上次的修改加载过来,如果认为缓存文件无效可以输入【D】来删除它
如果发现是有其他人也在vi修改此文件,可以使用【O】来只读该文件
9.3 vim的额外功能
略