【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

 效果图:

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

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

相关文章

C/C++---------------LeetCode第876. 链表的中间结点

链表的中间结点 题目及要求双指针在main内使用 题目及要求 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 示例 2&#xff1a; 双指针 思路&#xff1a;分别定义快慢指针…

STM32CubeMx+MATLAB Simulink点灯程序

STM32CubeMxMATLAB点灯程序 ✨要想实现在MATLAB Simulink环境下使用STM32&#xff0c;前提是已经搭建好MATLAB环境并且安装了必要的Simulink插件&#xff0c;以及对应的STM32支持包。 &#x1f33f;需要准备一块所安装支持包支持的STM32开发板. &#x1f516;具体支持包详情页…

LeetCode(45)最长连续序列【哈希表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 最长连续序列 1.题目 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&a…

公网穿透和RTC

RTC RTC 是 Real-Time Communication 的简写&#xff0c;正如其中文名称 “即时通讯” 的意思一样&#xff0c;RTC 协议被广泛用于各种即时通讯领域&#xff0c;诸如&#xff1a; 在线教育&#xff1b;直播中的主播连麦 PK&#xff1b;日常生活的音视频电话&#xff1b;.....…

【开源】基于Vue+SpringBoot的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…

Ubuntu镜像与K8S冲突,容器持续Terminating

问题 记录一次软件冲突BUG&#xff1a; eclipse-temurin:11-jdk&#xff08;底层Ubuntu 20.04.3 LTS&#xff09;镜像创建的容器在K8S-1.25.5上无法正常terminating&#xff0c;造成资源浪费&#xff0c;甚至引发K8S资源CPU insufficient报错。具体表现 某些容器镜像在K8S上无…

九章量子计算机:探索量子世界的革命性工具

九章量子计算机:探索量子世界的革命性工具 一、引言 九章量子计算机的推出,是近年来科技界最为引人瞩目的成就之一。这款基于量子力学的计算机,以其独特的计算方式和潜在的应用前景,引发了全球范围内的关注和讨论。本文将深入探讨九章量子计算机的原理、技术特点、应用前景…

【工具分享】| 阅读论文神器 使用技巧 AI润色 AI翻译

文章目录 1 使用技巧1.1 功能一 即时翻译1.2 功能二 文献跳转1.3 功能三 多设备阅读1.4 功能四 小组讨论笔记共享1.5 功能五 个人文献管理 2 其他功能 超级喜欢Readpaper这一款论文阅读软件&#xff0c;吹爆他哈哈 为什么&#xff1f; 当然是他可以解决我们传统阅读论文的种种…

python之pyqt专栏5-信号与槽1

在上一篇文章&#xff0c;我们了解到如果想要用代码改变QLabel的文本内容&#xff0c;可以调用QLabel类的text()函数。 但是现在有个这样的需求&#xff0c;界面中有一个Button与一个Label&#xff0c;当点击Button时&#xff0c;将Label的内容改变为“Hello world&#xff01;…

前端:实现div的隐藏与显示

效果 完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

云计算如何创芯:“逆向工作法”的性感之处

在整个云计算领域&#xff0c;能让芯片规模化的用起来&#xff0c;是决定造芯是否成功的天花板。在拉斯维加斯的亚马逊云科技2023 re:Invent则是完美诠释了这一论调。 亚马逊云科技2023 re:Invent开幕前两个小时&#xff0c;有一场小型的欢迎晚宴&#xff0c;《星期日泰晤士报》…

开源与闭源

我的观点&#xff1a; 开源与闭源软件都有各自的优势和劣势&#xff0c;没有绝对的对错之分。.. 一、开源和闭源的优劣势比较 开源的好处与劣处 优势&#xff1a; 创新与合作&#xff1a;开源软件能够吸引更多的开发者参与到项目中来&#xff0c;促进创新和合作。开放的源代码…

【小布_ORACLE笔记】Part11-1--RMAN Backups

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

[PyTorch][chapter 64][强化学习-DQN]

前言&#xff1a; DQN 就是结合了深度学习和强化学习的一种算法&#xff0c;最初是 DeepMind 在 NIPS 2013年提出&#xff0c;它的核心利润包括马尔科夫决策链以及贝尔曼公式。 Q-learning的核心在于Q表格&#xff0c;通过建立Q表格来为行动提供指引&#xff0c;但这适用于状态…

社区便利店销售微信APP的设计与实现

摘 要 社区便利店销售小程序采用的技术&#xff1a;第一是Mysql数据库&#xff1b;第二是java程序开发语言&#xff1b;第三是ssm框架&#xff1b;第四是B/S结构。系统主要分为管理员、商家、用户三部分&#xff0c;这个销售小程序的功能有首页和个人中心&#xff0c;同时还有…

计算机毕业设计|基于SpringBoot+MyBatis框架健身房管理系统的设计与实现

计算机毕业设计|基于SpringBootMyBatis框架的健身房管理系统的设计与实现 摘 要:本文基于Spring Boot和MyBatis框架&#xff0c;设计并实现了一款综合功能强大的健身房管理系统。该系统涵盖了会员卡查询、会员管理、员工管理、器材管理以及课程管理等核心功能&#xff0c;并且…

MySQL 教程 1.4

MySQL 连接 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。 实例 以下是从命令行中连接mysql服务器的简单实例&#xff1a; [roothost]# mysql -u root -p Enter password:****** 在登录成功后会出现 mysql> 命令提示窗…

Android11编译第八弹:root用户密码设置

问题&#xff1a;user版本增加su 指令以后&#xff0c;允许切换root用户&#xff0c;但是&#xff0c;root用户默认没有设置密码&#xff0c;这样访问不安全。 需要增加root用户密码。 一、Linux账户管理 1.1 文件和权限 Linux一切皆文件。文件和目录都有相应的权限&#x…

微信小程序踩坑记录

一、引言 作者在开发微信小程序《目的地到了》的过程中遇到过许多问题&#xff0c;这里讲讲一些技术和经验问题。 基本目录机构&#xff1a; 二、问题 1、定位使用 获取定位一定要在app.json里面申明&#xff0c;不然是没办法获取定位信息的 "requiredPrivateInfos"…

jetson nano SSH远程连接(使用MobaXterm)

文章目录 SSH远程连接1.SSH介绍2.准备工作3.连接步骤3.1 IP查询3.2 新建会话和连接 SSH远程连接 本节课的实现&#xff0c;需要将Jetson Nano和电脑保持在同一个局域网内&#xff0c;也就是连接同一个路 由器&#xff0c;通过SSH的方式来实现远程登陆。 1.SSH介绍 SSH是一种网…