【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.mzph.cn/news/174092.shtml

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

相关文章

怎么快速制作一本出色的电子期刊!

比起传统纸质期刊&#xff0c;电子期刊有着众多的优势&#xff0c;它打破了以往的传播形式和人们传统的时空观念&#xff0c;从而更加贴近人们的生活&#xff0c;更好地满足新时代人们对文化生活的更高要求。如何制作电子期刊呢&#xff1f; 其实很简单&#xff0c;只需要使用…

【在线AI绘画平台】哩布AI 在线生成图片、训练Lora、上传AI生成图简易实测

文章目录 一、主页面介绍1.1首页[网址 https://www.liblib.ai/](https://www.liblib.ai/)侧边栏可收起 1.2 模型页面1.2.1 按模型筛选相关1.2.2 封面的细节1.2.3 点击后进入封面&#xff1a; 二、在线生成图片2.1 直接从主页面进入2.1.1 在线生成的链接&#xff08;与webui几乎…

代理模式-C语言实现

UML图&#xff1a; 代码实现&#xff1a; #include <stdio.h>// 抽象主题接口 typedef struct {void (*request)(void*); } Subject;// 具体主题类 typedef struct {void (*request)(void*); } RealSubject;void RealSubject_request(void* obj) {printf("RealSubj…

win10下载Remix IDE桌面版以及空白页面的解决

文章目录 Remix IDE 的下载Remix IDE 空白页面的解决 Remix IDE 的下载 到 github 地址 https://github.com/ethereum/remix-desktop/releases 选择exe文件或根据自己电脑版本选择对应的zip文件进行下载&#xff0c;然后正常安装即可。 Remix IDE 空白页面的解决 有时打开Remix…

docker容器的生命周期管理常用命令

容器的生命周期管理命令 docker create &#xff1a;创建一个新的容器但不启动它 docker create nginx docker run :创建一个新的容器并运行一个命令 常用选项&#xff1a; 常用选项1. --add-host&#xff1a;容器中hosts文件添加 host:ip 映射记录 2. -a, --attach&#…

【STL】string类 (下)

目录 1&#xff0c;insert 2&#xff0c;erase 3&#xff0c;find 4&#xff0c;replace 5&#xff0c;rfind 6&#xff0c;substr 7&#xff0c;find_first_of 8&#xff0c;find_first_not_of 9&#xff0c;find_last_of 10&#xff0c;operator 11&#xff0c;ge…

深入理解对象与垃圾回收机制

1、虚拟机中对象创建过程 1.1 对象创建过程 当我们使用 new 创建一个对象时&#xff0c;在 JVM 中进行了如下操作&#xff1a; 类加载&#xff1a;把 class 加载到 JVM 运行时数据区的过程。可以通过本地文件的形式&#xff0c;也可以通过网络加载。 检查加载&#xff1a;首…

【23真题】大题全原题的211!题源已定位!

今天分享的是23年长安大学814的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年长安大学814考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;本套试题难度中等偏下&#xff0c;题量偏多&#xff0c;考察的知识点也是很常见的…

Robot Framework自动化测试(四)--- 分层思想

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Chatbot开发三剑客:LLAMA、LangChain和Python

聊天机器人&#xff08;Chatbot&#xff09;开发是一项充满挑战的复杂任务&#xff0c;需要综合运用多种技术和工具。在这一领域中&#xff0c;LLAMA、LangChain和Python的联合形成了一个强大的组合&#xff0c;为Chatbot的设计和实现提供了卓越支持。 首先&#xff0c;LLAMA是…

如何往excel中写子表?

with pd.ExcelWriter("C:/last_date.xlsx") as writer:for i in range(0, 10):df pd.DataFrame()df.to_excel(writer, indexFalse, sheet_namestr(days[i 1]))

OpenCV入门11——图像的分割与修复

文章目录 图像分割的基本概念实战-分水岭法(一)实战-分水岭法(二)GrabCut基本原理实战-GrabCut主体程序的实现实战-GrabCut鼠标事件的处理实战-调用GrabCut实现图像分割meanshift图像分割视频前后景分离其它对视频前后影分离的方法图像修复 图像分割是计算机视觉中的一个重要领…

Docker智驾开发环境搭建

文章目录 背景1. 什么是容器?2. 什么是Docker?2.1 Docker架构3. 为什么要使用Docker?3.1 Docker容器虚拟化的好处3.2 Docker在开发和运维中的优势4. Docker容器与传统虚拟化的区别4.1 区别4.2 Docker的优势5. Docker的核心概念6. Docker在嵌入式开发中的应用7. docker实践参…

deque容器结构学习笔记

1.结构图 2.deque对比vector和list deque双端队列&#xff0c;就像是list和vector的结合 vector&#xff1a; 优点&#xff1a;1.可以随机读取 2. 空间利用率高 缺点&#xff1a;1. 除了尾插尾删&#xff0c;其他插入删除效率比较低 2. 扩容效率低 list&#xff1a; 优点&…

好用的png图片打包plist工具,推荐使用pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.e…

C++STL——string类详解及其模拟实现

CSTL——string类 1. STL简介 STL全称standard template libaray&#xff0c;译为标准模板库 需要注意&#xff0c;STL不是C的标准库&#xff0c;而是C标准库的重要组成部分STL是一个包含众多数据结构和算法的软件框架 下面展示STL的六大组件&#xff1a; 本章&#xff0c;我…

三季度营收持续上涨,高途终于“松了一口气”?

近日&#xff0c;高途发布2023年第三季度财报。财报数据显示&#xff0c;高途实现净收入7.89亿元&#xff0c;同比增长30.2%。 同时&#xff0c;高途还透露了对于“AI教育”的布局。AI的发展无疑会给高途更大的机遇和更多的期待。随着人工智能技术在公司产品和服务各环节的落地…

HTML5+CSS3+JS小实例:九宫格图片鼠标移入移出方向感知特效

实例:九宫格图片鼠标移入移出方向感知特效 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport&…

python树的孩子链存储结构

树的孩子链存储结构是一种树的存储方式&#xff0c;它使用孩子兄弟表示法来表示树的结构。在这种存储结构中&#xff0c;树的每个节点都有一个指向其第一个孩子的指针和一个指向其下一个兄弟的指针。这样&#xff0c;可以通过这些指针来表示树的层次结构和节点之间的关系。 具…

springframe工程导入

配置gradle工程 init.d 目录下新建init.gradle allprojects {repositories {mavenLocal()maven {allowInsecureProtocol trueurl https://maven.aliyun.com/nexus/content/repositories/central/}} } 报错Plugin [id: org.jetbrains.dokka, version: 0.10.1, apply: false] w…