当前位置: 首页 > news >正文

Linux下的编辑器 —— vim

目录

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配置成自己想要的样子!

相关文章:

Linux下的编辑器 —— vim

目录 1.什么是vim 2.vim的模式 认识常用的三种模式 三种模式之间的切换 命令模式和插入模式的转化 命令模式和底行模式的转化 插入模式和底行模式的转化 3.命令模式下的命令集 光标移动相关的命令 复制粘贴相关命令 撤销删除相关命令 查找相关命令 批量化注释和去…...

Docker技术相关学习二

一、Docker简介 1.Docker之父Solomon Hykes形容docker就像传统的货运集装箱。 2.docker的特点和优势: 轻量级虚拟化:Docker容器相较于传统的虚拟机更加的轻量和高效,能够快速的启动和停止来节省系统资源。 一致性:确保应用程序在不…...

【人工智能】多模态学习在Python中的应用:结合图像与文本数据的深度探索

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 多模态学习是人工智能领域的一个重要研究方向,旨在通过结合多种类型的数据(如图像、文本、音频等)来提高模型的性能。本文将深入探讨多模…...

【MySQL】常用语句

目录 1. 数据库操作2. 表操作3. 数据操作(CRUD)4. 高级查询5. 索引管理6. 用户与权限7. 数据导入导出8. 事务控制9. 其他实用语句注意事项 如果这篇文章对你有所帮助,渴望获得你的一个点赞! 1. 数据库操作 创建数据库 CREATE DATA…...

Docker网络基础

一、Docker网络基础 1.docker安装后会自动创建3中网络,分别为bridge host none docker network ls 2.docker原生bridge网络: docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口 bridge模式下没有公有ip,只有宿主机可以…...

重新刷题求职2-DAY2

977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后…...

[STM32 标准库]EXTI应用场景 功能框图 寄存器

一、EXTI 外部中断在嵌入式系统中有广泛的应用场景,如按钮开关控制,传感器触发,通信接口中断等。其原理都差不多,STM32会对外部中断引脚的边沿进行检测,若检测到相应的边沿会触发中断,在中断中做出相应的处…...

Slint的学习

Slint是什么 Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c,python,nodejs等语言。 开源地址:https://github.com/slint-ui/slint 镜像地址:https://kkgithub.com/…...

STM32 DMA+AD多通道

接线图 代码配置 ADC单次扫描DMA单次转运模式 uint16_t AD_Value[4]; //DMAAD多通道 void DMA_Config(void) {//定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量 ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量 DMA_InitTypeDef DMA_In…...

如何构建ObjC语言编译环境?构建无比简洁的clang编译ObjC环境?Windows搭建Swift语言编译环境?

如何构建ObjC语言编译环境? 除了在线ObjC编译器,本地环境Windows/Mac/Linux均可以搭建ObjC编译环境。 Mac自然不用多说,ObjC是亲儿子。(WSL Ubuntu 22.04) Ubuntu可以安装gobjc/gnustep和gnustep-devel构建编译环境。 sudo apt-get install gobjc gnus…...

【C语言】指针详解:概念、类型与解引用

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯指针的基本概念1. 什么是指针2. 指针的基本操作 💯指针的类型1. 指针的大小2. 指针类型与所指向的数据类型3. 指针类型与数据访问的关系4. 指针类型的实际意…...

VoIP中常见术语

在 VoIP(Voice over Internet Protocol,基于互联网协议的语音传输)技术中,涉及许多专业术语。以下是常见术语及其含义: 1. 核心协议相关 SIP(Session Initiation Protocol,会话发起协议&#xf…...

360嵌入式开发面试题及参考答案

解释一下 802.11ax 和 802.11ac/n 有什么区别 速度与带宽 802.11n 支持的最高理论速率为 600Mbps,802.11ac 进一步提升,单流最高可达 866.7Mbps,多流情况下能达到更高,如 1.3Gbps 等。而 802.11ax(Wi-Fi 6)引入了更多先进技术,理论最高速率可达 9.6Gbps,相比前两者有大…...

物理群晖SA6400核显直通win10虚拟机(VMM)

写在前面:请先确保你的核显驱动支持开启SR-IOV 确保你的BIOS开启了以下选项: VT-D VMX IOMMU Above 4G ResizeBAR 自行通过以下命令确认支持情况: dmesg | grep -i iommudmesg | grep DMAR分配1个虚拟vGPU:echo 1 | sudo tee /sy…...

【NLP 20、Encoding编码 和 Embedding嵌入】

目录 一、核心定义与区别 二、常见Encoding编码 (1) 独热编码(One-Hot Encoding) (2) 位置编码(Positional Encoding) (3) 标签编码(Label Encoding) (4) 注意事项 三、常见Embedding词嵌入 (1) 基础词嵌入…...

雷赛LC2000

【一,概述】 这个是中型PLC 【二,外观】 网口编号: 【2】【3】 //默认ip:192.168.1.xxx 【0】【1】 可视化授权不如禾川Q系。 【三,总线轴】 因为本次带的轴是台达A2系列伺服 A2最快总线是【1ms】的倍数…...

ESP32开发工具介绍:Thonny——初学者的MicroPython利器

文章目录 引言什么是 Thonny?为什么选择 Thonny 开发 ESP32?1. **MicroPython 的天然支持**2. **极简的配置流程**3. **适合快速原型开发**如何用 Thonny 开发 ESP32?步骤 1:准备工作步骤 2:烧录 MicroPython 固件步骤 3:在 Thonny 中连接 ESP32步骤 4:编写并运行代码Th…...

【Go语言圣经】第六节:方法

第六章:方法 6.1 方法声明 在函数声明时,在其名字之前放上一个变量,这就是声明了变量对应类型的一个方法,相当于为这种类型定义了一个独占的方法。 下例为 Point 类型声明了计算两个点之间距离的方法: package mai…...

【Leetcode刷题记录】45. 跳跃游戏 II--贪心算法

45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 num…...

mysql_init和mysql_real_connect的形象化认识

解析总结 1. mysql_init 的作用 mysql_init 用于初始化一个 MYSQL 结构体&#xff0c;为后续数据库连接和操作做准备。该结构体存储连接配置及状态信息&#xff0c;是 MySQL C API 的核心句柄。 示例&#xff1a; MYSQL *conn mysql_init(NULL); // 初始化连接句柄2. mysql_…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...