Linux编辑器之vim的使用

文章目录

    • 一、vim简介
    • 二、vim的基本概念
    • 三、vim的基本操作
    • 四、vim正常模式命令集
      • 移动光标
      • 删除文字
      • 复制
      • 替换
      • 撤销上一次操作
      • 更改
      • 跳至指定的行
      • vim末行模式命令集
      • 列出行号
      • 跳到文件中的某一行
      • 查找字符
      • 保存文件
      • 离开vim
    • 五、进阶vim玩法
      • 打开文件
      • 批量注释代码
      • 执行shell命令
      • 指定注释
      • 窗口命令
      • 退出命令
    • 六、简单vim配置
      • 配置文件的位置
      • 常用配置选项,用来测试

一、vim简介

Vim是一个类似于Vi的高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线。 -->来自百度百科

二、vim的基本概念

  • 基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。

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

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

  • 插入模式(Insert mode)

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

  • 末行模式(last line mode)

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

在这里插入图片描述

三、vim的基本操作

  • 我们最一开始的输入vim test.c 的时候就是命令模式

在这里插入图片描述

  • 回车后进入了这个界面,这个界面就是命令模式

在这里插入图片描述

这里我的界面是这样的,大家可以看VimForCpp来配置一下自己vim,最后我会讲这个如何简单的自己配置一下~~

  • 在这个状态下按下键盘会被 vim 识别为命令
  • 比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。就会进入插入模式
  • 这个时候insert会亮起,这个时候就可以随便输入文字了

在这里插入图片描述

  • 那么我们退出的时候按下键盘上的Esc,在键盘上按下:wq【这里的操作一定是在英文模式下!】,然后回车
  • 这里的输入的模式叫做底行模式

在这里插入图片描述

  • 上面这三种方式就可以用下面的图来表示:

在这里插入图片描述

四、vim正常模式命令集

  • 首先用vim打开一个文件,这里我就打开一个以.c为后缀的文件
vim test.c
  • 按下i,就进入到插入模式了,这个时候就可以写任何想写的东西了

在这里插入图片描述

  • 这个时候我按下键盘上的Esc就进入到了命令模式
  • 我们来开始学习命令模式:

移动光标

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

  • shift+g:移动到文章的最后。也就是「G」
  • shift+4:移动到光标所在行的“行尾”。也就是「$」
  • shift+4:移动到光标所在行的“行首”。也就是「^」
  • 按「w」:光标跳到下个字的开头
  • 按「e」:光标跳到下个字的字尾
  • 按「b」:光标回到上个字的开头
  • 按「#l」:光标移到该行的第#个位置,如:5l,56l
  • 按[gg]:进入到文本开始
  • 按「ctrl」+「b」:屏幕往“后”移动一页
  • 按「ctrl」+「f」:屏幕往“前”移动一页
  • 按「ctrl」+「u」:屏幕往“后”移动半页
  • 按「ctrl」+「d」:屏幕往“前”移动半页

删除文字

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

复制

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

替换

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

撤销上一次操作

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

更改

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

跳至指定的行

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

vim末行模式命令集

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


列出行号

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

跳到文件中的某一行

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

查找字符

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

保存文件

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

离开vim

  • 「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
  • 「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

上面的都是简单的操作,需要烙铁们必须掌握~

五、进阶vim玩法

打开文件

同时打开多个文件

vim file1 file2 file3 ...

在vim窗口中打开一个新文件

:open file

在新窗口中打开文件

:split file

切换到下一个文件

:bn

切换到上一个文件

:bp

查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。

:args

打开远程文件,比如ftp或者share folder

:e ftp://192.168.10.76/abc.txt
:e \\qadrive\test\1.txt

批量注释代码

  • 我写了一些代码,但是我想注释掉,但是一行一行的注释很麻烦,如何批量注释呢?

在这里插入图片描述

  • 首先按下键盘上的ctrl+v,进入到这个视图

在这里插入图片描述

  • 然后再按键盘上的j也就是光标往下走了,选中

在这里插入图片描述

  • 继续按键盘上的shit+i也就是I,输入两个//

在这里插入图片描述

  • 最后再按Esc,就大功告成了~~

在这里插入图片描述

执行shell命令

  • 直接在底行模式输入:!+命令

指定注释

下面的#可以替换成需要注释的字符

注释第3-5行

3,5 s/^/#/g 

