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

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

文章目录

  • 普通模式
    • 技巧007:停顿时请移开画笔
    • 技巧008:把撤销单元切成块
    • 技巧009:构造可重复的修改
    • 技巧010:用次数做简单的算术运算
    • 技巧011:能够重复,就别用次数
    • 技巧012:双剑合璧,天下无敌
  • 插入模式
    • 技巧013:在插入模式中可即时更正错误
    • 技巧014:返回普通模式
    • 技巧015:不离开插入模式,粘贴寄存器中的文本
    • 技巧016:随时随地做运算
    • 技巧017:用字符编码插入非常用字符
    • 技巧018:用二合字母插入非常用字符
    • 技巧019:用替换模式替换已有文本
  • 参考

普通模式

  • 其他文本编辑器大部分时间都处于类似 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> 这些光标键,将会产生一个新的撤销块

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

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

技巧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实用技巧》,书籍写的很好,强烈建议读一读

Vim实用技巧_2.普通模式和插入模式相关推荐

  1. vim实用技巧(第二版)........持续更新ing

    全书共123个技巧,每天更新两个,计划两个月更新完. (目前更新完技巧39) vim实用技巧第二版全部教学内容 前言 第1章 Vim解决问题的方式  技巧1 认识 . 命令  技巧2 不要自我重复   ...

  2. Vim实用技巧pdf

    下载地址:网盘下载 内容简介  · · · · · · vim是一款功能丰富而强大的文本编辑器,其代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中得到非常广泛的使用.vim能够大大提高程序 ...

  3. 《Vim实用技巧(第2版)》——2.6 双剑合璧,天下无敌

    本节书摘来自异步社区<Vim实用技巧(第2版)>一书中的第2章,第2.6节,作者:[英]Drew Neil(尼尔)著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  4. 《Vim实用技巧(第2版)》学习笔记:技巧12-双剑合璧,天下无敌

    <Vim实用技巧(第2版)>学习笔记:技巧12-双剑合璧,天下无敌 1. 操作符 + 动作命令 = 操作 d{motion}命令可以对一个字符.一个完整单词或一整个段落进行操作,它作用的范 ...

  5. 《Vim实用技巧(第2版)》——1.4 执行、重复、回退

    本节书摘来自异步社区<Vim实用技巧(第2版)>一书中的第1章,第1.4节,作者:[英]Drew Neil(尼尔)著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. Vim实用技巧:global命令

    :global命令结合了Ex命令与Vim的模式匹配这两方面能力.凭借该命令,可以在某个指定模式的所有匹配行上运行Ex命令.就处理重复工作的效率而言,global 命令是除点范式以及宏之外,最为强大的V ...

  7. vim实用技巧-笔记(第九章)

    vim实用技巧-笔记(第九章) 前言 我记得很早以前我就说过了,我是一个菜鸟,我写博客的主要目的不是为了别人,更多的是为了记录自己的成长过程.如果阁下认为我的行为是在划水的话,那我也不妨大方地承认. ...

  8. Vim实用技巧高清完整版PDF中文

    Vim实用技巧高清完整版PDF是一本中文版的参考教材,该书适合想要学习和掌握 Vim 工具的读者阅读,有一定 Vim 使用经验的程序员,也可以参考查阅以解决特定的问题. 欢迎大家下载阅读学习:http ...

  9. @程序员,不容错过的 Vim 实用技巧请查收!

    Vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 Vi 编辑器的加强版.一直以来,Vim 普遍被推崇为类 Vi 编辑器中最好的一个,其拥有代码补全.编译及错误跳转等诸多丰富的功能, ...

最新文章

  1. 编写高性能Java代码的最佳实践
  2. 2018-2019-1 20189204《Linux内核原理与分析》第三周作业
  3. Appium adb 获取真实 appActivity
  4. matlab做TSP,基于matlab TSP问题遗传算法的实现
  5. C++中返回对象的情形及RVO
  6. 【大会】编码、画质评价与网络协议的未来
  7. php多进程mysql更新不了_php MYSQL 数据更新修改不了
  8. 千年鸿蒙 盼尔来兮是什么意思,鸿蒙是什么意思_鸿蒙的意思和出处_我爱历史网...
  9. 可以输入也可以下拉选择的select
  10. 如何计算MP3总时长的问题(三)--对于变比特率MP3求总时长
  11. 【STM32】HAL库 STM32CubeMX教程六----定时器中断
  12. vue-cli(vue脚手架)搭建
  13. 考研数据结构代码总结
  14. java笔试题及答案
  15. HTTP协议格式详解(总结)
  16. 同学聚会幽默 , 小学生搞笑图片
  17. 计算机毕设(附源码)JAVA-SSM交通事故证据交易平台
  18. centos7安装N卡驱动和conda pytorch1.7.1深度学习环境
  19. 抛物线公式即辛卜生(Simpson)公式的数值积分的Python程序
  20. C# 将dataTable中的数据导出到excel表中

热门文章

  1. Linux每日背诵(七)
  2. 用php如何设置页边距_Word2019文档设置页边距的方法
  3. 虚拟机中 Linux 连不上网原因
  4. 初探Oracle:Oracle用户管理命(命令)
  5. Cookie获取、保存与读取
  6. 开启教室照明“服务认证“,提升企业竞争地位
  7. MacBook设置定时关机
  8. html设置鼠标背景,js设置鼠标悬停改变背景色实现详解
  9. (转载)Honeypot技术讲解
  10. 文本表征 Text Representation