Vim实用技巧_2.普通模式和插入模式

下面介绍vim的几种常用模式的技巧

  • vim有4种模式普通模式插入模式可视模式命令模式
  • 为什么要分这么多模式?
    想一想我们平时常用的编辑工具word,应该是将上面4种模式融合在一起的;这种做法的优点是上手简单,缺点是离不开鼠标;vim的几种模式都有大量的快捷键,可以脱离鼠标(缺点是上手难)
  • 内容:下面先介绍2种模式:普通模式插入模式
  • 提示:想详细学习的,可以看参考的书籍

普通模式

  • 其他文本编辑器大部分时间都处于类似 Vim 插入模式的状态中,因此,对 Vim 新手来说,把普通模式(normal mode)当成默认状态看起来很奇怪。在技巧 7 中,我们将以一个画家的工作区作为类比,来解释其原因

  • 通模式命令的强大,很大程度上源于它可以把操作符与动作命令结合在一起。在本章的最后,我们将看到这种结合所达到的效果

技巧007:停顿时请移开画笔

对不习惯 Vim 的人来说,普通模式看上去是一种奇怪的缺省状态,但有经验的Vim 用户却很难想象还有其他任何方式

本节使用了一个比喻来说明为什么 Vim 要采用这种方式

就像画家只花一小部分时间涂色一样,程序员也只花一小部分时间编写代码。绝大多数时间用来思考、阅读,以及在代码中穿梭浏览。而且,当确实需要做修改时,谁说一定要切换到插入模式才行?

在普通模式下,我们可以重新调整已有代码的格式,复制它们,移动其位置,或是删除它们

技巧008:把撤销单元切成块

在其他编辑器中,输入一些词后使用撤销命令,可能会撤销最后输入的词或字符。然而在 Vim 中,我们自己可以控制撤销的粒度

# u 键会触发撤销命令,它会撤销最新的修改
# 一次修改也包括了在插入模式中输入(或删除)的文本,因此,i{insert some text}<Esc> 是一次修改
  • 在不区分模式的文本编辑器中

输入一些单词后使用撤销命令,有两种可能:1.撤销一个字符,2.撤销一个单词

  • 在 Vim 中

我们自己可以控制撤销命令的粒度。从进入插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。因此,只要我们控制好对 <Esc> 键的使用,就可使撤销命令作用于单词、句子或段落

提示:在插入模式中移动光标会重置修改状态

细节:当提到撤销命令会回退从进入插入模式到退出此模式期间输入(或删除)的全部字符时,略过了一个小细节

如果在插入模式中使用了 <Up><Down><Left><Right> 这些光标键,将会产生一个新的撤销块

你可以把这想象为先切换回普通模式,然后用 hj kl 命令对光标进行了移动

唯一区别是我们并没有退出插入模式。这也会对 . 命令的操作产生影响

技巧009:构造可重复的修改

Vim 对重复操作进行了优化,要利用这一点,我们必须考虑该如何构造修改

很多命令两个组合使用就是操作整行,重复命令:dd:删除光标所在行;yy:复制光标所在行;cc:删除光标所在行,且进入insert模式

  • 示例:假设光标位于行尾处的字符“h”上,而我们想要删除单词“nigh”,有如下几种操作

在这里插入图片描述

  • 解释如下

在这里插入图片描述