解除3-5行的注释

3,5 s/^#//g

注释整个文档

1,$ s/^/#/g

注释整个文档,此法更快

:%s/^/#/g
  • 这里教大家一个常用的命令
  • 其中 前面的%s是通配,然后跟上要匹配的字符,再跟上要替换的字符,g 表示全局范围内,s/printf/PRINTF/g 是替换的命令格式
:%s/printf/PRINTF/g 

在这里插入图片描述

  • 最后直接替换成功了~~

在这里插入图片描述

窗口命令

打开一个新窗口,光标停在顶层的窗口上

:split或new 

用新窗口打开文件

:split file或:new file 

打开的窗口都是横向的,使用vsplit可以纵向打开窗口

split

移动到下一个窗口

Ctrl+ww 

移动到下方的窗口

Ctrl+wj 

移动到上方的窗口

Ctrl+wk 

退出命令

保存并退出

:wq 

保存并退出

ZZ 

强制退出并忽略所有更改

:q! 

放弃所有修改,并打开原来文件。

:e! 

六、简单vim配置

配置文件的位置

  • 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。

  • 例如,/root目录下,通常已经存在一个**.vimrc文件,如果不存在,则创建之。
    切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~
    打开自己目录下的
    .vimrc**文件,执行 vim .vimrc

  • 这里我就新建一个用户来操作~~

在这里插入图片描述

常用配置选项,用来测试

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

在这里插入图片描述

在这里插入图片描述

  • 大家可以看VimForCpp来配置一下自己vim

最后本文简单的介绍了vim的概念以及如何操作,最后介绍了vim的配置

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

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

相关文章

harmony开发ohpm mac环境配置

Mac电脑 安装 Ohpm |HarmonyOS 安装 Ohpm ohpm环境配置好后,执行ohpm会报如下的错 ohpm has not been initialized yet. Execute the init script to initialize it first. 解决办法 鸿蒙OS开发,解决报错“ohpm has not been initialized yet…

关于Gitlab用户登录提示无限重定向循环ERR_TOO_MANY_REDIRECTS

#工作笔记# 查阅了网上所有相关的记录,都没有解决gitlab登录/users/sign_up/welcome提示ERR_TOO_MANY_REDIRECTS,好在最终解决了,记录在此。 先说下起因: github哼哼不想用了,原因太多,所以内部讨论用git…

3D人体运动重建

目录 MotioNet FLEX 人格网格重建: VirtualMarker 虚拟人体网格重建 GraMMaR 数据集: MotioNet https://github.com/Shimingyi/MotioNet FLEX https://github.com/BrianG13/FLEX 人格网格重建: CVPR2023:IDEA与清华提出首…

远程访问@HttpExchange

提示:这是SpringBoot3以上的新特性。 远程访问HttpExchange 一、webClient二、Http 服务接口的方法定义三、声明式 HTTP 远程服务1.组合使用注解2.使用单个注解3.定制 HTTP 请求服务 四、总结1.部分方法过时2.过时的方法详解 远程访问是开发的常用技术,一…

java中实现事务的两种方式:编程式事务和声明式事务

涉及到与数据库交互就必须会用到事务,如果一个方法中需要用到事务的地方没有使用事务就会造成数据不一致的风险,进而导致比较严重的bug,比如扣款时,账户的余额已经进行了扣减但是相应的订单没有生成,这种涉及账目的问题…

方法阻塞的解决方案之一

1、简单使用 一个h一个cpp文件 #pragma once #include <iostream> #include <thread> #include <atomic> #include <chrono> #include <string>class Person {public:struct dog {std::string name;int age;};public:void a(std::atomic<bo…

设计模式篇---备忘录模式

文章目录 概念结构实例总结 概念 备忘录模式&#xff1a;在不破坏封装的前提下捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;像这样可以在以后将对象恢复到原先保存的状态。 就好比我们下象棋&#xff0c;下完之后发现走错了&#xff0c;想要回退…

【C++】美感(beautiful)

题目描述 寿寿喜欢有美感的序列。 对于寿寿来说一个序列是有美感的&#xff0c;当且仅当这个序列每两个相邻的数的和是m的倍数。特别的&#xff0c;寿寿认为长度为1的序列也是具有美感的。 寿寿现在随便在纸上写了一个长度为n的序列a&#xff0c;这个序列目前还不具有美感。因此…

