【Linux】vim-多模式的文本编辑器

本篇文章内容和干货较多,希望对大家有所帮助👍

目录

一、vim的介绍

1.1 vi 与 vim的概念
1.2 Vim 和 Vi 的一些对比

二、vim 模式之间的切换

2.1 进入vim
2.2 [正常模式]切换到[插入模式]
2.3 [插入模式]切换至[正常模式]
2.4 [正常模式]切换至[底行模式]
2.5 [底行模式]切换至[正常模式]
2.6 一图看懂模式切换

三、vim正常模式命令集

3.1 移动光标
3.2 删除文字
3.3 复制
3.4 替换
3.5 撤销上一次操作
3.6 更改
3.7 查找文本

四、vim末行模式命令集

4.1 列出行号
4.2 跳到文件中的某一行
4.3 查找 / 替换字符
4.4 保存文件和离开vim

五、vim的补充

5.1 vi/vim 键盘图
5.2 vim的其他模式:视图模式

六、vim的简单配置 

6.1 配置文件的位置
6.2 常用配置选项
6.3 配置vim


一、vim的介绍

Vim(Vi IMproved)是一个功能强大的文本编辑器,常用于Linux和其他类Unix系统中。它是Vi编辑器的增强版,并提供了更多的功能和灵活性。

1.1 vi 与 vim的概念

vi是最初的Unix文本编辑器,是一种基于命令行的编辑器。vi只能在命令模式和编辑模式之间切换。

  • 在命令模式下,可以执行诸如复制、粘贴、查找和替换等操作。
  • 在编辑模式下,可以编辑文本。要进入编辑模式,请按下i键。要退出编辑模式并返回命令模式,请按下“Esc"键。

vim是vi的改进版,它添加了一些新功能和改进了一些现有功能。

  • vim有多种模式:正常模式、插入模式和底行模式等。
  • 在正常模式下,可以控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入其他模式。
  • 在插入模式下,可以像其他文本编辑器一样编辑文本。
  • 在底行模式下,可以进行文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

1.2 Vim 和 Vi 的一些对比

  1. 功能扩展:Vim 相较于 vi 提供了更多的功能和扩展。它支持语法高亮、代码折叠、多级撤销、多窗口编辑、插件系统等,这些特性使得 Vim 更加强大和灵活。
  2. 易用性:Vim 在用户界面和交互方面进行了改进,提供了更直观和友好的操作方式。例如,Vim 支持可视化模式、智能缩进等,使得编辑过程更加便捷。
  3. 可定制性:Vim 具有高度的可定制性,用户可以通过配置文件(.vimrc)自定义各种设置和快捷键,以适应个人习惯和需求。这使得用户可以根据自己的喜好来优化编辑环境。
  4. 插件生态:Vim 拥有丰富的插件生态系统,用户可以通过安装插件来扩展 Vim 的功能,如版本控制、自动补全、语法检查等。
  5. 兼容性:Vim 保持了与 vi 的高度兼容性,可以在 vi 兼容模式下运行。这意味着 vi 用户可以无缝切换到 Vim,而且大部分 vi 的命令和操作在 Vim 中仍然有效。

需要注意的是,尽管 Vim 是对 vi 的改进和扩展,但在某些系统中可能默认安装的是 vi 而不是 Vim。在这种情况下可以使用 vim 命令来启动 Vim 编辑器。


二、vim 模式之间的切换

vim有许多模式,在这里只讲解三种模式,分别是命令模式(Normal mode)、插入模式(Insert mode)和底行模式(last line mode)。

2.1 进入vim

输入 vim 和文件名 ,进入到vim全屏编辑界面。

注:vim可以打开一个不存在的文件如果q退出,不创建文件如果wq退出,创建文件。

 

[zzx@hecs 5_mydir]$ vim code.c

技巧:vim 文件名 +n         打开vim,并将光标移动到第n行。

例如:vim code.c +2  打开code.c,并将光标移动到第2行。

进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文字。

2.2 [正常模式]切换到[插入模式]

  • 输入i        在当前光标位置进入插入模式
  • 输入a       在当前光标位置之后进入插入模式
  • 输入o       在当前行之后插入一个新行并进入插入模式。

只有在插入模式下,才可以做文字输入。该模式是我们后面用的最频繁的编辑模式。

