vim 12种模式的切换、常用命令集合

server/2024/10/18 15:50:57/

开发工具

每当别人问你:
💦你在什么环境下写代码、调试、编译、链接代码?
🧑🏿Visual Studio 2022。VScode。IntelliJ IDEA。Eclipse…

对于上面这种环境,我们称之为集成开发环境(IDE)。然而,相比我们在 Linux 中大部分情况下,我们所使用的工具都是独立的工具 —— 比如我们写代码用 vim、编译用 gcc/g++、调试用 gdb、维护项目关系用 make/Makefile 等。在Linux环境中,vim可谓是程序员们的老朋友了。

Vim
Vim
请添加图片描述
vi/vim 的区别简单说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新特性。例如语法高亮,可视化操作不仅可以在终端运行,也可以运行于 x window、 mac os、windows,所以这里我们学习 vim
不过,vim 并不好学,学习成本较高,那为啥还要学习 vim 呢 ?—— 主要原因有两个:其一是 vim 用的比较广泛,当然其功能也是很强大,大成后可以完全摆脱鼠标的束缚,尤其是嵌入式软件开发工作者,在实际工作中,没有界面操作时,对终端的依赖程度十分高;其二是基本所有的 Linux 机器上都默认带有 vim 的,可以这么说,vim 只要熟练了,其它的文本编译器都不足为惧。vim 和 make/Makefile 使用的熟练度是衡量一个 Linux 程序员水平的一个很重要的东西。

vim_13">1、vim的基本概念

vim 共有 12 种模式:six BASIC modes 和 six ADDITIONAL modes。
详细介绍三种常用模式:命令模式、插入模式和底行模式。

这是六种基本模式:

normal mode 正常模式visual mode 可视化模式command mode 命令模式insert mode 插入模式 i / a / oselect mode 选择模式ex mode 扩展模式

有六种附加模式。这些是基本模式的变体:

Operator-pending 模式 这类似于普通模式,但在操作符命令启动后,Vim 正在等待 {motion} 来指定操作符将要处理的文本。Replace mode 替换模式 替换模式是插入模式的一个特例。可以执行与插入模式相同的操作,但对于您输入的每个字符,现有文本中的一个字符将被删除。Virtual Replace mode 虚拟替换模式 虚拟替换模式与替换模式类似,但您替换的不是文件字符,而是屏幕空间。Insert Normal mode 插入普通模式 在插入模式下按 CTRL-O 键进入。这类似于普通模式,但在执行一个命令后,Vim 将返回到插入模式。如果启用了“showmode”选项,则窗口底部将显示“--(插入)--”。Insert Visual mode 插入可视模式 从插入模式开始可视选择时进入,例如,使用 CTRL-O 然后按“v”、“V”或 CTRL-V。当可视选择结束时,Vim 返回插入模式。如果“showmode”选项处于打开状态,则窗口底部将显示“--(插入)VISUAL --”。Insert Select mode 插入选择模式 从插入模式启动选择模式时进入。例如,通过拖动鼠标或 <S-Right>。选择模式结束时,Vim 返回插入模式。如果“showmode”选项处于打开状态,则窗口底部会显示“-- (insert) SELECT --”。

mode-switching / 模式转换
如果出于某种原因你不知道自己处于哪种模式,你可以随时获得通过输入两次<Esc>返回正常模式。【这不适用于Ex模式 】
但是,使用“ :visual ”。当你看到屏幕闪烁或键入<Esc>后会听到铃声。但是,在插入模式下使用CTRL-O后按<Esc>会听到 “哔” 声,但您仍处于插入模式,请再次键入<Esc>以返回正常模式。

转换模式To 模式*i_esc *
正常可视选择插入替换命令行Ex
FROM 模式
正常v V ^V* 4* 1R gR: / ? !Q
可视* 2^Gc C- -:- -
选择* 5^O ^G* 6- -- -- -
插入<Esc>- -- -<Insert>- -- -
替换<Esc>- -- -<Insert>- -- -
命令行* 3- -- -:start- -- -
Ex:vi- -- -- -- -- -

- - not possible
*1 通过输入命令“ i ”,“ I ”,“ a ”从普通模式进入插入模式,“ A ”、“ o ”、“ O ”、“ c ”、“ C ”、“ s ” 或 S ”。
*2 通过发出非移动命令从可视模式进入正常模式,执行命令,或者按 “ v ”,“ V ”或“ CTRL-V ”(参见 | v_v |),它只会停止可视模式,而没有任何副作用。
*3 通过以下方式从命令行模式进入正常模式:

  • 按 <CR>或<NL>,将执行输入的命令。

  • 删除整行(例如,使用CTRL-U)并给出最后的<BS>。

  • CTRL-C 或 <Esc> 退出命令行而不执行命令。

    在最后一种情况下, <Esc> 可能是使用 ‘wildchar’ 选项定义的字符,在这种情况下它将启动命令行完成。您可以忽略它并再次输入<Esc>。{Vi: 当按下时,命令行被执行。这对大多数人来说是意料之外的;因此它被改变了。
    在 Vim 中,当 <Esc> 是映射的一部分时,命令行执行。如果您希望在输入**<Esc> 时也使用 Vi 行为,请使用“ :cmap ^V<Esc> ^V ^M” }

