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

news2025/1/13 17:28:22

概述

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提供了非常好用的替换功能,可以快速完成大量的替换工作。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/917140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于swing的校园茶餐厅java jsp点餐订餐管理mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的校园茶餐厅 系统有1权限 二、主要功能 …

Spring 自动装配机制详解

文章目录 一、手动装配二、自动装配1. XML 方式2. 注解方式 一、手动装配 首先知道 Spring 装配是干了件啥事?我的理解,它就是用来解决 bean 之间依赖关系的一个手段。 比如说我这里有一个 People 类和一个 Dog 类,People 依赖 Dog&#xff…

uniapp - 实现卡片式胶囊单选后右上角出现 “√“ 对勾对号选中效果功能,适用于小程序h5网页app全平台通用(一键复制组件源码,开箱即用!)

效果图 uniapp全平台兼容(小程序/h5网页/app)实现点击选择后,右上角出现 √ 对号效果(角标形式展现),功能组件, 改个样式,直接复制使用该组件。 组件源码 在 components 组件文件夹下,随便建立一个 .vue 文件,一键复制下方源码。

ModaHub魔搭社区:AI Agent在网络购物场景下的AgentBench基准测试

目录 AgentBench评估哪些场景? 近日,来自清华大学、俄亥俄州立大学和加州大学伯克利分校的研究者设计了一个测试工具——AgentBench,用于评估LLM在多维度开放式生成环境中的推理能力和决策能力。研究者对25个LLM进行了全面评估,包括基于API的商业模型和开源模型。 他们发现…

发力服务业务,龙湖集团半程领跑赢在“智慧”

成立三十载,龙湖集团一直是房地产行业“特立独行”的存在。 一方面,龙湖在对外战略方面长期量入为出,从不背上过重的“包袱”。 不久前,一则消息引发市场关注:龙湖集团提前偿还17亿元债务,已基本全部还清…

solidity0.8.0的应用案例12:通用可升级合约UUPS

代理合约中选择器冲突(Selector Clash)的另一个解决办法:通用可升级代理(UUPS,universal upgradeable proxy standard)。代码由OpenZeppelin的UUPSUpgradeable简化而成,不应用于生产。 UUPS 作为透明代理的替代方案,UUPS也能解决"选择器冲突"(Selector Cl…

ARM开发(cortex-A7核中断实验)

1.实验目的:实现KEY1/LEY2/KE3三个按键,中断触发打印一句话,并且灯的状态取反; key1 ----> LED3灯状态取反; key2 ----> LED2灯状态取反; key3 ----> LED1灯状态取反; 2.分析框图: …

特征值分解、SVD分解在线性最小二乘解上的应用

1. 奇异值分解(SVD)原理 1.1 回顾特征值和特征向量 我们首先回顾下特征值和特征向量的定义如下: A x λ x Axλx Axλx其中A是一个nn的实对称矩阵,x是一个n维向量,则我们说λ是矩阵A的一个特征值,而x是矩阵A的特征值λ所对应的…

数据之美:探索数据可视化设计的奇妙世界

在信息时代的浪潮中,海量的数据正在影响着我们的生活和决策。然而,数据本身虽然有力量,但如何将其有机地呈现给我们,却成为了一个挑战。数据可视化设计应运而生,它不仅让枯燥的数字变得生动,还带来了一场视…

修复磁盘错误需要一小时才能完成怎么办?

“修复磁盘错误需要一小时才能完成”是一种常见的问题,当你遇到这个问题,又不想长时间等待时,可以尝试一下方式进行解决。 方法1. 在安全模式中解决 1. 在启动电脑看到Windows标志时,长按电源键强行关机,重复此操作三…

2023年8月第3周大模型荟萃

2023年8月第3周大模型荟萃 2023.8.22版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、LLM-Adapters:可将多种适配器集成到大语言模型 来自新加坡科技设计大学和新加坡管理大学的研究人员发布了一篇题为《LLM-Adapters: An …

Linux系统之安装OneNav个人书签管理器

Linux系统之安装OneNav个人书签管理器 一、OneNav介绍1.OneNav简介2.OneNav特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查本地yum仓库状态 四、安装httpd服务4.1 安装httpd4.2 启动httpd服务4…

什么是客服外包?为什么越来越多的店家选择客服外包?

客服外包,即是将自己的客户服务体系交给更专业的团队。 1.省钱(无需人员成本、无需设备成本、无需支付薪资) 2.省时(无需招聘员工、无需员工管理、无需员工培训) 3.高效(人工AI智能、流水线操作、专业培…

如何拉取Gitee / GitHub上的Unity项目并成功运行

前言 由于目前大部分人使用的仓库都是Gitee或者是GitHub,包括小编的公司所使用的项目仓库也包括了Gitee;我们需要学习技术栈时都会去百度或者是去GitHub上看看别人的项目观摩学习,可能很多小白在遇到拉取代码时出现各种问题,或者…

Windows wsl2支持systemd

背景 很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的。 为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubuntu20.04)中支持systemd&#xff0…

每日汇评:英镑的韧性掩盖了更广泛的疲态,英镑相关货币分析

1、尽管英国CPI数据强劲,但英镑/美元未能延续涨势; 2、欧元/英镑向下突破的时机可能已经成熟,英镑/日元的反弹目前正在失去动力; 3、英镑交叉盘的关键水平至关重要; 上周英国公布强劲通胀数据后,英镑未能…

Microsoft Message Queuing Remote Code Execution Vulnerability

近期官方公布了一个MSMQ的远程代码执行漏洞,可能因为网络安全设备的更新,影响业务,值得大家关注。 Microsoft Message Queuing 概述 MicroSoft Message Queuing(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输…

根据学生学习水平量身定制指导以促进知识蒸馏的效果

文章目录 Tailoring Instructions to Student’s Learning Levels Boosts Knowledge Distillation一、PPT内容P1 BackgroundP2 L2T--online distillationP3 L2T--Meta distillationP4 Approach--LGTMP5 Distillation influenceP6 Finite difference approximationP7 Teachers a…

VMware 17 Player下CentOS的安装与配置

本文详细记录VMware 17 Player的安装,以及其中Centos虚拟机的安装;内容包含下载、安装全过程;另外包含一些基本的应用测试阐述。 安装VMware VMware下载 点击即可下载:https://www.vmware.com/go/getplayer-win 官网里面找版本&…

对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理?

对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理? 比如,你在运行你的代码的时候 它总在python控制台运行,十分难受 解决方法 在pycharm中设置下即可,很简单 选择运行点击…