【日常积累】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的知识请前往博客主页查看,编写过程中可能由于能力有限难免出现问题,敬请指出,谢谢。

相关推荐
web1350858863524 分钟前
前端node.js
前端·node.js·vim
baihb102434 分钟前
Jenkins 构建流水线
运维·jenkins
BUG 40439 分钟前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea1 小时前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
深海的鲸同学 luvi1 小时前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
dowhileprogramming1 小时前
Python 中的迭代器
linux·数据库·python
过过过呀Glik1 小时前
在 Ubuntu 服务器上添加和删除用户
linux·服务器·ubuntu
Tesseract_95273 小时前
ioctl回顾
linux
Java小白中的菜鸟3 小时前
centos7的磁盘扩容
linux·运维·服务器
黑客老陈4 小时前
面试经验分享 | 北京渗透测试岗位
运维·服务器·经验分享·安全·web安全·面试·职场和发展