Linux下的编辑器 —— vim

news2025/1/29 8:13:38

目录

1.什么是vim

2.vim的模式

认识常用的三种模式

三种模式之间的切换

命令模式和插入模式的转化 

命令模式和底行模式的转化

插入模式和底行模式的转化

3.命令模式下的命令集

光标移动相关的命令

复制粘贴相关命令

撤销删除相关命令

查找相关命令

批量化注释和去注释

4.底行模式下的命令集

5.vim配置

vim的常见配置项


1.什么是vim

在Windows下,我们通常使用 Visual Studio 、devC++、codeblocks这样的软件,这些软件其实是集成开发环境,意思就是,这些软件同时具有编辑、编译、调试代码,这些软件将这些功能集中于一体,这就是集成开发环境。

在Linux中,将这些功能独立出来形成一个程序软件,用于编辑代码的就是vim。

所以:vim就是Linux下一款编辑器。

你可能还听说过vi,vim其实是vi的升级版,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,例如语法加亮……

2.vim的模式

认识常用的三种模式

vim其实是一款多模式的编辑器,总共有12种模式,每种模式下都能进行不同的操作,我们主要学习三种模式即可,分别是:

  • 命令模式:这是vim打开时默认的模式,输入的所有内容都当做命令来看待。
  • 插入模式:只有在插入模式下我们才能对文件进行修改。
  • 底行模式:当我们在命令模式下输入 ' : ',也就是 shift + ;时我们就会进入底行模式,底行模式下,我们输入的内容会显示在这个冒号的后面。

    三种模式的详细使用后面会有!!!这里只是简单的认识一下。

三种模式之间的切换

命令模式和插入模式的转化 

当我们使用 vim 文件名 命令打开一个文件的时候,vim默认就处于命令模式下:

此时我们还不能编辑该文件,因为只有在插入模式下才能编辑文件,我们可以输入 a 或 i,进入插入模式:

  • 终端的最下面会出现 提示词 INSERT,表示我们处于插入模式。

此时我们就可以编辑文件了。

如果我们想回到命令模式,直接按键盘上的Esc键即可:

  • 此时,终端上啥也没有,表明我们处于命令模式。

命令模式和底行模式的转化

我们先打开test_file文件,并输入一段内容,然后回到命令模式:

此时我们已经修改了文件,我们想要保存文件的内容,此时,我们就要按下 shift+;进入底行模式,输入w并按下回车,表示向文件写入,也就是保存文件内容:

此时,输入回车之后,自动就进入命令模式了,如果在底行模式下没有输入内容,我们想要进入底行模式,同样按下Esc即可。

插入模式和底行模式的转化

我们在插入模式下,如果想要进入底行模式,需要借助命令模式进行中转,先按Esc回到命令模式,然后输入shift+; 进入底行模式。

同样,我们从底行模式进入插入模式也需要借助命令模式进行中转,先按Esc进入命令模式,然后按a/i/o中的一个进入插入模式。

3.命令模式下的命令集

对于插入模式来讲,我们在插入模式下直接输入我们想要输入的内容即可,但是命令模式和底行模式还有一些常用的命令需要了解。

光标移动相关的命令

  1. shift+$:光标定位在当前行的最右侧结尾处。
  2. shift+^:光标定位在当前行的最左侧开头处。
  3. shift+g:光标定位到文本最后一行的开头处。
  4. n+shift+g:光标定位到指定一行的开头处。
  5. gg:光标定位到文本的最开始处。
  6. h:光标向左移动一格。
  7. j:光标向下移动一格。
  8. k:光标向上移动一格。
  9. l:光标向右移动一格。
  10. w:光标以单词为单位进行后移。
  11. b:光标以单词为单位进行前移。

复制粘贴相关命令

  1. yy:复制当前行
  2. n+yy:从光标所在位置开始,向下复制指定行。
  3. p:在下一行粘贴一次复制的内容。
  4. n+p:在下一行粘贴多次复制的内容。

撤销删除相关命令

  1. u:undo的意思,撤销编辑操作。
  2. Ctrl+r:反撤销,对撤销进行撤销。
  3. dd:删除/剪切 光标所在行。
  4. n+dd:从光标所在行开始,删除/剪切 指定行数的内容。(dd之后我们可以使用p进行粘贴)
  5. x:删除光标所在字符。
  6. n+x:从光标所在位置开始向右删除指定个数的字符。
  7. n+shift+x(n+X):向左侧删除指定个数的字符。