aw:“a word“,表示的是一个单词的意思(参考:h aw

小技巧:"+p"+y负责沟通剪切板和vim缓冲区的用命令,后面技巧有消息介绍

技巧010:用次数做简单的算术运算

大多数普通模式命令可以在执行时指定次数,我们可以利用这个功能来做简单的算术运算

示例1:加减法

原理<C-a><C-x>命令分别对数字执行加和减操作

示例:如果我们把光标移到字符 5 上,执行 10<C-a>就会把它变成 15

提示:如果光标不在数字上,那么 <C-a> 命令将在当前行正向查找一个数字;如果找到了,它就径直跳到那里并加1,没有找到就算了

示例2:用“news”替换单词“blog”,以及把“0px”改为“-180px”

  • 1.数字替换常规操作

一种做法是用 f0 跳到此数字,然后进入插入模式手动修改它的值,即i-18<Esc>

  • 2.简单算数运算

在这里插入图片描述

cw:change-word

提示:vim默认是八进制,可以在vimrc里面加入set nrformats=改成十进制

技巧011:能够重复,就别用次数

具体使用次数还是重复,看个人需要

示例:Delete more than one word,要一次删除2个单词(光标在m,删除掉more than)

3种实现方式:

  • d2w:先调用删除命令,然后以 2w 作为动作命令;解读为“删除两个单词
  • 2dw:次数作用于删除命令,而动作命令只跨越一个单词,我们可以把这解读为“做两次删除单词的操作
  • dw.:解读为“删除一个单词,然后重复上次的操作

还原:d2w2dwu会一次撤销;dw.:要执行uu进行撤销,或者2u

技巧012:双剑合璧,天下无敌

Vim 的强大很大程度上源自操作符与动作命令相结合。在本节,将看到它是如何工作的,并考虑其寓义

操作符 + 动作命令 = 操作

  • vim的操作符命令

在这里插入图片描述

提示:d命令上面解释的是删除,实际不准确,应该解释成剪切更合适

  • 操作符 + 动作命令,是一种语法

在这里插入图片描述

#1.要学会   操作符+动作命令  这种组合语法
daw 删除一个单词
gU 转换为大小
gUaw 把当前单词转换成大写形式

#2.作用于段落的 ap 动作命令
dap 删除整个段落
gUap 把整段文字转换为大写

#3.额外规则(当一个操作符命令被连续调用两次时,它会作用于当前行)
dd 删除当前行
>> 缩进当前行
gU 命令是一种特殊情况,可以用 gUgU ,也可以用简化版的 gUU 来使它作用于当前行

插入模式

尽管删除、复制以及粘贴命令都是在普通模式中执行的,不过我们将会看到一种方便快捷的方式,让我们无需离开插入模式就能粘贴寄存器中的文本

技巧013:在插入模式中可即时更正错误

如果在插入模式下撰写文本时出了错,我们可以立刻对它进行更正,而无需切换模式

要迅速更正错误,除了用退格键外,我们还可以用插入模式中的其他一些命令

在输入错误时,我们可以用退格键删除错误的文本,然后再输入正确的内容

这会导致在插入模式和普通模式之间来回切换**,有没有在插入模式下直接使用的删除命令呢?有**

在这里插入图片描述

其中的<C-w><C-u>很实用

提示:这些命令不是插入模式所独有的,甚至也不是 Vim 所独有的,在 Vim 的命令行模式中,以及在 bash shell 中,也可以使用它们

技巧014:返回普通模式

插入模式只专注于做一件事,就是输入文字,而普通模式却是我们大部分时间所使用的模式(顾名思义),因此能快速在这两种模式间切换是很重要的;本节将介绍一些技巧,可以减少模式切换所带来的损耗

在这里插入图片描述

应用:当我们处于插入模式时,想运行一个普通模式命令,然后马上回到原来的位置继续输入,此时<C-o>就能实现这种场景(实际使用感觉没什么太大作用)

  • 示例1:当前行显示在窗口正中(zz命令,实用命令)

在这里插入图片描述

  • 示例2:在输入场景中,直接<C-o>d$可以删除当前行中光标后面的字符

技巧015:不离开插入模式,粘贴寄存器中的文本

Vim 的复制和粘贴操作一般都在普通模式中执行,不过有时我们也许想不离开插入模式,就能往文档里粘贴文本

在这里插入图片描述

示例:把Practical Vim复制到一个寄存器中,然后在插入模式中把它添加到第二行结尾

在这里插入图片描述

动作解释:

在这里插入图片描述

提示1:<C-r><C-p>{register} 命令则会更智能一些,它会按原义插入寄存器内的文本,并修正任何不必要的缩进

提示2:<C-r>0操作是省去了在普通模式和插入模式来回切换的一次操作,一定要学会这个操作

技巧016:随时随地做运算

表达式寄存器允许我们做一些运算,并把运算结果直接插入到文档中

大部分的 Vim 寄存器中保存的都是文本,要么是一个字符串,要么是若干行的文本。删除及复制命令允许我们把文本保存到寄存器中,而粘贴命令则允许我们把寄存器中的内容插入到文档里

不过表达式寄存器则是个另类,它可以用来执行一段 Vim 脚本,并返回其结果;可以用 = 符号指明使用表达式寄存器

在插入模式中,输入 <C-r>= 就可以访问这一寄存器

在这里插入图片描述

技巧017:用字符编码插入非常用字符

Vim 可以用字符编码(Character Code)插入任意字符;使用此功能可很方便地输入键盘上找不到的符号

提示:这个平时编码用不到,倒是ga有点用

语法:在插入模式中输入 <C-v>{code}即可,其中{code}是要插入字符的编码

  • 3位数:想插入大写字母“A”,它的字符编码是 65,因此我们需要输入 <C-v>065
  • 4位数:输入 <C-v>u{1234} (注意数字前的 u

ga:如果你想知道文档中任意字符的编码,只需把光标移到它上面并按 ga 命令

技巧018:用二合字母插入非常用字符

不常用,暂时未整理

技巧019:用替换模式替换已有文本

不常用,暂时未整理

参考

  • 《Vim实用技巧》,书籍写的很好,强烈建议读一读
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值