Linux---编辑器vim的认识与简单配置

 前言

  我们在自己的电脑上所用的编译软件,就拿vs2022来说,我们可以在上面写C/C++语言、python、甚至java也可以在上面进行编译,这种既可以用来编辑、运行编译,又可以支持很多种语言的编译器是一种集成式开发环境,集众多于一身。

  而我们在Linux中,我们有自己的编辑器vim,也有自己的编译工具gcc/g++,各种功能独立,话说回来,当然是集成开发环境要更为方便,但是我们在初步学习Linux时,我们稳扎稳打比较好。

  这篇所主要讲的编辑器vim,是vi的升级版本,vi/vim的区别简单点来说,他们都是多模式编辑器,不同的是vim它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

vi/vim键盘图:

一、vim的基本概念

vim有三种模式,分别是命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

1、命令模式

  控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到底行模式。命令模式时在键盘上输入「i」键,即可进入插入模式,输入「 :」键,就会进入底行模式。

2、插入模式

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

3、底行模式

  文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,            「 :」键 即可进入该模 式。要查看你的所有模式:打开vim,底行模式直接输入。

我们用一张图来表示这三者之间的转换关系:

  我们只能从命令模式进入底行模式和插入模式,如果想要从插入模式进入底行模式或者想要从底行模式进入插入模式,那我们必须先回到命令模式,再进入另一个模式。

二、vim的基本操作

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

vim 文件名
注意:1、如果我们输入一个没有创建的文件,执行vim命令后会自动创建这个文件
           2、如果忘记输入文件名,直接vim之后我们按Esc进入命令模式,再输入‘ :’进入底行模式,最后再输入q!就可以退出了
  • 退出vim及保存文件

  在命令模式下,按一下「:」冒号键进入底行模式

  例如: : w (保存当前文件)

           : wq (输入「wq」,存盘并退出vim)

           : q! (输入q!,不存盘强制退出vim)

三、vim命令模式命令集

1、插入模式

  • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
  • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
  • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

2、移动光标

  • vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格
  • 按「G」:移动到文章的最后 按「$」:移动到光标所在行的“行尾”
  • 按「^」:移动到光标所在行的“行首”
  • 按「w」:光标跳到下个字的开头
  • 按「e」:光标跳到下个字的字尾
  • 按「b」:光标回到上个字的开头
  • 按「#l」:光标移到该行的第#个位置,如:5l,56l
  • 按[gg]:进入到文本开始
  • 按[shift+g]:进入文本末端
  • 按「ctrl」+「b」:屏幕往“后”移动一页
  • 按「ctrl」+「f」:屏幕往“前”移动一页
  • 按「ctrl」+「u」:屏幕往“后”移动半页
  • 按「ctrl」+「d」:屏幕往“前”移动半页