Unity 自动轮播、滑动轮播

如图所示&#xff0c;可设置轮播间隔&#xff0c;可左右滑动进行轮播 1.在UGUI创建个Image&#xff0c;添加自动水平组件 2.添加并配置脚本 3.代码如下&#xff0c;都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …

【乳腺肿瘤诊断分类及预测】基于LVQNN学习向量量化神经网络

课题名称&#xff1a;基于LVQ神经网络的乳腺肿瘤诊断&#xff08;类型分类&#xff09; 版本日期&#xff1a;2023-03-10 运行方式: 直接运行0501_LVQ0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院…

(HAL)STM32F407ZGT6——10-4 高级定时器 PWM 输入模式实验

一、高级定时器简介 高级定时器的框图和通用定时器框图很类似&#xff0c;只是添加了其它的一些功能&#xff0c;如&#xff1a;重复计数器、带死区控制的互补输出通道、断路输入等。 高级定时器的时钟来自APB2, 而PCLK2 168Mhz, 我们设置PPRE2不分频, 因此高级定时器时钟 …

《微信小程序开发从入门到实战》学习九十九

7.4 视频组件 7.4.1 video组件 支持属性属性如下&#xff1a; 属性类型默认值说明最低版本src&#xff08;必填&#xff09;string要播放视频的资源地址&#xff0c;基础库2.3.0版本开始支持云文件ID1.0.0controlsbooleantrue是否显示默认播放控件&#xff08;播放/暂停按钮…

vue/js 调用系统打印功能进行图片(imgUrl,base64),表格,自定义内容,页面局部区域打印【print-js、html2canvas】

1.打印图片(imgUrl) <template><div><button click"jsonPrint">打印</button></div> </template><script lang"ts"> import printJS from "print-js"; export default {setup() {function jsonPrint(…

使用.NET6 Avalonia开发跨平台三维应用

本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD Rapid AvaloniaUI三维控件的过程。 0 初始化环境 安装Avalonia.Templates dotnet new install Avalonia.Templates若之前安装过可忽略此步骤。 1 创建项目 选择创建AvaloniaUI项目 选一下.NET6版本和Avalonia版…

detectron2的read_image方法

在看代码的时候&#xff0c;看到一行注释&#xff1a;use PIL, to be consistent with evaluation 说是用PIL方法加载&#xff0c;却又看见了BGR这种表述&#xff0c;后面的调用也都是cv2格式&#xff1a; 那我就要看下这里面是怎么实现的了&#xff0c;找到了read_image函数&…

[R] Why data manipulation is crucial and sensitive?

What does a data scientist really do? Identifying the pattern in cultural consumption, making fancy graph, engage a dialogue between data and the existing literature, refining hypothesis….(done within one months with three to four online meetings with p…

app的启动

前言 本篇文章讲解ios的应用程序的启动 应用程序的加载 点击一个app 首先&#xff0c;我们在手机上点击一个app图标 内核初始化 操作系统收到启动app的消息后&#xff0c;会调用内核代码初始化内存空间&#xff0c;为app创建进程然后操作系统通过系统调用读取并解析app的…

apktool 简单快速 反编译apk获取图片资源

apktool:下载地址&#xff1a;iBotPeaches / Apktool / Downloads — Bitbucket把 myapp.apk 和 apktool_2.9.3.jar 放在同一文件夹&#xff0c;注意不要有中文路径 java -jar apktool_2.9.3.jar d -f myapp.apk -o myapp java -jar: java 执行jar命令 apktool_2.9.3.jar: a…

C语言实现的数组合并与排序程序

引言 在本篇博客中&#xff0c;我们将详细解析一段C语言代码&#xff0c;该代码实现了从用户处接收两个整数数组&#xff0c;将它们合并为一个数组后进行排序&#xff0c;并最终输出排序后的结果。这段代码主要涵盖了数组操作、数据输入、冒泡排序算法以及数据输出等核心编程概…

【涵子来信】——拆机,感想

大家好&#xff0c;我是涵子。 初中的第一个学期结束了&#xff0c;来临寒假。我在寒假做了一件有趣的事情&#xff1a;拆机&#xff0c;修手机。今天我来分享分享这件事情。 拆机 情况介绍 拆机对象&#xff1a; iPhone 6 Plus 情况&#xff1a; 电池健康度100%&#xff08…