【Linux 】开发利器:深度探索 Vim 编辑器的无限可能

🔥 个人主页:大耳朵土土垚
🔥 所属专栏:Linux系统编程

这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉

文章目录

  • 1. vim的基本概念
  • 2. vim的基本操作
  • 3. vim正常模式命令集
  • 4. vim底行模式命令集
  • 5. vim的简单配置
  • 6. 结语

1. vim的基本概念

  Vim是一款强大的文本编辑器,常用于在终端环境下编辑文本文件。Vim有多种工作模式,包括普通模式、插入模式、可视模式等12种模式。其中,我们需要掌握三种最常用的模式,分别是命令模式(Normal mode)、插入模式(Insert mode)和底行模式(last line mode)。

  • 正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode下。

  • 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

  • 底行模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。

2. vim的基本操作

1)进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:

vim [文件名]

有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文字

如下图所示:

在这里插入图片描述

使用vim打开test.c文件,进入正常模式:

在这里插入图片描述

这时想要退出就必须输入shift+;也就是切换到底行模式,在底行输入q回车才能退出:

在这里插入图片描述

2)三种模式切换

  1. 【正常模式】切换至【插入模式】:a/i/o
  • 输入a:在当前光标的后一位置进入插入模式
  • 输入i:在当前光标处进入插入模式
  • 输入o:在当前光标处新起一行进入插入模式
  1. 【插入模式】切换至【正常模式】:Esc
     目前处于插入模式,就只能一直输入文字,要想回到正常模式可以按一下Esc键,如果想进入底行模式也只能先转回正常模式,再通过正常模式切换至底行模式。

  2. 【正常模式】切换至【底行模式】:shift + ;

其实就是输入:

 退出vim及保存文件,在底行模式下输入:

  • w (保存当前文件)
  • q(不保存直接退出vim)
  • wq (存盘并退出vim)
  • q! (不存盘强制退出vim)
  • wq!(强制保存并退出vim)

  1. 【底行模式】切换至【正常模式】:Esc
     如果想从底行模式进入插入模式也只能先转回正常模式,再通过正常模式切换至插入模式。

三种模式切换示意图如下:

在这里插入图片描述


3. vim正常模式命令集

【移动光标】
  1)按「h」:将光标往左移动
  2)按「 j」:将光标往下移动
  3)按「k」:将光标往上移动
  4)按「l」:将光标往右移动

在正常模式下vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格

  5)按「Shift+g」:移动到文章的最后
  6)按「 $ 」:移动到光标所在行的“行尾”
  7)按「^」:移动到光标所在行的“行首”
  8)按「w」:光标跳到下个字的开头
  9)按「e」:光标跳到下个字的字尾
 10)按「b」:光标回到上个字的开头
 11)按「#l」:光标移到该行的第#个位置,如:5l,56l
 12)按[gg]:进入到文本开始
 13)按「n+Enter」:当前光标向下移动n行

【翻页】
 1)按「ctrl」+「b」:屏幕往“后”移动一页
 2)按「ctrl」+「f」:屏幕往“前”移动一页
 3)按「ctrl」+「u」:屏幕往“后”移动半页
 4)按「ctrl」+「d」:屏幕往“前”移动半页

【删除】
 1)「x」:每按一次,删除光标所在位置的一个字符
 2)「#x」:例如,「6x」表示删除光标所在位置的后面(包含自己在内的)6个字符
 3)「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
 4)「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
 5)「dd」:删除光标所在行
 6)「#dd」:从光标所在行开始删除#行

【复制】
 1)「yw」:将光标所在之处到字尾的字符复制到缓冲区中
 2)「#yw」:复制#个字到缓冲区
 3)「yy」:复制光标所在行到缓冲区
 4)「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字
 5)「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能

【替换】
 1)「r」:替换光标所在处的字符
 2)「R」:替换光标所到之处的字符,直到按下「ESC」键为止

