从0开始linux(5)——vim

欢迎来到博主的专栏:从0开始linux
博主ID:代码小豪

文章目录

    • vim的多种模式
      • 底行模式命令
      • 命令模式
      • 视块模式(visual block)
    • vim的配置

vim是linux系统的文本编辑器。就像windows的记事本一样。

使用vim指令可以使用vim打开一个文本文件。
vim [文件名]

比如,我们可以使用lysb666(普通用户)在/home/lysb666下创建一个code.c文件

touch code.c
vim code.c

此时,我们将code.c文件以vim打开。
在这里插入图片描述

vim的多种模式

vim本身有多种模式,但是常用的模式主要有三种,掌握这三种模式就可以基础使用vim编辑器了。如果有用上其他模式的场景,博主再进行补充。

当我们刚打开code.c时,并不能对该文件进行文本编写。这是由于vim有三种模式。

  • 在默认情况下,vim处于命令模式,此时我们只能使用命令对vim进行操作
  • 在命令模式下,输入i可以进入插入模式。在插入模式中,我们可以对文件进行文本编辑。
  • 在命令模式下,输入:(shirt+;),可以进入底行模式,在底行模式当中可以输入指令让vim编辑器进行打开其他文件,保存并退出,等操作。
  • 当我们处于插入模式或底行模式时,按下esc可以回退到命令模式。

在这里插入图片描述
现在我们在命令模式下输入i进入插入模式,并且写上一个简单的代码。
在这里插入图片描述
在插入模式下,可以使用vim进行文本编辑,因此插入模式的功能很简单,现在我们按下esc回退到命令模式,然后shirt+;进入底行模式。

底行模式命令

进入底行模式后,光标会来到最底行,我们就可以在底行输入命令让vim进行对应操作。
在这里插入图片描述
比如:
[w]:保存文件
[q]:退出vim
[wq]:w和q的组合命令,保存并退出vim
[set number]:让文本显示行号,输入简写[set nu]也是同样的操作。
在这里插入图片描述

[no number]:让文本不显示行号,输入[no nu]也行
[n]输入一个数字n,让光标跳转到第n行。比如输入5,就会跳转到第5行
在这里插入图片描述
[/ string]输入/,并在后面写上一个字符串,会跳转到第一个重复的字符串,并且将其余相同的字符串高亮显示,为了演示这个操作,博主将printf(“hello world”)复制粘贴了十行,如果在底行中输入/hello,那么文本当中将hello字符串显示高亮,按下[n]键光标会跳转到下一个hello上。
在这里插入图片描述
[? string]输入?,并且写上一个字符串,会跳转搭配第一个重复的字符串,相同的字符也会高亮,但是按下[n]键,光标会跳转到上一个相同的字符串上。

多窗口模式
有时候需要同时对两个文件进行操作(比如将一个文件的部分内容,复制到另外一个文件当中)。如果我们要频繁的关闭,打开其他文件,还是非常不舒服的,如果能像我们使用windows打开浏览器的时候一样,可以多个窗口,那样不就方便许多了吗?
[vs]vs+文件名可以在多窗口的情况下对两个文件进行操作,比如博主这里创建一个空的文件名为text.txt。

在底行模式中输入vs text.txt,可以多窗口的打开text。txt和code.c文件。
在这里插入图片描述
由于窗口有多个。而光标只有一个,有时候我们需要让光标跳转到其他文件当中进行操作
[ctrl+w+w]:光标跳转到下一个文件

此时,我们可以尝试将code.c的内容复制粘贴到text.txt文件当中。
在这里插入图片描述
命令操作

命令模式

在插入模式当中,除了esc键,其余按键都会被当做数据输入,而在底行模式当中,除了esc键,其余按键都会当成指令。因此,只有命令模式才能用按键作为命令进行操作。

光标移动按键
[h]:向左移动一个字符,相当于(←)键
[j]:向下移动一个字符,相当于(↓)键
[k]:向上移动一个字符,相当于(↑)键
[L]:向右移动一个字符,相当于(→)键

一个一个字符移动还是很麻烦的,我们可以在这些按键之前加上数字,比如输入20j,即光标向下移动20个字符
[shift+h]:光标移动到第一行的第一个字符
[shift+g]:光标移动到最后一行的第一个字符
[n+gg]:光标移动到第n行,比如3gg就移动到第三行,而gg则相当于1gg,即移动到第一行
[shift+4]:光标移动到行尾
[shift+6]:光标移动到行首

