为什么要使用vi和vim
vi和vim是最常用的文本编辑工具,就像Windows上的笔记本一样。在linux中修改任何文件,不管是nginx配置还是系统配置文件,都会用到vi和vim命令。
很多软件的编辑接口实际上调用的是vi。
vim是vi的高级版,操作更流畅还可以显示颜色等。linux默认可以使用vi,vim可能需要额外安装。
使用vi命令
使用vi + 文件名,就可以编辑一个文件了。vi命令有以下三个模式
-
一般命令模式 command mode
打开文件时默认进入的模式,可以进行光标移动、复制粘贴等
-
编辑模式 insert mode
摁下i,就进入编辑模式,可以进行修改和编辑;摁下esc,退出编辑模式回到一般命令模式
-
命令行模式 command-line mode
摁下: 就进入命令行模式,一般是执行保存
举例说明
# vi + 文件名进行编辑;如果文件不存在,就创建一个新文件
[root@node4 ~]# vi hello.txt
默认进入的是一般命令模式:
点击i进行输入,左下角有INSERT说明可以输入
摁下esc,然后输入:wq回车,进行保存
常用快捷键
在vi和vim命令中可用的快捷键非常多,以下只挑选几个常用的进行说明
-
一般命令模式
移动光标
G 移动到文件最后一行 - 向上移动到非空格的上一行 数字+空格 输入20然后空格,会移动到该行第20个字符处 0 移动到该行最左边 end 移动到这一行的最后 gg 移动到这个文件的第一行 查找和替换:
/keyword 向后查找一个字符串 ?keyword 向上查找一个字符串 :n1,ni2s/word1/word2/g 在第n1行和n2行之间查找word1替换为word2 复制黏贴:
dd 删除(剪切)光标所在的那一整行 数字+dd 删除(剪切)光标往下n行 yy 复制光标所在的一行 数字+yy 复制光标往下n行 p和P 小p是粘贴到光标所在的下一行;P则是上一行 u 恢复上一个操作 -
编辑模式
编辑模式没啥好说的,就是一般的编辑和修改。
-
命令行模式
:w 保存 :w! 强制保存 :q 退出 :wq! 强制保存后退出,这是最常用的命令了 -
vim中的追加命令
:set nu 显示行号 :set nonu 取消行号显示
vim的缓存和恢复
使用vim时,会在当前目录建立一个filename.swp的文件。如果系统在此时意外关机了,那么借由这个swp文件,就可以恢复还未保存的内容。我们来模拟一下这个操作
# 编辑hello.txt文件
[root@node4 ~]# vim hello.txt
# 按下ctrl + z ,此时vim会在后台继续执行
[1]+ 已停止 vim hello.txt
接下来模拟系统中断
[root@node4 ~]# ls -al
总用量 88
-rw-r--r-- 1 root root 7 4月 8 20:10 hello.txt
-rw-r--r-- 1 root root 12288 4月 8 20:46 .hello.txt.swp
# 通过kill命令强行终止vim
[root@node4 ~]# kill -9 %1
[1]+ 已停止 vim hello.txt
# 此时可以看到swp文件还是存在的
[root@node4 ~]# ls -al
总用量 88
-rw-r--r-- 1 root root 7 4月 8 20:10 hello.txt
-rw-r--r-- 1 root root 12288 4月 8 20:46 .hello.txt.swp
此时如果用vim继续编辑,就会有如下警告
E325: 注意
发现交换文件 ".hello.txt.swp"
所有者: root 日期: Mon Apr 8 20:46:40 2024
文件名: ~root/hello.txt
修改过: 否
用户名: root 主机名: node4
进程 ID: 3619
正在打开文件 "hello.txt"
日期: Mon Apr 8 20:10:50 2024
(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.
如果是这样,请用 ":recover" 或 "vim -r hello.txt"
恢复修改的内容 (请见 ":help recovery")。
如果你已经进行了恢复,请删除交换文件 ".hello.txt.swp"
以避免再看到此消息。
交换文件 ".hello.txt.swp" 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 删除交换文件((D)), 退出((Q)), 中止((A)):
分别解释一下各个选项的意思
- 如果是多人在编辑同一个文件,让其他人退出,然后再操作
- 只读取文件内容不进行编辑的话,输入o
- 使用R恢复文件,然后需要手动删除swp文件,否则每次编辑都会有这个警告
- 如果确定不需要恢复,这个缓存时没用的,那么就按下D,删除缓存文件
vim的额外功能
如果你的系统还不能使用vim命令,可以使用如下命令进行安装
yum install vim
vim会对系统文件进行颜色显示,可以通过如下命令打开系统文件看下
vim /etc/profile
也可以试试输入:set nu显示行号
多文件编辑、多窗口
这些感觉不太常用所以略过