【Linux学习】Linux开发工具——vim

news2025/2/5 7:53:35

在这里插入图片描述

🔥个人主页: Forcible Bug Maker
🔥专栏:Linux学习

目录

  • 🌈前言
  • 🔥vim的基本概念
  • 🔥vim的基本操作
  • 🔥vim命令模式的命令集
  • 🔥简单vim配置
    • ⭐一键配置美观的vim
      • 安装方法
      • 卸载方法
  • 🔥结语

🌈前言

前言:Linux编辑器——vim的介绍和使用

vim 是一款在 Linux、Unix 以及类 Unix 系统(比如 macOS)上广泛使用的文本编辑器。它最初由 Bram Moolenaar 在 1991 年发布,作为 vi 编辑器的改进版。vi 编辑器是 Unix 系统上最早的屏幕编辑器之一,由 Bill Joy 在 1976 年为 BSD Unix 系统编写。
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。

🔥vim的基本概念

vim编辑器有很多种模式,目前主要介绍常用的三种,分别是 命令模式(Command mode)插入模式(Insert mode)底行模式(Last line mode),这三种模式的区别如下:

  • 命令模式:
    控制屏幕光标的移动,字符,字或行的删除,移动复制某区段及进入Insert mode,或者进入Last line mode。
  • 插入模式:
    只有在Insert mode下,才可以做文字输入,按[Esc]键可回到命令模式。
  • 底行模式:
    文件保存或退出,也可进行文件替换,找字符串,列出行号等操作。在命令模式下::符号,也就是shift + ;可以切换到底行模式。

也可以在底行模式下输入:help vim-modes查看更多的模式介绍。

🔥vim的基本操作

进入vim,在系统提示符号输入vim+文件名称之后,就可以进入vim全屏幕编辑画面:

$ vim test.c

在这里插入图片描述
在这里插入图片描述
需要注意的是,进入vim之后,首先处于[命令模式],需要切入到[插入模式]才能输入文字。

  • [命令模式]切换至[插入模式]
    • 输入i
    • 输入a
    • 输入o
  • [插入模式]切换至[命令模式]
    • [Esc]
  • [命令模式]切换至[底行模式]
    • [Shift + ;],其实就是输入[:]

退出vim并保存文件:

:w	->保存当前文件
:wq	->保存并退出
:q	->退出
:q!	->强制退出
:w!	->强制写入

在这里插入图片描述
这时候按回车键,test.c就成功被编辑并保存了。我们可以使用gcc编译这份代码并运行它。
在这里插入图片描述