*4 通过以下方式从 正常模式 进入 选择模式

  • 当 ‘selectmode’ 包含 “mouse” 时,使用鼠标选择文本
  • 使用不可打印的命令移动光标,同时保持 Shift 按下键,并且 “selectmode” 选项包含 “key”
  • 当 ‘selectmode’ 包含 “cmd” 时使用 " v “、” V " 或 " CTRL-V "
  • 使用 “ gh ”、“ gH ” 或 “ g CTRL-H ” | g_CTRL-H |

*5 使用不可打印的命令从选择模式进入正常模式以移动光标,而无需按住 Shift 键。
*6 通过输入可打印字符从 选择模式进入插入模式。选择内容被删除并且字符被插入。

如果“insertmode”选项打开,则编辑文件将在插入模式下开始。

*CTRL-_CTRL-N * *i_CTRL-_CTRL-N * *c_CTRL-_CTRL-N * *v_CTRL-_CTRL-N *

此外,命令 CTRL-\ CTRL-N 或 <C-\ > <CN> 可用于从任何其他模式进入正常模式。这可用于确保 Vim 处于正常模式,而不会像 <Esc> 那样发出蜂鸣声。然而,这不在 Ex模式下工作。在带有参数的命令(如 | f | 或 | m |)之后使用时,将应用使用 “ ttimeoutlen” 设置的超时。

*CTRL-_CTRL-G * *i_CTRL-_CTRL-G * *c_CTRL-_CTRL-G * *v_CTRL-_CTRL-G *

当设置了 “insertmode” 时,可以使用命令 CTRL-\ CTRL-G 或 <C-\ > <CN> 进入插入模式。否则进入正常模式。这可以用来确保 Vim 处于 'insertmode’指示的模式,无需了解 Vim 当前处于什么模式。

* Q* * mode-Ex* * Ex-mode* * Ex* * EX* * E501*

Q
切换到 “Ex”模式。 这有点像一个接一个地输入“:”命令,不同之处在于:
- 您不必一直按“:”。
- 屏幕不会在每个命令之后更新。
- 没有正常的命令行编辑。
- 不使用映射和缩写。
实际上,您正在使用“标准”行输入编辑命令(<Del> 或 <BS> 删除,CTRL-U 删除整行)编辑行。如果在命令行上以 “ex” 调用 Vim,它将默认进入此模式。
使用 “:vi” 命令 |:visual| 退出 “Ex”模式
注意:在旧版本的 Vim “Q”格式文本中,现在使用 |gq| 完成。但是,如果您使用
|vimrc_example.vim| 脚本,“Q”的工作方式与“gq”相同。

* gQ*

gQ
像使用“Q”一样切换到 “Ex”模式,但实际上就像依次输入“:”命令一样。所有命令行编辑、完成等均可用。
使用“:vi”命令 |:visual| 退出 “Ex”模式。
{not in Vi}

===============================================================

vim_115">2、vim的基本操作

三种常用模式:
1> vim拥有三种操作模式
命令行模式(Command Mode) :
当我们vim到某个文件时,默认进入的就是 命令模式。
实现光标的移动,字符、字或行的删除,移动、复制等编辑型操作。

命令行模式

插入模式(Insert Mode) :
自定义输入文本的模式 在命令模式下按下键盘’i’ ‘a’ ‘o’ —> – INSERT – 意味着进入了插入模式。
只有在插入模式下,才可以做文字输入。
插入模式
底行模式 :
就是给文件做最后处理的模式。
其实,本来Vim只有命令模式和插入模式就可以了,但是,在命令行模式下,输入的命令不回显,有些命令回显比较好, 所以,又专门弄了一个底行模式,在这种模式下,输入的命令回显在编辑器的底部,所以叫底行模式。
底行模式
三种模式的运行切换:
请添加图片描述

vim_135">3、vim插入模式命令集

			i / a / o    进入到插入模式  按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。「i」:i是从光标所在位置开始输入「I」:I是光标所在行第一个非空白字符开始输入「a」:a是从光标所在的下一个字符开始输入「A」:A是从光标所在行的最后一个字符开始输入「o」:o是从光标所在行的下一行新的一行开始输入「O」:O是从光标所在行的上一行新的一行开始输入「r」:r是取代光标所在的字符一次「R」:R是依次取代光标所在字符从插入模式切换为命令模式:按「ESC」键。