查找相关命令

  1. shift+3(#):标记光标所在的函数名。
  2. n:next的意思,下一个查找到的 函数名/字符串。

批量化注释和去注释

批量化注释步骤:

  1. Ctrl+v:相当于标记起始行
  2. hjkl选择区域
  3. shift+i
  4. //
  5. Esc

批量化去注释:

  1. Ctrl+v:标记起始行
  2. hjkl选择区域
  3. d

4.底行模式下的命令集

  1. w:表示保存。
  2. q:表示退出。
  3. wq:表示保存并退出。
  4. w!:表示强制保存。
  5. q!:表示强制退出。
  6. wq!:表示强制保存并退出。
  7. set nu:设置行号
  8. set nonu:取消行号
  9. vs+文件名:再次打开一个文件,vim支持同时编辑多个文件
  • 光标在哪里,编辑的就是哪个文件,底行操作的就是哪个文件。
  • 如果我们想切换到其他文件进行编辑 命令模式下按 Ctrl+ww 即可 。

5.vim配置

通过前面的学习,我们已经能够简单的使用vim了,但是,我们发现,vim编辑起来很不方便,没有一系列的自动补齐,语法高亮等功能…… 为了增加这些功能,我们可以对vim进行配置。

在vim启动的时候,其实并不是直接就启动,vim需要先读取当前用户家目录下的隐藏文件 —— .vimrc,这个隐藏文件就是vim的配置文件,我们在该文件中可以自定义vim的配置;

我们可以进入当前用户的家目录查看该文件,如果没有的话,就自己新建一个 .vimrc文件:

vim的常见配置项

基本编辑功能配置:

  1. syntax on:开启语法高亮功能,自动识别代码,并使用多种颜色显示。
  2. set number:显示行号,方便定位和参考代码。
  3. set smartindent:智能自动缩进,根据上下文自动调整缩进级别。
  4. set shiftwidth=4:设置自动缩进时,每一级缩进4个空格的宽度。
  5. set tabstop=4:设定Tab键的长度为4个空格。
  6. set expandtab:将Tab键转换为等量的空格,保持代码在不同编辑器中的一致性。
  7. set softtabstop=4:按退格键时一次删除4个空格,与tabstop配合使用。

搜索和替换配置:

  1. set ignorecase smartcase:搜索时忽略大小写,但如果搜索词中包含大写字母,则对大小写敏感。
  2. set nowrapscan:禁止在搜索到文件两端时重新搜索。
  3. set incsearch:输入搜索内容时就显示搜索结果,方便实时查看匹配情况。
  4. set hlsearch:搜索时高亮显示被找到的文本,方便快速定位。

界面和显示配置:

  1. set showmatch:插入括号时,短暂地跳转到匹配的对应括号,提高代码可读性。
  2. set matchtime=2:设置短暂跳转到匹配括号的时间,单位为十分之一秒。
  3. set cursorline:突出显示当前行,增加编辑时的视觉焦点。
  4. set ruler:打开状态栏标尺,显示当前光标位置、行号等信息。
  5. set laststatus=2:显示状态栏,默认值为1时可能无法显示。
  6. set relativenumber:显示光标所在的当前行的行号,其他行都为相对于该行的相对行号。
  7. set listchars=tab:»■,trail:■:如果行尾有多余的空格(包括Tab键),该配置将让这些空格显示成可见的小方块。

其他配置:

  1. set autoindent:自动缩进,新行的缩进级别与前一行相同。
  2. set hidden:允许在有未保存的修改时切换缓冲区,此时的修改由Vim负责保存。
  3. set cmdheight=1:设定命令行的行数为1,减少屏幕空间占用。
  4. set backupcopy=yes:设置备份时的行为为覆盖,确保备份文件的完整性。

我们使用vim打开这个隐藏文件并向其写入这些配置项:

当我们再次打开vim的时候,配置就生效了:

注意:我们可以在网上搜索vim的配置项,把vim配置成自己想要的样子!

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

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

相关文章

C25.【C++ Cont】初识运算符的重载和sort函数

目录 1.为什么要引入运算符重载 2.运算符重载写法 格式 例子 示例代码 运行结果 3.sort函数 两种声明 声明1:默认情况 参数 示例代码1:排整型 示例代码2:排浮点数 ​编辑 示例代码3:排字符串 声明2:自定义情况 参数 comp比较函数的两种写法 写法1:创建比较函…

粒子群算法 笔记 数学建模

引入: 如何找到全局最大值:如果只是贪心的话,容易被局部最大解锁定 方法有:盲目搜索,启发式搜索 盲目搜索:枚举法和蒙特卡洛模拟,但是样例太多花费巨量时间 所以启发式算法就来了,通过经验和规…

深入理解若依RuoYi-Vue数据字典设计与实现

深入理解若依数据字典设计与实现 一、Vue2版本主要文件目录 组件目录src/components:数据字典组件、字典标签组件 工具目录src/utils:字典工具类 store目录src/store:字典数据 main.js:字典数据初始化 页面使用字典例子&#xf…

实战网络安全:渗透测试与防御指南

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在数字化时代,网络安全已成为企业和个人不可忽视的重要课题。网络攻击的复杂性与日俱增,从数据泄露…

SpringBoot+Electron教务管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.查询课程表代码2.保存学生信息代码3.用户登录代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootElectron框架开发的教务管理系统。首先&#xff…

Ubuntu-手动安装 SBT

文章目录 前言Ubuntu-手动安装 SBT1. SBT是什么?1.1. SBT 的特点1.2. SBT 的基本功能1.3. SBT 的常用命令 2. 安装2.1. 下载2.2. 解压 sbt 二进制包2.3. 确认 sbt 可执行文件的位置2.4. 设置执行权限2.5. 创建符号链接2.6. 更新 PATH 环境变量2.7. 验证 sbt 安装 前言 如果您觉…

详解最基本的数据顺序存储结构:顺序表

新的一年,我觉得这张图很合适!有梦想,敢拼,马上就是除夕了,希望新的一年我们逢考必过,事事顺心,看见朝阳的你是不是嘴角微微上扬! 本篇从0基础白话文讲述顺序表的概念、用法、注意事…

STM32使用VScode开发

文章目录 Makefile形式创建项目新建stm项目下载stm32cubemx新建项目IED makefile保存到本地arm gcc是编译的工具链G++配置编译Cmake +vscode +MSYS2方式bilibiliMSYS2 统一环境配置mingw32-make -> makewindows环境变量Cmake CmakeListnijia 编译输出elfCMAKE_GENERATOR查询…

安装Office自定义项,安装期间出错

个人博客地址:安装Office自定义项,安装期间出错 | 一张假钞的真实世界 卸载PowerDesigner后,打开“WPS文字”时出现下图错误: 解决方法: 按“WinR”快捷键,打开【运行】框,在对话框中输入“re…

代码审查中的自动化与AI应用

代码审查(Code Review)作为软件开发中的一项重要实践,通常被认为是提高代码质量、减少bug和提升团队协作的重要手段。随着开发规模的不断扩大,手动代码审查在效率、准确性、以及可扩展性上都存在明显的局限性。尤其是在敏捷开发和…

蓝桥杯模拟算法:蛇形方阵

P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 我们只要定义两个方向向量数组,这种问题就可以迎刃而解了 比如我们是4的话,我们从左向右开始存,1,2,3,4 到5的时候y就大于4了就是越界了&…

PostGIS笔记:PostgreSQL 数据库与用户 基础操作

数据库基础操作包括数据模型的实现、添加数据、查询数据、视图应用、创建日志规则等。我这里是在Ubuntu系统学习的数据库管理。Windows平台与Linux平台在命令上几乎无差异,只是说在 Windows 上虽然也能运行良好,但在性能、稳定性、功能扩展等方面&#x…

Nginx中部署多个前端项目

1,准备前端项目 tlias系统的前端资源 外卖项目的前端资源 2,nginx里面的html文件夹中新建,tlias和sky两个文件夹。 切记这是在nginx/html下创建的 mkdir sky mkdir tlias 把tlias和sky的资源都放到对应的文件夹中 3,编辑配置ngi…

人力资源管理HR系统的需求设计和实现

该作者的原创文章目录: 生产制造执行MES系统的需求设计和实现 企业后勤管理系统的需求设计和实现 行政办公管理系统的需求设计和实现 人力资源管理HR系统的需求设计和实现 企业财务管理系统的需求设计和实现 董事会办公管理系统的需求设计和实现 公司组织架构…

2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文

模型设计思路与创新点: 建模的时候应该先确定我们需要建立什么类的模型?优化类还是统计类?这个题需要大量的数据分析,因此我们可以建立一个统计学模型。 统计学建模思路:观察规律,建立模型,参…

【太阳——几何计算】

题目 代码 #include <bits/stdc.h> using namespace std; using PII pair<int, int>; using ll long long; const int N 1e5 10; set<PII> s; bool st[N]; struct node {int x, y, id; } arr[2 * N]; int main() {int n, X, Y;cin >> n >> …

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道&#xff0c;通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…

云原生时代,如何构建高效分布式监控系统

文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目&#xff0c;由于其良好的架构设计和完善的生态&#xff0c;迅速成为了监控…

火语言RPA--配置文件读取

&#x1f6a9;【组件功能】&#xff1a;读取配置文件信息以字典类型输出。 配置预览 配置说明 要读取的文件 支持T或# 读取配置文件的路径及名称&#xff0c;绝对路径。 配置文件类型 INI或XML两种选项供选择。 编码 写入配置文件的编码&#xff0c;以列表方式供选择&am…

电子应用设计方案104:智能家庭AI弹簧床系统设计

智能家庭 AI 弹簧床系统设计 一、引言 智能家庭 AI 弹簧床系统旨在为用户提供更加舒适、个性化的睡眠体验&#xff0c;通过结合人工智能技术和先进的床垫设计&#xff0c;实时监测和调整睡眠环境&#xff0c;以满足不同用户的需求。 二、系统概述 1. 系统目标 - 自动适应用户…