【日常积累】Linux中vi/vim的使用

概述

vim是由vi发展演变过来的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,由于其功能相比vi来说更加强大,所以在实际工作中的使用更加广泛。

vim工作模式

Vim具有多种工作模式,常用的工作模式有:普通模式、插入模式、命令模式。其中,普通模式可以实现基本的光标移动与大量的快捷键操作,插入模式可实现文本的基本编辑功能,命令模式通过输入特定的指令实现特定的功能,如保存与退出等。

直接输入vim命令,即可开启该文本编辑器,默认将创建一个 新的文档(保存时需要指定文件名)。另外,如果vim命令后跟了文件名参数,则需要看该文件是否存在,如果存在,vim将打开该文件,如果不存在,vim将创建该文件。

vim编辑器默认会进入普通模式,插入模式可以通过以下按键进入。如下表1。

按键 功能描述
a 进入插入模式,后续输入的内容将插入至当前光标的后面
A 进入插入模式,后续输入的内容将插入至当前段落的段尾
i 进入插入模式,后续输入的内容将插入至当前光标的前面
I 进入插入模式,后续输入的内容将插入至当前段落的段首
o 进入插入模式并在当前行的后面创建新的空白行
O 进入插入模式并在当前行的前面创建新的空白行

当需要退回到普通模式或不知道自己当前处于什么模式时,可以通过Esc键返回到普通模式。最后,在普通模式下输入":", 即可进入命令模式;在":"后输入指令,即可实现特定的功能。

在插入模式中,可以使用以下按键,如下表2:

按键 功能描述
各字符按键以及Shift组合 输入各种字符
ENTER 换行
BACK SPACE 删除光标前一个字符
DEL 删除光标后一个字符
方向键 在文本中移动光标
HOME/END 移动光标到行首/行尾
Page Up/Page Down 上/下翻页
Insert 切换光标为输入/替换模式

Vim光标操作

vim中最简单的移动光标的方式是使用方向键(. 上、下、左、右)操作,但这种方式的效率太低,更高效的方式是使用快捷键,常用的快捷键如下表所示,所有的快捷键均在普通模式下直接使用。快捷键的使用需要在日常中多加使用记忆,不然很容易就忘记了。如下表3。

快捷键 功能描述
h 光标向左移动一位,多行可以添加数字在前面
j 光标向下移动一行(以回车为换行符),多行可以添加数字在前面
k 光标向上移动-一行,多行可以添加数字在前面
l 光标向右移动一位,多行可以添加数字在前面
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
gg 移动光标至文件首行
G 移动光标至文件末尾
nG 移动光标至第n行(n为数字,如n为10时表示第10行)
^ 光标移至当前行的首字符
$ 光标移至当前行的尾字符
fx 光标移至当前行的下一个x字符处(相当于查找并跳转至x字符)
Fx 光标移至当前行的上一个x字符处
w 光标向右移动- -个单词
nw 光标向右移动n个单词(n 为数字)
b 光标向左移动一个单词
nb 光标向左移动n个单词(n 为数字)

vim编辑文档

在vim编辑器中编辑文档内容主要有两种常用的方式:进入编辑模式操作和快捷键操作。进入编辑模式的方法已经在表1中有详细的描述,进入编辑模式后,即可以通过移动光标进行增加、删除、修改的基本操作,这种方法也是最简单的方式。另外,快捷键操作方式是在普通模式下输入相应的快捷键实现对应的功能,快捷键功能描述如下表4。

快捷键 功能描述
x 删除光标当前字符
dd 删除一行
ndd 删除n行(n为数字)
d$ 删除光标至行尾的内容
J 删除当前行的换行符,可以将两行合并为一行
u 撤销上一步操作,可以多次使用uu表示撤销两步操作
ctrl + r 重做上一次撤销的操作,相当于恢复。也可以多次使用进行多次恢复。
rx 将光标当前字符替换为x (x 为任何键盘单个输入)
yy 复制当前行
p 粘贴至当前行之后
P 粘贴至当前行之前(注意大小写)

vim查找与替换

当文档很长时,我们可以通过查找快速定位要找的内容,在vim中通过"/"关键字实现自上往下的查找功能,如,/password在当前文档的光标处向下查找password并显示,如果一个文档中有多个password, 可以通过快捷键n跳转至下一个匹配的关键词处,快捷键N将跳转至上一个匹配的关键词处。另外,"?"关键词实现了自下往上的查找功能,如,?password 从当前文档的光标处向上查找password并显示,此时快捷键n表示向上查看匹配,N表示向下查看匹配。

vim提供了非常好用的替换功能,可以快速完成大量的替换工作。

bash 复制代码
[root@VM-4-6-centos ~]# cp /etc/passwd /tmp/
[root@VM-4-6-centos ~]# vim /tmp/passwd