vim_152">4、vim命令行模式命令集

移动光标
			按「gg = G」: 自动排版vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格按「G」:移动到文章的最后按「 $ 」:移动到光标所在行的“行尾”按「^」:移动到光标所在行的“行首”按「w」:光标跳到下个字的开头按「e」:光标跳到下个字的字尾按「b」:光标回到上个字的开头按「#l」:光标移到该行的第#个位置,如:5l,56l按[gg]:进入到文本开始按[G]:回到文件末尾按[shift+g]:进入文本末端按「ctrl」+「b」:屏幕往“后”移动一页按「ctrl」+「f」:屏幕往“前”移动一页按「ctrl」+「u」:屏幕往“后”移动半页按「ctrl」+「d」:屏幕往“前”移动半页按「v」:v是光标起始和结束之间的文本会被选中按「V」:V是光标起始和结束之间的所有行被选中按「ctrl」+「v」:Ctrl+v是光标起始和结束之间构成的矩形区域被选中
删除文字
			「x」:每按一次,删除光标所在位置的一个字符「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符「dd」:剪切光标所在行 「#dd」:从光标所在行开始剪切#行 「d1G」:d1G是删除当前行前面的所有数据「dG」:dG是删除当前行之后的全部数据
复制
			「yw」:将光标所在之处到字尾的字符复制到缓冲区中。「#yw」:复制#个字到缓冲区「yy」:复制光标所在行到缓冲区。「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。「y1G」:y1G是复制当前行前面的所有数据「yG」:yG是复制当前行之后的全部数据「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
替换
			「r」:替换光标所在处的字符。「R」:替换光标所到之处的字符,直到按下「ESC」键为止。	
撤销上一次操作
			「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。「ctrl + r」: 撤销的恢复,反撤销。「.(小数点)」: 重复上一个动作。
更改
			「cw」:更改光标所在处的字到字尾处「c#w」:例如,「c3w」表示更改3个字
跳至指定的行
			「ctrl」+「g」列出光标所在行的行号。「#G」:例如,「15G」,表示移动光标至文章的第15行行首

vim_211">5、vim底行模式命令集

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

保存文件
			「w」        	保存 「q」         	退出 「wq」       	保存并退出 「q!」      	强制退出 「wq! 」   		强制保存并退出 
列出行号
			「set nu」  临时显示行数
跳到文件中的某一行
			「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
搜索
			「/aslord」  全文搜索"aslord"「n」  查找下一个 「N」  查找上一个 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
替换
			「s/old/new/g」  将光标所在行中的old 替换成 new 「%s/old/new/g」 将全文的old 替换成 new --->一句话替换变量名/函数名

vim_235">6、vim参数列表

			$ vim --helpVIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08)用法: vim [参数] [文件 ..]       编辑指定的文件或: vim [参数] -               从标准输入(stdin)读取文本或: vim [参数] -t tag          编辑 tag 定义处的文件或: vim [参数] -q [errorfile]  编辑第一个出错处的文件参数:--			在这以后只有文件名-v			Vi 模式 (同 "vi")-e			Ex 模式 (同 "ex")-E			Improved Ex mode-s			安静(批处理)模式 (只能与 "ex" 一起使用)-d			Diff 模式 (同 "vimdiff")-y			容易模式 (同 "evim",无模式)-R			只读模式 (同 "view")-Z			限制模式 (同 "rvim")-m			不可修改(写入文件)-M			文本不可修改-b			二进制模式-l			Lisp 模式-C			兼容传统的 Vi: 'compatible'-N			不完全兼容传统的 Vi: 'nocompatible'-V[N][fname]		Be verbose [level N] [log messages to fname]-D			调试模式-n			不使用交换文件,只使用内存-r			列出交换文件并退出-r (跟文件名)		恢复崩溃的会话-L			同 -r-A			以 Arabic 模式启动-H			以 Hebrew 模式启动-T <terminal>	设定终端类型为 <terminal>--not-a-term		Skip warning for input/output not being a terminal--ttyfail		Exit if input or output is not a terminal-u <vimrc>		使用 <vimrc> 替代任何 .vimrc--noplugin		不加载 plugin 脚本-p[N]		打开 N 个标签页 (默认值: 每个文件一个)-o[N]		打开 N 个窗口 (默认值: 每个文件一个)-O[N]		同 -o 但垂直分割+			启动后跳到文件末尾+<lnum>		启动后跳到第 <lnum> 行--cmd <command>	加载任何 vimrc 文件前执行 <command>-c <command>		加载第一个文件后执行 <command>-S <session>		加载第一个文件后执行文件 <session>-s <scriptin>	从文件 <scriptin> 读入正常模式的命令-w <scriptout>	将所有输入的命令追加到文件 <scriptout>-W <scriptout>	将所有输入的命令写入到文件 <scriptout>-x			编辑加密的文件--startuptime <file>	Write startup timing messages to <file>-i <viminfo>		使用 <viminfo> 取代 .viminfo--clean		'nocompatible', Vim defaults, no plugins, no viminfo-h  或  --help	打印帮助(本信息)并退出--version		打印版本信息并退出