【撤销】
 1)「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复
 2)「ctrl + r」: 撤销的恢复

【更改】
 1)「cw」:更改光标所在处的字到字尾处
 2)「c#w」:例如,「c3w」表示更改3个字

【大小写切换】
 1)按「~」:完成光标所在位置字符的大小写切换
 2)按「n~」:完成光标所在位置开始往后的n个字符的大小写切换

【跳至指定行】
 1)「ctrl」+「g」列出光标所在行的行号
 2)「#G」:例如,「15G」,表示移动光标至文章的第15行行首

【注释/取消注释选中行】
 1)按下Ctrl+v、上下移动选中行、按下Shift+i、输入注释符号//、按下Esc即可多行注释
 2)按下Ctrl+v、上下移动选中行、按下d即可取消注释

4. vim底行模式命令集

在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。

【行号设置】
 1)「set nu」:显示行号
 2)「set nonu」:取消行号

【跳转】
 1)「#」:跳到文件中第#行

【查找字符】
 1)「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止
 2)「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止

在Vim中,?和/都用于查找字符。它们的区别在于:

  • 使用?:按下?后,你需要在命令行中输入你想要查找的字符(或字符串),然后按下回车键。Vim会从当前光标位置开始向上查找与输入匹配的内容。
  • 使用/:按下/后,你需要在命令行中输入你想要查找的字符(或字符串),然后按下回车键。Vim会从当前光标位置开始向下查找与输入匹配的内容。

【保存退出】
 1)「w」:保存文件
 2)「q」:退出vim,如果无法离开vim,可在「q」后面跟一个「!」表示强制退出
 3)「wq」:保存退出

【分屏指令】
 1)「vs 文件名」:实现多文件的编辑
 2)「Ctrl+w+w」:光标在多屏幕下进行切换

【执行指令】
 1)「!+指令」:在不退出vim的情况下,可以在指令前面加上「!」就可以执行Linux的指令,例如查看目录、编译当前代码等


5. vim的简单配置

1)配置文件的位置
  在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效:
在这里插入图片描述

  而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,就创建一个,然后我们就可以在自己目录下的vimrc文件中加入需要的配置🥳🥳

例如下图在普通用户tutu目录下没有存在.vimrc文件,所以如果我们想自己配置vim,就需要手动创建一个:

在这里插入图片描述


2)常用配置选项
【设置语法高亮】: syntax on
【显示行号】: set nu
【设置缩进的空格数为4】: set shiftwidth=4

例如:

我们使用vim打开刚刚创建的.vimrc文件,然后在插入模式下输入set nu显示行号,并保存退出:

在这里插入图片描述

当我们使用vim打开test.c文件时:

在这里插入图片描述

发现配置行号后再使用vim打开test.c文件就显示出了行号,大家也可以根据自己的喜欢进行个性化配置

以下是一些常见的Vim配置指令:

  1. 设置颜色主题:在.vimrc文件中添加如下指令:

    colorscheme <主题名称>
    

    可以在.vim目录下的colors目录中找到可用的主题文件。

  2. 设置缩进:在.vimrc文件中添加如下指令:

    set tabstop=<缩进宽度>
    set shiftwidth=<缩进宽度>
    set expandtab
    

    这个例子将缩进宽度设置为4,将Tab键转换为空格,使得Tab键按下时插入的是4个空格。

  3. 设置行号:在.vimrc文件中添加如下指令:

    set number
    

    这个指令会在每一行前显示行号。

  4. 设置自动补全:在.vimrc文件中添加如下指令:

    set completeopt=menuone,longest
    

    这个指令将打开自动补全菜单,当有多个候选项时,会自动显示菜单。

  5. 设置搜索高亮:在.vimrc文件中添加如下指令:

    set hlsearch
    

    这个指令会在搜索时高亮显示匹配的文本。

  6. 设置语法高亮:在.vimrc文件中添加如下指令:

    syntax on
    

    这个指令会启用语法高亮功能。

  7. 设置文件编码:在.vimrc文件中添加如下指令:

    set encoding=utf-8
    

    这个例子将文件编码设置为UTF-8。