🔥vim命令模式的命令集

  • 移动光标
    • vim虽然可以使用键盘上的[↑][↓][←][→]键来控制移动 ,但正规的vim是用小写英文字母[h][j][k][l],分别控制光标左,下,上,右移动一个。
    • 按[G]:移动到文本末尾
    • 按[gg]:移动到文本开始
    • 按[$]:移动到光标所在行的“行尾”
    • 按[^]:移动到光标所在行的“行首”
    • 按[w]:光标跳转到下个字(单词)的开头
    • 按[e]:光标跳转到下个字(单词)的结尾
    • 按[b]:光标回到上个字的开头
    • 按[Ctrl+b]:屏幕往“后”移动一页
    • 按[Ctrl+f]:屏幕往“前”移动一页
    • 按[Ctrl+u]:屏幕往“后”移动半页
    • 按[Ctrl+d]:屏幕往“前”移动半页
  • 删除文本
    • [x]:每按一次,删除光标所在位置的一个字符
    • [#x]:删除贯标在内的的往后#个字符
    • [X]:大写的x,每按一次,删除光标所在位置之前的一个字符
    • [#X]:删除光标所在位置之前的#个字符
    • [dd]:删除光标所在行
    • [#dd]:从光标所在行开始删除#行
  • 复制
    • [yw]:将光标所在之处到字尾的字符串复制到缓冲区中
    • [#yw]:复制#个字到缓冲区
    • [yy]:复制光标所在行到缓冲区
    • [#yy]:复制所在行开始的#行到缓冲区
    • [p]:将缓冲区内的字符粘贴到光标所在位置
  • 撤销操作
    • [u]:如果误执行一个命令,可以按[u],回到上一个操作
    • [Ctrl+u]:撤销的恢复。如果误执行一个撤销,可以按[Ctrl+u],回到撤销前的状态
  • 跳跃
    • [#G]:移动光标至文章的第#行行首

🔥简单vim配置

在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~打开自己目录下的.vimrc文件,执行vim .vimrc。
在里面可以设置常用配置,如:

  • 语法高亮:syntax on
  • 显示行号:set nu
  • 设置缩进空格数为4:set shiftwidth=4

再次用vim打开文件时,就会自动有相应的配置。给自己用户配置的不会影响别的用户。
如果想要配置好看的vim,原生的配置功能可能不全,可以选择安装插件来完善配置。在网上也可以查到更详细的配置选项。

⭐一键配置美观的vim

Gitee-配置vim

安装方法

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 “不推荐” 直接在 root 下执行):

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

卸载方法

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

配置结果展示:在这里插入图片描述
如果期间有什么配置觉得不顺手,也可以去当前用户下的.vimrc中调整相关配置。

🔥结语

本篇博客主要介绍了Linux开发工具——vim,同时讲解了其三种模式的基本使用,也简单介绍了如何配置vim。尽管 vim 的学习曲线可能比其他编辑器陡峭,但一旦掌握了它的基本操作和概念,你会发现它是一个非常强大和高效的文本编辑工具。

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

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

相关文章

秒懂Linux之文件

目录 前言 一. C文件接口 二. 文件系统调用接口 open接口​编辑 文件fd的分配规则 利用规则实现重定向 前言 在我们学习文件之前得先明白文件是什么? ——文件 内容 属性—— 文件是谁打开的呢? ——文件由进程调度打开,当然前提是文件…

keepalived保活nginx1,nginx2

1 下载两个小玩意 yum -y install keepalived yum install psmisc -y 2 配置nginx1,2自启脚本 vim /root/shell/check-nginx.sh 我的脚本放在root/shell里 #!/bin/bash #获取nginx正在运行的进程数 npsnumps -C nginx --no-header | wc -lif [ $n…

Unity AB包

AB包比对文件内容: ab包名 包大小 包内容md5字符串 编辑器功能-设置默认资源: 可以选择资源作为默认资源保存到StreamingAssets文件夹并且为他们生成资源对比文件1. 在Unity菜单中添加一个功能按钮触发该功能(MenuItem特性)2. 获取在Project窗口选择的资源信息(Selection类)3. …

【js引擎】如何使用 quickjs 把一个 js 值转换成 c 字符串

开发 js 运行时时,最重要的模块莫过于 console.log 了。有了它,才可以在 js 代码中打印日志。那么如何用 quickjs 引擎实现该模块呢? 实际上 quickjs 已经实现了一个 console 的模块 js_print 实现 其中使用了接口 str JS_ToCStringLen(c…

【Linux】Linux(centos7)安装jdk1.8

第一步:卸载系统自带的JDK rpm -qa|grep java # xxx yyy zzz为你要卸载的插件,插件之间以空格隔开 rpm -e --nodeps xxx yyy zzz 先卸载JDK 第二步:安装JDK1.8 安装JDK rpm -ivh jdk-8u172-linux-x64.rpm 第三步:查看是否安…

基于x86 平台opencv的图像采集和seetaface6的人脸检测功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的人脸检测功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的人脸检测模块从而实现…

特斯拉FSD软件进化史

特斯拉FSD软件进化史 01前言 特斯拉FSD自动驾驶是以摄像头为核心的纯视觉解决方案。 纯视觉方案的最初设计灵感来自对人类视觉的研究;即人眼睛搜集的信息到达视网膜后,经过大脑皮层的多个区域、神经层,最终形成生物视觉,并在脑…

Wyn商业智能助力零售行业数字化决策高效驱动

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 项目背景及痛点 百利商业的业务覆盖赛格、 SKP、奥莱、王府井等多地区具有代表性的商场,并创立了多个自有品牌。随着新零售模式的兴起,百利商业紧跟时代步伐&am…

集团数字化转型方案(六)

集团数字化转型方案旨在通过引入前沿技术,如人工智能(AI)、大数据分析、云计算和物联网(IoT),全面提升业务运营效率和市场竞争力。该方案首先实现业务流程的自动化,减少人工干预,通过…

python-求距离(赛氪OJ)

[题目描述] 给你一个 1−>n 的排列,现在有一次机会可以交换两个数的位置,求交换后最小值和最大值之间的最大距离是多少?输入格式: 输入共两行。 第一行一个数 n 。 第二行 n 个数表示这个排列。输出格式: 输出一行一…

嵌入式day28

线程退出 ---pthread_exit() 线程结束方式: 1.pthread_exit //pthread_join 2.从线程执行函数中return //此时等价于1 3.pthread_cancel //线程可以被取消 4.任何一个线程调用了exit 或者 主线程main函数return…

浮点数的使用

浮点运算 浮点,英文float point,其字面意义就是可以漂移的小数点(浮动的小数点),来表示含有小数的数值。 我们在数学运算中,经常会遇到无限小数,如1/3=0.333333…无限循环,然而计算机存储容量是有限的,需要舍弃掉一些精度,存储近似值。 讨论浮点精度的目的也是在于程…

Python酷库之旅-第三方库Pandas(090)

目录 一、用法精讲 381、pandas.Series.plot方法 381-1、语法 381-2、参数 381-3、功能 381-4、返回值 381-5、说明 381-6、用法 381-6-1、数据准备 381-6-2、代码示例 381-6-3、结果输出 382、 pandas.Series.plot.area方法 382-1、语法 382-2、参数 382-3、功…

嵌入式软件开发学习二:GPIO

Tips: 本文全部的TTL肖特基触发器应该均为施密特触发器,有些忘记改了。 资料来源:[3-1] GPIO输出_哔哩哔哩_bilibili 一、GPIO简介: GPIO(General Purpose Input Output)是指通用输入输出接口,…

GitLab Merge Request流水线

GitLab Merge Request 流程文档 为了提升代码质量,让开发人员参与代码review,现在输出Merge Request的流程文档: 1.项目创建各自开发者的分支,命名规则是dev_名字首字母,比如我是dev_cwq.然后把本地分支推到远端orgin…

数据库管理-第232期 初探OpenTenBase(20240819)

数据库管理232期 2024-08-19 数据库管理-第232期 初探OpenTenBase(20240819)1 OpenTenBase简介2 架构介绍3 集群规划4 部署集群4.1 操作系统配置4.2 数据库软件下载与安装4.3 配置集群4.4 分发软件4.5 启动数据库4.6 查看集群状态 5 访问数据库总结 数据…

Java并发常见面试题总结

文章目录 1 多线程1.1 进程、线程和协程的区别?🔥1.2 Java 线程和操作系统的线程有啥区别?1.3 如何创建线程?🔥1.4 runnable 和 callable 两个接口创建线程有什么不同呢?🔥1.5 如何停止一个正在…

2024.8.20

思维导图 C语言中指针数组和数组指针的区别 数组指针本质上是一个指针变量,用于存储整个数组的起始地址,指针每偏移一个单位,内存就会偏移整个数组的容量的大小,一般用于二维数组,二维数组的数组名,本质上是…

【可视化】封装滚动菜单列表组件

源码及源码分析 <template><!-- 滚动菜单的主要容器 --><div class"scrolling-menu"><!-- 如果headers数组有内容&#xff0c;就渲染表头 --><divclass"table-header"v-if"headers.length":style"{ backgroundC…

LLM向量嵌入知多少

向量嵌入是机器学习领域中一项引人入胜且极具实用性的技术。它们构成了众多自然语言处理&#xff08;NLP&#xff09;、推荐系统和搜索算法的基础。如果您曾经使用过推荐引擎、语音助手或语言翻译工具&#xff0c;那么您已经体验过嵌入技术的强大功能。 机器学习算法&#xff0…