vim 从嫌弃到依赖(6)——插入模式
插入模式是vim中主要用来处理输入的一种模式,在这种模式中,用户的输入的字符会显示在窗口中。该模式中的行为与在普通编辑器中输入类似。由于在该模式中输入的字符会被当做有效输入,因此该模式下涉及的到命令也少,内容也不多,这一篇文章差不多就能讲完
进入插入模式的一些命令
在前面几节我们在介绍一些例子的时候或多或少接触到了如何进入插入模式,特别是用的比较多的 i、c 等命令。而且还介绍了一些复合命令,有些复合命令同时也肩负着进入插入模式的职责。这里列出一些常用的进入插入模式的方法,也算是对之前的一些命令做一个总结。
| 命令 | 含义 |
|---|---|
| i | 在当前光标前进入插入模式 |
| I | 在行首进入插入模式 |
| a | 在当前光标后面进入插入模式 |
| A | 在行尾进入插入模式 |
| o | 在下一行进入插入模式 |
| O | 在上一行进入插入模式 |
| s | 删除当前光标所在字符并进入插入模式 |
| S | 删除光标所在行并进入模式 |
| c + motion | 删除指定范围的字符,并进入插入模式 |
| C | 删除光标所在位置至行尾的字符,并进入插入模式 |
在插入模式中删除字符
在插入模式中输入出错,我们一般会退出到普通模式下使用c或者d之类的指令进行删除操作,然后重新进入插入模式,但是有时候这种方式显的有些啰嗦。
其实在插入模式中是可以进行删除操作的,例如如果要删除的字符刚好在光标前面,我们可以使用退格键删除它。另外vim提供了其他几种方式在插入模式中向前删除单词、行
- <Ctrl + h>: 删除光标前一个词(与退格键相同)
- <Ctrl + w>: 删除光标前一个单词
- <Ctrl + u>: 删除至行首
插入-普通模式
从插入模式返回到普通模式可以使用 \<Esc\> 键,或者使用 <C-[>, 但是在某些情况下我主要的经历还是集中在编写代码或者文档上面,之前也说过vim 作为编辑器应该要符合人的一般使用习惯,在文思如泉涌的时候退回到普通模式总有种割裂感,普通模式应该是我们在需要调整思路的时候回去最好。
假设我在写文档或者写代码的时候光标已经到窗口的最后一行了,但是我想将光标定位到窗口中央,一般都会先退回到普通模式,然后使用前面介绍过的 zz来完成这一动作,最后再进入插入模式。
针对这种情况vim 提供了一种新的模式 插入—普通模式,在插入模式中使用Ctrl + o 来进入该模式。该模式运行用户暂时回到普通模式,然后在执行一条普通模式的命令之后自动回到插入模式中。
例如针对上面的例子,可以使用 \<Ctrl +o>zz 来刷新光标位置

插入非常用字符
在平时输入的时候,除了常用的英文单词或者汉字之类的字符还有一些非常用字符,例如unicode 图标或者ascii 字符,或者其他键盘无法直接打出的字符。vim 支持使用通过字符的二进制编码进行输入
- <Ctrl + v> {code}:按照字符的十进制编码输入,这里code只能输入单字节的字符
- <Ctrl +v>u{code}: 按照字符的16进制编码输入,这里可以支持两个字节的字符输入,例如unicode
例如可以使用该方式输入字符A,A在ascii表的十进制值是65,因此在插入模式下使用 <Ctrl v>65 然后回车即可

这里再给出一个输入unicode字符的例子,例如我们输入一个安卓的小机器人,通过查询对应的unicode字码表,它的16进制值是 e70e,那么我们就可以输入<Ctrl v>ue70e

除了输入字符表中的例子,也可以输入二合字符。可以使用 <C-k>{char1}{char2} 来输入二合字符,例如要输入分数 1/2可以使用<C-v>12 来进行。
这个技巧也是 《vim实用技巧》 书中介绍的,可以在vim中使用 :h digraph-table 来查看二合字母表。平时写代码基本用不到这个,所以这里就一笔带过吧。
替换模式
vim 中的替换模式与改写模式类似。它会将光标所在字符替换为新输入的字符,按照 vim官方文档的说法,替换模式不会变更文本自身的长度,只会在现有长度上替换已有文本。只有在光标超出原有文本长度时才会表现出插入字符这一特性。而且在替换模式下没有删除的操作。

在某些情况下替换可能会导致代码格式错乱,如果代码中某些位置存在制表符,而制表符的宽度会根据tabstop 的值不同,而显示不同,例如vim 默认的制表符占8个空格,如果我们使用R 进入替换模式,替换tab键的话,原来的tab键所有空白字符都会被替换,这样会导致文本长度发生变化。如果不希望长度变化,vim提供了一种被称之为虚拟替换模式的方式,可以使用 gR 进入,这样再替换制表符的话,制表符被替换为一个字符+ 多余的空格,源文本长度不变。
- 使用普通的替换模式

- 使用虚拟替换模式

除了进入和退出替换模式,如果只是想替换一次,可以使用r{char}和gr{char}暂时进入替换模式,替换一个字符后立即回到普通模式
替换模式就我自己来说用的还是比较少的,除非我只需要替换个别字符导致的拼写错误。一般我更习惯删除整个单词,然后重新输入。至于虚拟替换模式解决tab 的问题,我更喜欢使用一些配置将tab 键改为空格,这里我们在配置文件中再添加几行
-- nvim lua 配置
vim.o.softtabstop = 4
vim.o.shiftwidth = 4
vim.o.expandtab = true
# vimscript
set softtabstop=4
set shiftwidth = 4
set expandtab = true
这几行会将tab替换为4个空格,并且在一些代码中,如果加入了自动缩进的属性,在输入下一行的时候它会自动以4个空格进行缩进
到这里,插入模式下的一些内容都介绍完了,插入模式主要用来做文本输入,与在其他编辑器中输入文本相比并没有太大的区别,所以内容比较少,只需要一篇就结束了。请各位多多支持,订阅专栏,关注作者。方便接收更新推送和日后系统性的回顾,谢谢大家
vim 从嫌弃到依赖(6)——插入模式的更多相关文章
- Vim使用技巧(2) -- 插入模式技巧 【持续更新】
组合快捷键 Ctrl + h //删除前一个字母(同退格键) Ctrl + w //删除前一个单词 Ctrl + u //删除到行首 Esc //切换到普通模式 Ctrl + [ //切换到普通模式 ...
- 无意发现vim里插入模式可以借助Alt键输入一些特殊字符
无意发现vim里插入模式可以借助Alt键输入一些特殊字符.如: Alt+w: ÷ Alt+:: » Alt+f : æ Alt+ . : ® Alt+ ? : ¯...
- VIM下的插入模式的相关知识:
1. 建议:当打错一个单词时,删除掉重新打一遍, 避免在错誤的基础上进行修改: 2. 在插入模式下,可以用一些组合键,它也可以用于VIM 命令模式下,也可以用于 base shell 下: ctrl- ...
- 【vim】插入模式与常用编辑操作
vim不像很多编辑器那样一启动便可以直接编辑文本,需要在普通模式按下i, a等键才会进入插入模式进行文本编辑. 如何进入插入模式 以下的命令都会让vim从普通模式切换到插入模式,但命令执行后的字符插入 ...
- vim在插入模式粘贴代码缩进问题解决方法
转载自:https://blog.csdn.net/commshare/article/details/6215088 在vim粘贴代码会出现缩进问题,原因在于vim在代码粘贴时会自动缩进 解决方法: ...
- vim 第三章 插入模式
vim 第三章 插入模式 在普通模式下可以删除 复制 及粘贴的命令 在插入模式下也存在以中方便快捷的方式 能够粘贴寄存器中文本 两种方式来插入键盘上不存在的非常用字符 替换模式 ...
- Vim技巧之四大模式_插入模式
Vim技巧之四大模式_插入模式 在插入模式中及时更正错误 插入-普通模式 在插入模式模式以下直接粘贴指定寄存器的内容 插入模式中做运算 用字符编码插入很常使用字符 替换已有的文本 Vim技巧之四大模式 ...
- 解决Vim插入模式下backspace按键无法删除字符的问题【转】
本文转载自:https://blog.csdn.net/zxy987872674/article/details/64124959 最近使用某个服务器编辑文件时,快捷键i进入插入模式后,下方不出现in ...
- vim 基础学习之插入模式
插入模式1.字符编码,插入特殊字符 <C-v>{3位} 如,你想输入A,你可以在输入模式下<C-v>065(必须是3位) <C-v>u{4位} 如,你想输入¿,你可 ...
- 如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?
分成两种情况来说明: 如果是在 shell 即: gnome-termial终端中, 来启动或 使用 vim的话, 你是 无法 实现这种需求的: 改变vim中的光标形状 : 在插入状态下显示为 bea ...
随机推荐
- 4个工具,让 ChatGPT 如虎添翼!
LightGBM中文文档 机器学习统计学,476页 机器学习圣经PRML中文版 经典著作<机器学习:概率视角 让 ChatGPT 如虎添翼! ChatGPT 很好用,其核心是prompt的运用, ...
- 解读IDC《中国视频云市场跟踪》最新报告,视频云将趋向何方?
国际权威咨询公司IDC发布<中国视频云市场跟踪(2021 H2)>报告,阿里云连续四年稳居中国视频云整体市场份额第一,整体市场份额占比达26.9%. 时至2021,中国视频云的数字背后 近 ...
- #2054:A == B ?(水题坑人)
Problem Description Give you two numbers A and B, if A is equal to B, you should print "YES&quo ...
- AtCoder Beginner Contest 168 (A~E,E题很有意思)
比赛链接:Here AB水题, C - : (Colon) 时针转过得角度为:\(2π \times \frac{h + \frac m{12}}{12}\) 分针转过得角度为:\(2π \times ...
- spring中这些编程技巧,真的让我爱不释手
前言 最近越来越多的读者认可我的文章,还是挺让人高兴的.有些读者希望我多分享spring方面的知识点,能够在实际工作中派的上用场.我对spring的源码有过一定的研究,结合我这几年实际的工作经验,把s ...
- 如果很好说出finalize用法,面试官会认为你很资深
我在面试Java候选人的时候,有时候会通过finalize问及候选人在JVM方面的技能,一般的问法是:你知不知道finalize方法,在项目里有没有重写过这个方法?在本文里就将详细来说下这个知识点. ...
- TapTap 算法平台的 Serverless 探索之路
分享人:陈欣昊,TapTap/IEM/AI平台负责人 摘要:本文主要介绍心动网络算法平台在Serverless上的实践. <TapTap算法平台的 Serverless 探索之路> Ser ...
- java bean和String之间相互转化
开发中有的表字段特别多,在数据传递过程中要写很多类似实体类的get.set方法把字符串型的数据放到对象里然后,在做存储之类的操作,如果实体的字段少不会觉得多麻烦,但是字段如果有几十个或者更多那么这种简 ...
- k8s探针详解
一.探针类型 Kubernetes(k8s)中的探针是一种健康检查机制,用于监测Pod内容器的运行状况.主要包括以下三种类型的探针: 1.存活探针(Liveness Probe) 2.就绪探针(Rea ...
- C#排序算法4:希尔排序
希尔排序是插入排序的一种又称"缩小增量排序"(Diminishing Increment Sort),它是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减 ...