通过上面两条命令复制一份临时测试文档并编辑,我们可以对该文件实现多种替换功能,如下表5所示(在普通模式下,输入冒号":"进入命令模式完成替换命令)。

指令 功能描述
:s/root/admin/ 将光标当前行中第-一个出现的root替换为admin,没有则不替换
:s/root/admin/g 将光标当前行中所有的root替换为admin
:2,4s/sbin/bin/g 将第二行至第四行之间的所有sbin替换为bin
:%s/nologin/login/g 将所有行的nologin都替换为login

vim的保存与退出

一般情况下,我们会通过命令模式输入特定的指令实现保存与退出功能,常用指令详见下表6。

指令 功能描述
:q! 不保存并强制退出
:wq 保存并退出
:x 保存并退出
:w 保存
:w a.txt 另存为a.txt,如果直接vim不指定打开文件,保存的时候就需要指定文件名
另一种保存方式为快捷键操作,在普通模式下输入ZZ,即可实现保存并退出文档。注意是大写的ZZ

更多使用技巧

显示行号

显示当前行是第几行的方式有很多,可以通过为文档添加行号来实现,添加行号的方法是在命令模式下输入:set number或简写:set nu即可。

忽略大小写.

在vim中查找时,你可能不清楚所要找的关键词的大小写,而vim默认是区分大小写的,

这时可以通过在命令模式下输入:set ignorecase,实现忽略大小写。

多窗口编辑

当需要同时编辑多个文档时,分割窗口就尤为重要了,**可以通过:split(水平分割)或者:vsplit(垂直分割)**来实现窗口的分割。如此可以实现编辑同一个文档的不同行或者不同文件,至于窗口的切换,可以使用如下快捷方式:

Ctrl+w+h快捷键表示跳转至左边一个窗口, Ctrl+w+l 快捷键表示跳转至右边一个窗口;

Ctrl+w+j快捷键表示跳转至下面一个窗口,Ctrl+w+k 快捷键表示跳转至上面一一个窗口。

在命令模式下输入:q(:close),两个命令可以关闭当前窗口。

在命令模式下输入:split second.txt,此命令会水平分割窗口并打开新的文件,如此实现多窗口多文件的编辑工作。默认的:split 为水平分割窗口,垂直分割可以使用:vsplit指令。

执行Shell命令

使用vim编辑文档的过程中,如需要执行一条Shell命令而不想退出Vim编辑器,可以通过:!{命令}的方式实现。例如,需要查看当服务器的IP地址时,则在命令模式下输入指令:!ip a 即可,执行完成后按回车键返回vim编辑器。

自动补齐

如果需要输入的内容在前面的行中已经出现过,那么vim可以根据上文内容自动补齐输入。例如,在文件某行需要之前的某个单词,以后需要再次输入单词的前一个或者几个首字母,然后使用快捷键Ctrl+N,通过上下键选择自己需要的即可实现自动补齐功能。

注意:此时选中的是helloa。编辑器下方也会通过数字来显示当前的选择项。

块删除

某些情况下,我们需要删除多行的某一部分,操作如下:

  • 按下组合键"ctrl+v" 进入"块选择"模式,通过上下左右键选取块操作的行和列,注意是以进入块选择模式前光标所在的位置为基点。
  • 按下d (或者x键)即可删除被选中的整块,后面还可以通过p进行粘贴使用。

块插入

主要针对同时对多行添加相同的内容。操作如下:

  • 按下组合键"ctrl+v" 进入"块选择"模式,选取上下键选取需要插入内容的行,注意也是以进入块选择模式前光标所在的位置为基点选择行。
  • 按下shift+i(或者大写的字母"i")
  • 输入要插入的内容
  • 按ESC,之后就会看到插入的效果。

    更多vim的使用方法请自行探索。

更多关于Linux的知识请前往博客主页查看,编写过程中可能由于能力有限难免出现问题,敬请指出,谢谢。

相关推荐
Peter·Pan爱编程8 分钟前
Docker在Linux中安装与使用教程
linux·docker·eureka
kunge20131 小时前
Ubuntu22.04 安装virtualbox7.1
linux·virtualbox
清溪5491 小时前
DVWA中级
linux
MUY09901 小时前
应用控制技术、内容审计技术、AAA服务器技术
运维·服务器
楠奕1 小时前
elasticsearch8.12.0安装分词
运维·jenkins
Sadsvit2 小时前
源码编译安装LAMP架构并部署WordPress(CentOS 7)
linux·运维·服务器·架构·centos
xiaok2 小时前
为什么 lsof 显示多个 nginx 都在 “使用 443”?
linux
java资料站2 小时前
Jenkins
运维·jenkins
苦学编程的谢2 小时前
Linux
linux·运维·服务器
G_H_S_3_3 小时前
【网络运维】Linux 文本处理利器:sed 命令
linux·运维·网络·操作文本