3、删除文字

  • 「x」:每按一次,删除光标所在位置的一个字符
  •   [#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
  • 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
  • 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
  • 「dd」:删除光标所在行并且带有剪切功能,可以和p联合使用
  • 「#dd」:从光标所在行开始删除#行

4、复制

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

5、替换

  • 「r」:替换光标所在处的字符
  • 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

6、撤销上一次操作

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

7、更改

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

8、跳至指定的行

  • 「ctrl」+「g」列出光标所在行的行号。
  • 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

四、vim底行模式命令集

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

1、列出行号

「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

2、跳到文件中的某一行

「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。

3、查找字符

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

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

4、保存文件

「w」: 在冒号输入字母「w」就可以将文件保存起来。

5、vim内执行Xshell命令

「!命令」: 进入底行模式后,输入!后再输入你要执行的命令,就可以直接执行

举例:我们简单的在vim里写下C语言打印Hello World代码,用编译工具gcc编译,我们之前都是退出vim后再对其进行编译,但是我们进入底行模式输入编译命令后按回车:

主屏幕上就会有这段话,我们再按回车

就会又回到vim命令模式

接下来我们./a.out进行编译:

Hello World已经打印在主要屏幕上了,之后再回车也可以再回到vim。

主要作用---查找函数

  也有人说这个功能比较鸡肋,在我们在vim里编写代码的时候,我们有时候忘记函数,我们需要查找,之前我们操作是退出vim,再输入指令<man+函数名>去进行查找。

  但是我们也可以直接在vim底行模式输入<!man+函数名>去查找,了解后再回车回到vim,更为方便。

6、创建多文件同时编写

  我们一般在写代码的时候,一般都会有头文件,源文件,我们在写的时候一般都是同时进行,总不能在源文件写完退出打开头文件再写,这样麻烦了。

  在底行模式有这样一个命令:

vs 文件名

我们在text.c文件里创建头文件text.h

创建完成,出现分屏界面,这时候光标在哪里就可以对哪个文件进行编写

切换光标的方式:CTRL+ww 按住CTRL连续按两次w就可进行光标的转换。

五、其它问题

1、如何批量化注释和批量化去注释

这个操作比较麻烦,但是总比一个一个注释好。

批量化注释步骤:

1、我们先在命令模式下按CTRL+v 进入该模式(VISUAL BLOCK)

2、然后按 j 键选中自己想要注释的行或 #j,#是数字,可以直接选中#行

3、选中之后,再按shift+i

4、输入// ,再按Esc两次

批量化去注释步骤:

1、我们先在命令模式下按CTRL+v 进入该模式(VISUAL BLOCK)

2、选中我们要去注释的行,与注释该步相同,但是需要注意的是,我们选中完之后再L一下,也就是向右移动,这样就会选中我们两列/。

3、按d删除即可。

2、如何解决历史问题,普通用户无法进行sudo提权

当我们想以一个普通用户的身份做一些sudo提权的命令时,通常会有这种情况:

它说我们没有在sudoers文件里,不可以进行sudo提权的操作。

那么我们如何将我们写进sudoers文件里呢?

步骤:

1、切换成root用户

2、打开目录下的sudoers

进入后是这样的:

大概在100行左右,我们找到该设置:

“Allow root to run any commands anywhere”允许root在任何地方运行让任何命令

3、我们直接yy复制root这行后粘贴到下一行,只把名字root改成我们普通用户的名字即可

4、保存退出

wq保存退出之后会有这个提示,不用担心,这个只是担心我们是不是误操作了,所以我们在wq后加!即可。

现在我们切回普通用户,验证我们可以进行sudo提权:

六、简单vim配置

在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

1、创建文件的位置

  • 在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下, 通常已经存在一个.vimrc文件,如果不存在,则创建之。
  • 切换用户成为自己执行su,进入自己的主工作目录,执行cd~
  • 打开自己目录下的.vimrc文件,执行 vim .vimrc

2、简单配置vim

  在.virmrc文件里,输入自己想要设置的配置,至于设置什么,那看你自己想要怎么设置,可以去百度搜索vim配置,会出现很多命令,复制粘贴到.vimrc文件里之后,保存打开要编写的文件,就发现已经配置的内容了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UIKit之图片浏览器

功能需求 实现一个图片浏览器&#xff0c;点击左右按钮可以切换背景图&#xff0c;且更新背景图对应的索引页和图片描述内容。 分析&#xff1a; 实现一个UIView的子类即可&#xff0c;该子类包含多个按钮。 实现步骤&#xff1a; 使用OC语言&#xff0c;故创建cocoa Touch类…

解决kali Linux安装后如何将语言修改为中文

开启虚拟机 用root用户进入终端 进入终端执行dpkg-reconfigure locales命令 选择en_US.UTF-8 UTF-8选项&#xff0c;按空格键将其取消。 选择zh_CN.UTF-8 UTP-8&#xff0c;按空格选择&#xff0c;按tab键选择ok。 选择zh_CN.UTF-8字符编码&#xff0c;按tab键选择ok&#xff0…

【JAVA】嵌入式软件工程师-2025校招必备-详细整理

一、Java 基础 1.JDK 和 JRE 有什么区别&#xff1f; jdk&#xff1a;java development kit jre&#xff1a;java runtime Environment jdk是面向开发人员的&#xff0c;是开发工具包&#xff0c;包括开发人员需要用到的一些类。 jre是java运行时环境&#xff0c;包括java虚拟机…

IDEA的妙用

IDEA 安装破解 复制JetbrainsIdesCrack-4.2.jar到安装目录下 修改安装目录下的bin目录的idea64.exe.vmoptions&#xff1a; 最后一行添加&#xff1a;-javaagent:E:\develop\JetBrains\IntelliJ IDEA 2018.3.5\bin\JetbrainsIdesCrack-4.2.jar(注意&#xff1a;使用自己的路…

(2)双指针练习:复写零

复写零 题目链接&#xff1a;1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入…

WebSocket or SSE?即时通讯的应用策略【送源码】

最近在研究H5推送&#xff0c;发现除了我们常用的WebSocket以外&#xff0c;其实还有一种协议也能实现H5推送&#xff0c;那就是SSE协议。 而且&#xff0c;当前主流的大模型平台&#xff0c;比如ChatGPT、通义千问、文心一言&#xff0c;对话时采用的就是SSE。 什么是SSE协议…

基于HTML5和CSS3搭建一个Web网页(一)

倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏&#xff0c;包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式&#xff0c;包括字体、颜色和背景颜…

识物扫一扫识别植物怎么做?6个软件教你轻松识别植物

识物扫一扫识别植物怎么做&#xff1f;6个软件教你轻松识别植物 识别植物可以通过专门的植物识别应用来实现。以下是六款可以帮助您轻松识别植物的软件&#xff1a; 1.一键识别王&#xff1a;这款软件有着强大的植物识别服务&#xff0c;用户可以通过拍照或上传图片来识别植物…

算法学习笔记(5.0)-基于比较的高效排序算法-归并排序

##时间复杂度O(nlogn) 目录 ##时间复杂度O(nlogn) ##递归实现归并排序 ##原理 ##图例 ##代码实现 ##非递归实现归并排序 ##释 #代码实现 ##递归实现归并排序 ##原理 是一种基于分治策略的基础排序算法。 1.划分阶段&#xff1a;通过不断递归地将数组从中点处分开&…

迷宫游戏(c++)

我们来玩一个迷宫游戏&#xff0c;尝试走一下面的迷宫。 迷宫游戏 我们用一个二维的字符数组来表示前面画出的迷宫&#xff1a; S**. .... ***T 其中字符S表示起点&#xff0c;字符T表示终点&#xff0c;字符*表示墙壁&#xff0c;字符.表示平地。你需要从S出发走到T&#xf…

【全开源】JAVA共享自习室共享学习室无人系统支持微信小程序+微信公众号+H5

开启智能学习新时代 随着社会的快速发展&#xff0c;人们对于学习环境的需求也日益增加。为满足这一需求&#xff0c;我们推出了“共享自习室系统源码”&#xff0c;旨在通过智能化的管理方式&#xff0c;打造高效、便捷、舒适的共享学习空间。 核心功能 自习室预约&#xf…

6. 网络编程-网络io与select、poll,epoll

https://0voice.com/uiwebsite/html/courses/v13.7.html 首先看看这个学习计划 网络、网络编程、网络原理基础组件&#xff0c;20个。中间件 Redis ,MySQL&#xff0c;Kafka&#xff0c;RPC&#xff0c;Nginx开源框架&#xff08;解决方案&#xff09;业务开发(工程师开发&am…

YOLOv9训练自己的数据集:最新最详细教程

一、代码及论文链接&#xff1a; 代码链接&#xff1a;https://github.com/WongKinYiu/yolov9/tree/main 论文链接&#xff1a;https://arxiv.org/abs/2402.13616 二、使用步骤 1.1 虚拟环境配置 创建一个虚拟环境用于单独对yolov9的环境进行配置&#xff1a; conda crea…

Java中的数组、Set、List、Map类型的互相转换总结

序言 数组、Set、List、Map是Java语言非常常用的几种数据类型&#xff0c;他们之间存在着千丝万缕的联系。关于底层的数据结构我这里就不再多说啦&#xff0c;直接从应用出发&#xff0c;总结他们之间的转换方法&#xff0c;并给出推荐方法。 大家可以点赞收藏等到需要的时候…

传说中的运维门户设计

在IT服务管理这片广阔天地中&#xff0c;运维门户如同一位技艺高超的魔术师&#xff0c;轻轻一挥手&#xff0c;便将纷繁复杂的运维世界化繁为简&#xff0c;编织成一张便捷高效、触手可及的网络。它不仅是ITSM系统中不可或缺的一环&#xff0c;更是连接用户与技术世界的桥梁&a…

【打字】打字训练之针对性键盘区域练习

本文章的核心点是&#xff1a;使用代码生成自己想要训练的键位的词汇&#xff0c;然后导入到打字软件针对性练习 一个程序员突然想纠正打字习惯源于腱鞘炎&#xff0c;虽然使用双拼打字已经不慢了&#xff0c;但是姿势不是很正确&#xff0c;导致了腱鞘炎。 所以想着好好纠正指…

就这?轻轻松松在RK356X Android11适配ML307R Cat.1模组

开源鸿蒙硬件方案领跑者 触觉智能 Industio 本文基于IDO-SXB3568主板&#xff0c;介绍Android11平台上适配中移物联ML307R Cat.1 4G模组的方法。该方法适用于触觉所有RK356X的主板。 IDO-SXB3568是触觉智能推出的RK3568行业主板&#xff0c;预计6月上旬正式上架售卖。该行业主…

Docker安装Mosquitto

在物联网项目中&#xff0c;我们经常用到MQTT协议&#xff0c;用MQTT协议做交互就需要部署一个MQTT服务&#xff0c;而mosquitto是一个常用的MQTT应用服务&#xff0c; Mosquitto是一个实现了消息推送协议MQTT v3.1的开源消息代理软件。MQTT&#xff08;Message Queuing Teleme…

【淘宝超高价女装】电商最好项目:一单赚1000多

课程目录 01.【超高价女装】项目介绍实操案例 02.【超高价女装】找款&#xff1a;配得上1000多的款式 03.【超高价女装】软件上款&#xff1a;600个款为底 04.【超高价女装】标题&#xff1a;能卖1000多的标题 05.【超高价女装】销量布局&#xff1a;主推款做销量评价 06…

【python量化交易】—— Alpha选股策略 - Qteasy自定义交易策略【附源码】

使用qteasy创建并回测Alpha选股交易策略 使用qteasy创建并回测Alpha选股交易策略策略思想第一种自定义策略设置方法&#xff0c;使用持仓数据和选股数据直接生成比例交易信号PS信号&#xff1a;第二种自定义策略设置方法&#xff0c;使用PT交易信号设置持仓目标&#xff1a;第三…