vim_291">7、简单vim配置

				1> 打开vim的配置文件的位置sudo vim /etc/vim/vimrc在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~打开自己目录下的.vimrc文件,执行 vim .vimrc2> 去到文件末尾,并添加以下内容 set mouse=aset numberset cindentset st=4set sw=4set sts=43> 保存并退出 解释: 1>set mouse=a    	--->vim中可以用鼠标控制光标2>set number      	--->显示行号 3>set cindent     	--->C语言的编程缩进格式 4>三位一体 :        	--->设置你的tab,一个tab=4个空格set st=4set sw=4set sts=4其他:设置语法高亮: syntax on显示行号: set nu设置缩进的空格数为4: set shiftwidth=4mf:快捷键自动生成初始化代码 map mf i#include <stdio.h><Esc><Esc>oint main(int argc, char *argv[])<Esc>o{<Esc>oreturn 0;<Esc>o}<Esc>2ko 

另外,我的资源中免费上传了Vim中文手册,需要的朋友自取。

以上。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!


http://www.ppmy.cn/server/132794.html

相关文章

RHCE【时间服务器】

目录 NTP服务简介: Chrony简介&#xff1a; 一、软件安装 二、配置时间服务器 三、配置时间服务器的服务端和客户端&#xff0c;并使客户端与服务端的时间进行同步 &#xff08;1&#xff09;服务端配置&#xff1a; &#xff08;2&#xff09;客户端配置&#xff1a; &…

DolphinDB 2024 年度峰会回顾之分论坛:权益类数字基建与技术创新

在这个数字化时代&#xff0c;金融科技正以前所未有的速度发展&#xff0c;而权益类数字基建作为这一进程的核心支撑&#xff0c;正不断推动着金融领域的创新与变革。 DolphinDB 2024 年度峰会的分论坛 A 聚焦《权益类数字基建与技术创新》这一核心议题&#xff0c;邀请到了业…

C#高级编程核心知识点

1、函数参数 &#xff08;1&#xff09;按值传递参数 public void swap(int x, int y) &#xff08;2&#xff09;按引用传递参数 public void swap(ref int x, ref int y) 2、Null可空类型 &#xff08;1&#xff09;1个? ? 单问号用于对 int、double、bool 等无法直…

MySQL行格式

MySQL行格式 ✅ 四种行格式✅ 如何指定行格式&#xff1f;✅ 详细谈谈compact行格式 首先我们知道在MySQL中页是数据读写的最小单元&#xff0c;默认是16KB。页内的记录会组成一个单链表&#xff0c;每条记录就是一行数据&#xff0c;行格式决定了一行数据是如何进行物理存储的…

数据结构6——树与二叉树

在本专栏的前五篇中&#xff0c;我们学习了顺序表、链表、栈和队列&#xff0c;他们本质上都是线性表。有线性表就存在非线性表&#xff0c;现在我们就来学习一下结构更复杂的非线性表——树。 1. 树的概念与结构 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&…

yocto编辑软件包-devtool的使用方法

之前用了很多次devtool&#xff0c;总是忘记用法&#xff0c;故此记录一下。 假设你有一个软件包名叫foo&#xff0c;并且已经下载编译过&#xff0c;需要修改它的源码并生成patch 生成修改工作区 devtool modify foo modify命令会将foo的源码压缩包解压到build/workspace/so…

揭秘计算机的神经系统:探索计算机的基本组成

计算机的基本硬件组成 CPU被比喻为人类大脑&#xff0c;其作用是指挥和控制人体的各项功能。而内存和硬盘则相当于大脑中的记忆板块&#xff0c;用于记录和存储信息。主板则类似于人的神经系统&#xff0c;起到连接和协调人体各个部分的作用。显卡则类似于人的眼睛&#xff0c;…

verdi波形配置

1、修改waveform的波形信号大小 &#xff08;1&#xff09;在../fsdb/novas.rc文件中修改 或者 &#xff08;2&#xff09;在waveform窗口下&#xff0c;点击Tools -> Preferences -> Waveform -> Color / Font / Pattern -> Font -> Pane -> Font -&…