2.3 [插入模式]切换至[正常模式]

按[ESC]键    可从插入模式回到命令模式

处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。

2.4 [正常模式]切换至[底行模式]

[shift + ;],其实就是输入[:]

在[正常模式]下,按一下 [:] 冒号键进入底行模式,此时光标移动到底部的命令行,并且可以输入各种命令。

例如:退出vim及保存文件
:w       保存当前文件

:q         退出vim
:wq     保存并退出vim
:#!       强制进行操作,例如 q!   不保存强制退出vim

2.5 [底行模式]切换至[正常模式]

  • 按[ESC]键    可从底行模式回到正常行模式
  • 底行模式下执行完一条命令后会自动切换至命令模式

2.6 一图看懂模式切换


三、vim正常模式命令集

3.1 移动光标

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

注:w和b如果碰到的是单词,就跳到单词开头,如果不是单词,就按字符移动,如果是空格,就跳过

3.2 删除文字

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

注:

  1. x 和 #x 都是向后删除,X 和 #X 都是向前删除。
  2. dd 删除的内容存放在缓存表内,相当于剪切

3.3 复制

  • [yw]:将光标所在之处到字尾的字符复制到缓冲区中。
  • [#yw]:复制#个字到缓冲区
  • [yy]:复制光标所在行到缓冲区。
  • [#yy]:例如,[6yy]表示拷贝从光标所在的该行“往下数”6行文字。
  • [p]:将缓冲区内的字符贴到光标所在位置。

注:

  1. 所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
  2. dd 也可以与 p 配合使用,实现剪切粘贴
  3. #G p  例如13G p 粘贴到13行的下一行
    #p      例如1000p 粘贴1000次,不想复制就按u撤回

3.4 替换

  • [r]:替换光标所在处的字符
  • [R]:替换光标所到之处的字符,直到按下[ESC]键为止。
  • [~] 波浪号:将文本进行大小写转换

注:

  1. [r#]   替换光标所在处的字母,换成#,例如 rg,将光标所在处的字母换成g
    [#r#] 例如5rg,将光标所在处及之后的共5个字符换成g
  2. [R]    是进入到replace模式。

3.5 撤销上一次操作

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

3.6 更改

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

3.7 查找文本

  • [/文本]:在当前文件中向下查找匹配的文本。按下回车后,光标将定位到第一个匹配的位置。

  • [?文本]:在当前文件中向上查找匹配的文本。按下回车后,光标将定位到第一个匹配的位置。

  • [*]:按下*键,在当前文件中向下查找当前光标所在位置的单词。

  • [#],按下 # 键,可向上查找前一个匹配项。

注:

  1. [/]和[?]按下回车后,光标将定位到的是光标原本位置后的第一个匹配的位置。
    不是文本文件中第一个出现该文本的位置
  2. [/]和[?]光标定位后,按下 n 键,可继续向下查找下一个匹配项。
    按下 N 键,可向上查找前一个匹配项。
  3. 底行输入 noh 取消高亮

四、vim末行模式命令集

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

4.1 列出行号

  • [set nu]:输入[set nu]后,会在文件中的每一行前面列出行号。
  • [set nonu] :取消显示行号。

4.2 跳到文件中的某一行

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

4.3 查找 / 替换字符

前面3.7中讲到的 [/] 和 [?] 也可以算在底行模式的命令中

查找

  • [/文本]:在当前文件中向下查找匹配的文本。按下回车后,光标将定位到第一个匹配的位置。

  • [?文本]:在当前文件中向上查找匹配的文本。按下回车后,光标将定位到第一个匹配的位置。

  • /和?的注意事项与3.7中相同。

替换

  • [%s/<查找内容>/<替换内容>/g]:全局替换命令,将当前文件中所有匹配 pattern 的文本替换为 replace。

         %s:表示对整个文件进行替换。
         /g:表示全局替换,即一行中多次出现的匹配都会被替换。

4.4 保存文件和离开vim

  • [w]: 在冒号输入字母[w]就可以将文件保存起来
  • [q]:按[q]就是退出,如果无法离开vim,可以在[q]后跟一个[!]强制离开vim。
  • [wq]:一般建议离开时,搭配[w]一起使用,这样在退出的时候还可以保存文件。

注:

  1. vim可以打开一个不存在的文件如果q退出,不创建文件如果wq退出,创建文件。

五、vim的补充

5.1 vi/vim 键盘图

学完上面的一些命令和操作再来看这个vim图应该会有一些更深的体会。

5.2 vim的其他模式:视图模式

前面讲到的三种模式:正常/命令模式、插入模式、底行模式只是一部分,一共有12种总模式,大家下来可以研究一下。

其中有一个较为常用的是视图模式(Ctrl v进入),常用来进行批量化注释和注释解除。

注释步骤:

  1. 将光标移动到要注释的行首
  2. Ctrl v      进入视图模式
  3. 选取行    使用hjkl选取多行
  4. I插入模式   Shift + i ,即大写i进入插入模式
  5. 输入//      注释一行
  6. Esc         完成批量化注释

注释解除和此步骤类似,大家可以自行练习以下。(把输入//换成删除// )

六、vim的简单配置 

6.1 配置文件的位置

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

6.2 常用配置选项

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

6.3 配置vim

要配置好看的vim,原生的配置可能功能不全,也可以选择使用别人的配置:

  • 直接在命令行输入并回车即可。 
    curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
  • 下载完成后还要执行以下命令让配置生效
    source ~/.bashrc
  • 卸载配置直接执行以下命令
    bash ~/.VimForCpp/uninstall.sh

 效果图:

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

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

相关文章

nodejs+vue+python+PHP+微信小程序-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展&#xff0c;信息时代日益更新&#xff0c;书吧租阅管理系统仍在蓬勃发展。同时&#xff0c;随着信息社会的快速发展&#xff0c;各种管理系统面临着越来越多的数据需…

spring-framework-5.2.25.RELEASE源码环境搭建

环境准备 spring-framework-5.2.25.RELEASEIntelliJ IDEA 2022.3.1java version “11.0.20” 2023-07-18 LTSGradle 5.6.4java version “1.8.0_301” 下载spring-framework-5.2.25.RELEASE源码 git clone https://gitee.com/QQ952051088/spring.git cd spring gradlew buil…

30系列显卡在ubuntu下不能满血运行的问题

之前发现在ubuntu下&#xff0c;我的3080只能跑115w最高&#xff0c;而这在win下是可以跑165w的。于是乎google了所有结果&#xff0c;无解… 现已经过去一年&#xff0c;显卡价格飞涨&#xff0c;无奈只能使用笔记本跑自己的代码了。结果发现nvidia推了Linux下的动态加速&…

jQuery_05 事件的绑定

jQuery可以给dom对象添加事件 在程序执行期间动态的处理事件 jQuery如何绑定事件呢&#xff1f; 1. $("选择器").事件名称(事件处理函数) $("选择器") &#xff1a; 选择0或者多个dom对象 给他们添加事件 事件名称&#xff1a;就是js中事件名称去掉on的部…

Linux 命令vim(编辑器)

(一)vim编辑器的介绍 vim是文件编辑器&#xff0c;是vi的升级版本&#xff0c;兼容vi的所有指令&#xff0c;同时做了优化和延伸。vim有多种模式&#xff0c;其中常用的模式有命令模式、插入模式、末行模式&#xff1a;。 (二)vim编辑器基本操作 1 进入vim编辑文件 1 vim …

河南省第五届“金盾信安杯”网络与数据安全大赛实操技能赛 部分wp(自己的一些思路和解析 )(主misc crypto )

芜湖 不评价 以下仅是自己的一些思路和解析 有什么问题或者建议随时都可以联系我 目录 题目一 来都来了 操作内容&#xff1a; flag值&#xff1a; 题目二 Honor 操作内容&#xff1a; flag值&#xff1a; 题目三 我看看谁还不会RSA 操作内容&#xff1a; flag值&a…

3. 内存单元

1位的内存单元 对于一个内存单元需要有:1个锁存器,数据输入,可写控制,是否读取(也是是否输出), 行和列(内存地址), 数据输出这几部分组成写入: 当行和列, 数据输入,可写全为1时则写入,(行 & 列 & 输入 & 可写)读出(输出): 当 行,列, 是否读取(也是是否输出) ( 行 …

c语言练习12周(6~10)

以下程序调用递归函数fun实现求n!&#xff0c;请补充代码。 题干以下程序调用递归函数fun实现求n!&#xff0c;请补充代码。 int fun(int n) { int c; /****************/ /****************/ else cn*fun(n-1); …

【云备份】文件操作实用工具类设计

文章目录 为什么要单独设计文件工具类&#xff1f;整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…

在 Linux 中重命名文件和目录

目录 前言 使用 mv 命令重命名文件和目录 通过组合 mv、find 和 exec 命令重命名与某个模式匹配的多个文件 使用 rename 命令轻松重命名多个文件 总结 前言 在这篇基本命令行教程中&#xff0c;你将学习在 Linux 终端重命名文件和目录的各种方法。 如何在 Linux 终端中重命…

Sublime Text 3 安装离线插件 anaconda

1 下载 Sublime Text 3 免安装版 Download - Sublime Text 2 下载 Package Control&#xff0c;放到 Sublime Text Build 3211\Data\Installed Packages 目录下。 Installation - Package Control 3 页面搜索 anaconda anaconda - Search - Package Control Anaconda - Pac…

彩纸屋在线少儿编程源码/scratch在线编程系统/培训管理系统源码/在线培训系统源码PHP

源码简介&#xff1a; 彩纸屋在线少儿编程源码&#xff0c;它是scratch在线编程系统&#xff0c;作为培训管理系统源码/在线培训系统源码&#xff0c;采用PHP源码。 彩纸屋是全国首家提供scratch开源定制和少儿编程培训管理系统源代码的服务商&#xff0c;彩纸屋提供的scratc…

WebGL/threeJS面试题扫描与总结

什么是 WebGL&#xff1f;什么是 Three.js&#xff1f;请解释three.js中的WebGL和Canvas的区别&#xff1f; WebGL(全写Web Graphics Library)是一种3D绘图协议&#xff0c;这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起&#xff0c;通过增加OpenGL ES 2.0的一个…

WordPress安装AWS插件实现文本转语音功能

适用于 WordPress 的 AWS 插件示例演示了内容创建者如何轻松地为所有书面内容添加文本转语音功能。随着语音搜索的不断增加&#xff0c;以音频格式提供更多网站内容变得至关重要。通过添加语音功能&#xff0c;网站访客可以通过在线音频播放器和播客应用程序等新渠道使用您的内…

单调栈 模板

class Solution { public: //从后往前的方法 vector<int> dailyTemperatures(vector<int>& temperatures) {int n temperatures.size();vector<int> ans(n);//创建一个大小为n的数组stack<int> st;//这个时候栈中没有任何元素for(int i n-1;i &g…

4面试题--数据库(mysql)

执⾏⼀条 select / update 语句&#xff0c;在 MySQL 中发⽣了什么&#xff1f; Server 层负责建⽴连接、分析和执⾏ SQL。MySQL ⼤多数的核⼼功能模块都在这实现&#xff0c;主要包括 连接器&#xff0c;查询缓存&#xff08;8.0版本去除&#xff0c;因为每次更新将会清空该…

使用 STM32 读取和解析 NTC 热敏电阻的数值

本文介绍了如何利用 STM32 微控制器读取和解析 NTC&#xff08;Negative Temperature Coefficient&#xff09;热敏电阻的数值。首先&#xff0c;我们将简要介绍 NTC 热敏电阻的原理和特性。接下来&#xff0c;我们将详细讨论如何设计电路连接和采用合适的 STM32 外设进行数值读…

如何在GO中写出准确的基准测试

一般来说&#xff0c;我们不应该对性能进行猜测。在编写优化时&#xff0c;会有许多因素可能起作用&#xff0c;即使我们对结果有很强的看法&#xff0c;测试它们很少是一个坏主意。然而&#xff0c;编写基准测试并不简单。很容易编写不准确的基准测试&#xff0c;并且基于这些…

从0到0.01入门 Webpack| 008.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

机器学习算法——主成分分析(PCA)

目录 1. 主体思想2. 算法流程3. 代码实践 1. 主体思想 主成分分析&#xff08;Principal Component Analysis&#xff09;常用于实现数据降维&#xff0c;它通过线性变换将高维数据映射到低维空间&#xff0c;使得映射后的数据具有最大的方差。主成分可以理解成数据集中的特征…