请注意,在修改.vimrc文件后,需要重新启动Vim或者重新加载配置文件才能生效。可以使用如下命令重新加载.vimrc文件:

:source ~/.vimrc

6. 结语

  Vim有非常丰富的功能,可以根据具体需求进行扩展和定制。初学者可能需要一些时间来适应Vim的操作方式,但一旦掌握了Vim的一些基本操作,它将成为你在终端环境下高效编辑文本的利器。

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

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

相关文章

CANopen从站为什么总不上传PDO报文?

在CANopen网络中无法获取从站的TPDO数据&#xff1f;本文将为您解析可能的原因及解决方案。通过检查TPDO的通信参数和传输类型&#xff0c;确保主站与从站的数据同步&#xff0c;快速定位问题所在。 如果你的CANopen网络中已经确保接线和波特率都没有问题&#xff0c;但无论主站…

数学建模 第一讲 - 概论

一、什么是数学模型 一个栗子 例 1.1 一只装满水的圆柱型桶&#xff0c;底半径为 1米&#xff0c;高为 2米&#xff0c;底部有一直径为 0.1 米的洞。问桶流空要多少时间? 数学模型是对于一个特定的对象为了一个特定目标&#xff0c;根据事物的内在规律&#xff0c;作出一些必…

vs2022快捷键异常不起作用解决办法

安装了新版本的vs2022&#xff0c;安装成功后&#xff0c;发现快捷键发生异常&#xff0c;之前常用的快捷键要么发生改变&#xff0c;要么无法使用&#xff0c;比如原来注释代码的快捷键是ctrlec&#xff0c;最新安装版本变成了ctrlkc&#xff0c;以前编译代码的快捷键是F6或者…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述

简介 此前的专栏介绍Onesearch1.0和2.0&#xff0c;详情参考4 参考资料&#xff0c;本文解释onesearch 3.0&#xff0c;从Elasticsearch6升级到Elasticsearch8代码实现 &#xff0c;Elasticsearch8 废弃了high rest client&#xff0c;使用新的ElasticsearchClient&#xff0c;…