修改操作
如果修改文本只会在插入模式当中一个一个字符操作,那么肯定会很痛苦的,我们可以在命令模式下进行一些批量的修改操作
[x]:删除当前光标的字符(相当于delete键)n+x则可以批量的删除字符,比如10x,相当于delete10次
[shift+x]删除光标以前的字符(相当于bacjspace键)也可以n+shift+x,同理。
[dd]:剪切光标指向的一行,n+dd则将光标以下的n行进行剪切,比如20dd则是剪切光标以下20行的数据
[yy]:复制光标指向的一整行,可以n+yy批量复制,同上。
[p]将剪切或复制的内容粘贴到当前光标指向的下一行,可以n+p,即将复制的内容连续粘贴20次。
[shift+p]:将剪切或复制的内容粘贴到当前光标指向的上一行,可以n+shift+p,同上
[u]撤销上一次的操作。类似于word当中的ctrl+z。
[ctrl+r]回到上一次的操作。

视块模式(visual block)

在命令模式下,对于文本的操作都是以行为单位的操作,如果想要像windows一样对块进行操作,就要用上vim的视块模式。
在这里插入图片描述
按下[v]进入视图模式,按下[ecs]回到命令模式。

在视图模式下,输入不同的命令会有不同的功能:
[v]:将光标经过的字符进行旋转:类似于上面的操作
[shift+v]:将光标经过的行进行选择,如下:
在这里插入图片描述
这些变色处理的字符就是选中的文字。
[ctrl+v]:块选择,如下:
在这里插入图片描述

[y]将选中的字符进行复制
[d]:剪切选中字符
[p]:粘贴刚刚复制或剪切的字符

批量修改文本
如果我们想要注释掉一整段代码,如果一行一行输入是不是有点太慢了。我们在视块模式下,[ctrl+v]进入块选择模式,选中我们要加上注释的位置,然后[shift+i]进入插入模式,写上//,然后按两次esc,批量注释就搞定了。
在这里插入图片描述

注意左下角的状态变化

vim的配置

如果我们熟悉了用vs2022这种集成开发环境,那么使用vim这种比较原始的工具肯定不太适应的,不过好在在网上可以找到vim的插件。

比如自动缩进,自动补齐,以及文本高亮之类的功能,能让我们在使用vim编程的时候更有效率。比如博主的vim配置就是这样的:
在这里插入图片描述

关于vim的配置方案,大家在网上根据自己的需求寻找就行。

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

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

相关文章

5G Multicast/Broadcast Services(MBS) (四)

这篇是有关MBS RRC相关的一些基本内容,内容不多,但是感觉很关键,主要包括SI,MBS网络侧相关的内容,L2 协议架构,cell reselection prioritity以及MBS接收的一些内容,希望有帮助。 SI 在MBS场景中,SI和常规5G一样分为Minimum SI和Other SI。Minimum SI是MIB和SIB1,Min…

程序员画图神器,开源

https://github.com/jgraph/drawio 开源、免费、简洁、方便的画图工具,可作为visio或亿图的替代品 drawio简介 在流程图、思维导图、UML图等图表绘制领域,draw.io可以说是一款优秀和受欢迎的在线作图工具。draw.io由JGraph开发,完全开源,拥有超过3万个GitHub Star…

芯片仓管系统主要适用场景有哪些

随着科技产业的飞速发展,芯片作为电子设备的核心部件,其库存管理成为了企业运营中不可或缺的一环。芯片仓管系统,作为专为高效、精准管理芯片库存而设计的信息化工具,正逐步在多个关键领域展现出其不可或缺的价值。那么&#xff0…

APScheduler、Django、Python实现定时任务,以及任务操作

环境:Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景:工作需要使用且用法较为复杂,各种功能基本都使用了 事件:20240920 说明:记录,方便后期自己查找 1、搭建基础环境 文件结构图…

免费分享一套SpringBoot+Vue火车票订票管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue火车票订票管理系统,分享下哈。 项目视频演示 【免费】SpringbootVue火车票订票管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 传统办法管理信息首先需要花费的时间比较多&…

基于Springboot个性化图书推荐系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

优思学院|TQM和ISO9001有什么关系?

TQM 和 ISO 9001有什么关系?我们把这个问题交给AI,它的回答是: 老实说,说它答错,又不算是错,但说它答对,也不算,总之就是一种模凌两可的感觉。 为什么会这样?因为管理中…

【gradio介绍】Python 可视化 web 神器---gradio介绍

Gradio是一个开源的Python库,专为帮助开发者快速搭建和分享机器学习模型、API或任意Python函数的用户界面(UI)而设计。它基于FastAPI和Svelte,是一个易于部署且功能强大的Web界面构建工具,特别适用于展示和测试机器学习…

