当前位置: 首页 > news >正文

【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

 效果图:

相关文章:

  • 键盘打字盲打练习系列之指法练习——2
  • 前端知识笔记(十二)—————前端面试容易问到的问题总结
  • 肖sir __数据库练习__001
  • 【数据库】基于排序算法的去重,集合与包的并,差,交,连接操作实现原理,执行代价以及优化
  • 机器学习笔记 - 如何在Python中对网格和点云进行体素化?
  • Git常用命令#更改用户名
  • web前端之css变量的妙用、通过JavaScrip改变css文件中的属性值、querySelector、setProperty
  • python实现多线程并发测试并生成excel报告
  • 使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
  • spring boot mybatis TypeHandler 看源码如何初始化及调用
  • MySQL之锁
  • 针对Arrays.asList的坑,可以有哪些处理措施
  • OSI七层模型与TCP/IP四层模型
  • scrapy框架
  • iOS 17.2:可以修改消息提示音了
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Debian下无root权限使用Python访问Oracle
  • es的写入过程
  • linux安装openssl、swoole等扩展的具体步骤
  • MySQL QA
  • nginx 负载服务器优化
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python_OOP
  • TypeScript迭代器
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue.js-Day01
  • 爱情 北京女病人
  • 第十八天-企业应用架构模式-基本模式
  • 学习JavaScript数据结构与算法 — 树
  • 延迟脚本的方式
  • 一个JAVA程序员成长之路分享
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​iOS安全加固方法及实现
  • # 数据结构
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #职场发展#其他
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (篇九)MySQL常用内置函数
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 物件導向與老子思想 (OO)
  • (转)视频码率,帧率和分辨率的联系与区别
  • .NET Framework杂记
  • .NET 命令行参数包含应用程序路径吗?
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [20160902]rm -rf的惨案.txt
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • [BUUCTF]-Reverse:reverse3解析
  • [BZOJ 3680]吊打XXX(模拟退火)