Java | Leetcode Java题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; class Solution {public int strongPasswordChecker(String password) {int n password.length();int hasLower 0, hasUpper 0, hasDigit 0;for (int i 0; i < n; i) {char ch password.charAt(i);if (Character.isLowerCase(ch))…

BUUCTF-MISC-另外一个世界

下载题目文件解压获得一张jpg格式图片 按照经验&#xff0c;排查了文件中是否隐写了flag字段等&#xff0c;并未发现线索 但是把十六进制打开的文件翻到文章底部可以发现一段二进制数字 这段数字正好为56位&#xff0c;八位二进制可以转换成一位ASKII码&#xff0c;这里我怀疑他…

【devops】devops-ansible之介绍和基础使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

SpringCloud构建工程

一、新建数据库和表&#xff0c;并填写测试数据 二、创建父级工程 1、创建maven工程 2、工程名字OfficeAutomation 3、pom.xml文件中添加依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.encodin…

【PHP源码】匿名来信系统H5版本V1.0免费开源源码(含搭建教程)

你的匿名来信H5一封你的来信源码/表白祝福短信程序/往来信/传话短信源码支持邮件发信与手机短信发信“你的匿名来信”是最近某音上爆火的一个活动话题&#xff0c;可以通过H5网站&#xff0c;编辑自己想要对某人说的话或者祝福&#xff0c;网站会把您想说的发给您预留的号码&am…

Java 数据结构 最小栈的实现

在O&#xff08;N&#xff09;时间复杂度内找出最小值&#xff1a; 创建两个栈当普通栈只有一个数据时&#xff0c;把该数据放入最小栈往普通栈放入数据时&#xff0c;把要放入的数据和最小栈的栈顶数据相比较&#xff0c;若要放入的数据比最小栈的栈顶数据小&#xff0c;则把…

单元测试和unittest框架(超详细总结)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&am…

上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用

前言 本教程涉及基础相机的原理&#xff0c;使用&#xff0c;标定&#xff0c;和读取。(注&#xff1a;本教程默认大家有ROS1基础&#xff0c;故不对程序进行详细解释) 上一期&#xff1a;[csdn博客]上手一个RGBD深度相机&#xff1a;从原理到实践–ROS noeticAstra S&#xf…

Python 低层多线程接口_thread的用法

_thread是python标准库中的一个低层多线程API&#xff0c;可以在进程中启动线程来处理任务&#xff0c;并且提供了简单的锁机制来控制共享资源的同步访问。本文就_thread模块的用法和特性做个简单的演示。 文章目录 一、进程和线程的区别二、_thread模块的用法2.1 派生线程2.2…

ElasticsearchRestTemplate DSL日志打印

ElasticsearchRestTemplate DSL日志打印 痛点解决方案打印基础文档查询信息打印最终DML语句 痛点 在使用 ElasticsearchRestTemplate 进行数据操作时&#xff0c;经常遇到的一个问题是线上问题排查困难。具体来说&#xff0c;在线上环境中&#xff0c;当出现问题时&#xff0c…

vue项目中——如何用echarts实现动态水球图

有时候UI的脑洞真的很大&#xff0c;总是设计出一些稀奇古怪的图形&#xff0c;但又不得不佩服他们的审美&#xff0c;确实还挺好看的。今天给大家介绍echarts如何实现动态水球图。如图所示&#xff1a; 实现步骤 一、引入 在vue页面中引入echarts&#xff0c;如未安装需要先…

Java面试篇基础部分-Synchronized关键字详解

Synchronized关键字用于对Java对象、方法、代码块等提供线程安全操作。Synchronized属于独占式的悲观锁机制,同时也是可重入锁。我们在使用Synchronized关键字的时候,可以保证同一时刻只有一个线程对该对象进行访问;也就是说它在同一个JVM中是线程安全的。   Java中的每个…

Golang | Leetcode Golang题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; func strongPasswordChecker(password string) int {hasLower, hasUpper, hasDigit : 0, 0, 0for _, ch : range password {if unicode.IsLower(ch) {hasLower 1} else if unicode.IsUpper(ch) {hasUpper 1} else if unicode.IsDigit(ch)…

TLC/TK Adv学习笔记1 - Py版本+美化

Python下重点 tkinter.ttk 模块自 Tk 8.5 开始引入&#xff0c;它提供了对 Tk 风格的部件集的访问。 它还带来了一些额外好处包括在 X11 下的反锯齿字体渲染和透明化窗口&#xff08;需要有 X11 上的混合窗口管理器&#xff09;。 tkinter.ttk 的基本设计思路&#xff0c;就是…

【Python】探索 Errbot:多功能聊天机器人框架

不是旅行治愈了你&#xff0c;是你在路上放过了自己。 在当今的数字化时代&#xff0c;聊天机器人已成为企业与客户互动、提升工作效率和增加乐趣的重要工具。Errbot是一个高度可扩展的聊天机器人框架&#xff0c;它允许开发者使用Python轻松创建和定制机器人。本文将介绍Errb…

乐观锁、悲观锁及死锁

乐观锁、悲观锁 1.概念 悲观锁(悲观锁定)&#xff1a;具有强烈的独占和排他特性。在整个执行过程中&#xff0c;将处于锁定状态。悲观锁在持有数据的时候总会把资源或者数据锁住&#xff0c;这样其他线程想要请求这个资源的时候就会阻塞&#xff0c;直到等到悲观锁把资源释放为…