在产品上扩大库存?教你一招!全开源!

几乎所有人都会遇到的头疼问题:内存不够,因为很多照片、音频、文档药存储。。。 我们都知道芯片的储存都是寸土寸金的,内部不够只能外扩! 有没有简单一点的方法呢?实在不想编写各种驱动,替换Flash&#x…

探索未来:MultiOn,AI的下一个革命

文章目录 探索未来:MultiOn,AI的下一个革命背景:为什么选择MultiOn?MultiOn是什么?如何安装MultiOn?简单的库函数使用方法场景应用常见问题及解决方案总结 探索未来:MultiOn,AI的下一…

conda环境下module ‘numba.types‘ has no attribute ‘Macro‘问题解决

1 问题描述 conda环境下运行数据处理&#xff0c;报出如下错误&#xff1a; Traceback (most recent call last):File "train_preprocess.py", line 13, in <module>import audioFile "/opt/service/lipsync/audio.py", line 1, in <module>…

增强网络威胁防御能力的云安全新兴技术

一些行业专家强调了基于云的运营的独特网络安全需求&#xff0c;并指出保护敏感数据与传统的本地网络不同。尽管新兴技术并没有改变网络安全专业人员与犯罪分子之间持续的斗争&#xff0c;但它们提高了赌注&#xff0c;使斗争变得更加复杂。 如今&#xff0c;我们面对的是技术…

药用植物的空间多组学:从生物合成途径到工业应用-文献精读51

Spatial multi-omics in medicinal plants: from biosynthesis pathways to industrial applications 药用植物的空间多组学&#xff1a;从生物合成途径到工业应用 摘要 随着分子测序和成像技术的快速发展&#xff0c;药用植物的多组学研究进入了单细胞时代。我们讨论了空间多…

西安云仪:心无旁骛做实业 精益求精造仪表

仪器仪表&#xff0c;被誉为工业生产的“倍增器”&#xff0c;是国家测量精度和科技发展水平的重要体现。近年来&#xff0c;我国仪器仪表产业正在稳步增长。据统计&#xff0c;2023年实现营收10112亿元&#xff0c;正式进入万亿元时代&#xff0c;部分高端产品已经达到或接近国…

阿里云「通义灵码」迎来重磅升级,「AI 程序员」正式亮相!

最近两年&#xff0c;随着大语言模型和生成式 AI 技术的爆火&#xff0c;软件开发领域首当其冲成为了最热门的大模型应用场景之一&#xff0c;GitHub Copilot、通义灵码等 AI 辅助编程工具纷纷问世。这些工具通过自然语言处理和机器学习技术&#xff0c;能够理解开发者的意图&a…

USB转8路串口 USB转8路RS232 USB转8路TTL

一、功能描述 本模块采用CH348Q芯片作为主芯片&#xff0c;CH348 是一款高速 USB 总线的转接芯片&#xff0c;实现USB转八个异步串口UARTA/B/C/D/E/F/G/H 功能&#xff0c; 用于为计算机扩展异步串口&#xff0c;或者将普通的串口设备或者MCU直接升级到USB总线。外加4颗MAX323…

Leetcode 每日一题:Diameter of Binary Tree

写在前面&#xff1a; 最近被学校的 campus involvement 社团活动的招新宣传和选拔&#xff0c;以及找工作频繁的参加招聘会和网上申请忙的焦头烂额&#xff0c;马上又要到来的期中考试让我再次意识到了大学生活的险恶。虽然大家都说学生时代是最幸福的时代&#xff0c;但这个…

Vue3使用通信组件库mitt作为事件总线实现跨组件通信

mitt 介绍: Mitt 是一个在 Vue.js 应用程序中使用的小型事件总线库。该库允许组件进行通信&#xff0c;而不必过度依赖父级或子级组件之间的 props。 先看项目用例&#xff1a; 【 以下转载自&#xff1a;https://blog.csdn.net/yuanlong12178/article/details/139579299 】…

无人机飞手教员培训持证,必须会组装,模拟,维修才能带好学员

无人机飞手员的教培训不应仅仅局限于获取飞行执照或证书&#xff0c;而应是一个全面等多、方面的深入能力且&#xff0c;实践以确保导向能够的过程全面。、一个有效地合格的指导无人机学员飞。手教员不仅需要掌握扎实的飞行技能&#xff0c;还需要具备组装、模拟训练、维修。 组…

线性调频信号脉冲压缩并非是一个门信号

如果是频域是门信号&#xff0c;时域是sinc信号&#xff0c;时间越长震荡只会越小。图象是线性卷积做的&#xff0c;肯定没错。