首先,其他的文本编辑器只有一种模式,就是插入模式。而vim一下子颠覆了我们的世界观——有好多模式。这个是思维上的切换,很难也很重要!!!

  其次,Vim 提供一个区分模式的用户界面。也就是说在不同的模式下相同的键位可能产生的结果不一样。好多快捷怎么记忆?记忆后过段时间不使用又还给vim了。这个是因为没有弄清楚职责和使用场景,没有构建成套的vim知识体系。而我们这里通过模式为载体来构建vim知识体系。

目的

  介绍vim的常用模式职责模式切换,减少由于不断思考和纠正什么场景用什么模式的什么操作而引起的重复时间。

简介

  模式主要有两大类:基础模式和衍生模式。每一类又有好多模式。更详细的可以直接使用:h vim-modes

  这里主要讲的是基础模式里常用的4种模式。基于这4种模式会涉及到其他模式。

常用模式职责

  职责主要从以下两个方面考虑

  • 独有:这个职责是本模式独有的,不可取代
  • 擅长:这个职责是本模式相比其他模式的相同功能操作起来更快

insert

独有

  • 当且仅当有输入当前文本不存在的新文本的需求时,才需要进到insert模式。如果没有前面的需求,不要随意的进入insert,因为来回切换很费时费力。

擅长

  • 顺序的编辑文本内容时,当然这些编辑里必须有新的输入,不然也不应该使用insert模式。此时可以通过自动提示和寄存器更快捷的编辑文本,在编辑新文本的同时更快集成现有文本的操作

visual

  ?自己还没想太明白 。目前没有比较好的场景。欢迎大家一起学习讨论。

normal

独有

  • 行级别的光标移动:左右,单词移动
  • 屏蔽滚动。
  • 录制宏。

擅长

  一次快捷键直接可以直接选中区域的操作,然后直接执行动作。即一个移动+一个动作,之前有提到的理想状态。对比区别cmd-line的文本编辑场景。

cmd-line

独有

  • 从其他途径直接文本读写。从其他文件读入文本,从命令读入文本等。
  • 文件操作。新建,保存,另存为,文件切换。
  • 编辑器形为配置。通过 set,设置编辑器的形为。
  • 调用shell命令。可以在编辑器里使用命令。

擅长

  • 涉及到范围的文本编辑。直接进入命令模式,用一条完整的命令输入来解决,此时是先范围,然后再执行动作,思维更为完整。对比区别normal的文本编辑场景。

模式切换

模式切换的中转

  这个中转就是normal模式。

  虽然有很多种模式。但是有些模式之间并不能切换。详情可以通过:h vim-modes查看

  

  简单记忆:切换模式之前先退到normal模式,然后再进去要切换的模式。有些特殊模式切换会在下面记录

常用切换

*-->normal

  按Esc或者Ctrl+[,即可回到normal。网上也很多修改映射的。不过个人比较习惯按esc,刚好在切换模式,稍微调整一下思维,让紧张的思维缓和一下。

normal-->cmd-line

  按 /|?|:|!,即切换到cmd-line。

normal-->visual

  • 快捷键:v,功能:自由选取
  • 快捷键:ctrl+V,功能:列选取
  • 快捷键:Shift+V,功能:行选取

normall-->insert

  这个是最常用的切换模式。需要注意的是每一个操作都是一个独立的完整概念,都有其对应场景。

  • 快捷键:i,  功能:在光标左侧输入正文。
  • 快捷键:I,  功能:在行首(不包括空白字符,比如空格)插入。
  • 快捷键:gi, 功能:插入到上一次进入插入模式光标的位置。
  • 快捷键:gI,功能:在行首插入(注意区别I)
  • 快捷键:a, 功能:在光标后插入
  • 快捷键:A, 功能:在行末插入
  • 快捷键:s, 功能:删除光标所在的字符再插入
  • 快捷键:S, 功能:删除整行再插入
  • 快捷键:c, 功能:更灵活的插入,一般后面跟定位词($,b,w,0等),cc表示删除整行进入插入模式。
  • 快捷键:C, 功能:删除光标到行末的内容再插入
  • 快捷键:o, 功能:在当前行之下新建行
  • 快捷键:O,功能:在当前行之上新建行

特殊切换

insert-->insert normal

  这是一个特殊从insert切换到insert normal,输入Ctrl+O。此时会执行"一个"normal操作,然后继续返回insert

  应用场景

  • 在当前行正好处于窗口顶部或底部时,有时我会滚动一下屏幕,以便看到更多的 上下文。用zz 命令可以重绘屏幕,并把当前行显示在窗口正中,这样就能够阅读当 前行之上及之下的半屏内容。我常常会键入<C-o>zz,在插入-普通模式中触发这条命 令。此操作完成后就会直接回到插入模式,因此我可以不受中断地继续打字。

本文基于现在的认知所总结出来,在后续的学习中会不断持续修订认知。欢迎大家讨论指正。


菜鸟vimer成长记——第2.0章、模式初探的更多相关文章

  1. 菜鸟vimer成长记——第4.0章、Vim插件管理利器-Vundle

    定义 Vundle是vim bunler和简称,它是一个vim插件管理器. Vim本身缺乏对插件的有效管理,安装插件并配置.vimrc文件非常不便.gmarik受到Ruby的bunler的启发,开发了 ...

  2. 菜鸟vimer成长记——第2.4章、cmd-line模式

    cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和S ...

  3. 菜鸟vimer成长记——第2.1章、normal模式

    目的 掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧. 通过normal模式举一反三掌握cmd-line和visual的常用文本操作. 简介 文本操作的理想状态为:一个 ...

  4. 菜鸟vimer成长记——第4.1章、通用插件

    简介 关于插件的分类,此系列只会简单的区分为通用插件和编程插件.通用插件的意思是,不基于任何编程语言都可以使用的插件.编程插件,是针对于编程习惯,或者说是针对于某种语言的插件. 计划中,是先把基本常用 ...

  5. 菜鸟vimer成长记——第2.3章、insert模式

    大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概 ...

  6. 菜鸟vimer成长记——第2.2章、visual模式

    vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来 ...

  7. 菜鸟vimer成长记——第4.2章、编程插件

    简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,ma ...

  8. 菜鸟vimer成长记——目录

    菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟v ...

  9. 菜鸟vimer成长记——第0章、我眼中的vim学习

    这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系 ...

随机推荐

  1. 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率

    1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语 ...

  2. Mysql源码安装shell脚本

    #!/bin/bash#date:2019/1/20#by author zhangjia#install mysql#shell_name:mysql_auto_install.sh######## ...

  3. 多数据源报错 expected single matching bean but found 2: xxx,xxx

    问题: expected single matching bean but found 2: xxx,xxx 原因:在 Spring 容器中配置了两个类型Bean,Spring 容器将无法确定到底要用 ...

  4. 封装简单的mvc框架

    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式. MVC把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). PH ...

  5. zabbix的日常监控-API

    Zabbix API提供两项主要功能: 远程管理Zabbix配置 远程检索配置和历史数据 官方文档:https://www.zabbix.com/documentation/3.4/zh/manual ...

  6. GIT非常见命令使用笔记

    1:修改已经提交N次代码的user.name和user.email 解决我在多电脑间,使用不同账户,git config 的global,system,local配置忽略改动,而添加了多台电脑ssh ...

  7. python pandas dataframe 操作记录

    从数据看select出数据后如何转换为dataframe df = DataFrame(cur.fetchall()) 如何更改列名,选取列,进行groupby操作 df.columns = ['me ...

  8. CF600E:Lomsat gelral(线段树合并)

    Description 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. Input 第一行一个$n$.第二行$n$个数字是$c[i]$.后面$n-1$ ...

  9. 1305. [CQOI2009]跳舞【最大流+二分】

    Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会 ...

  10. 「GXOI / GZOI2019」旧词

    题目 确定这不是思博题 看起来很神仙,本来以为是\([LNOI2014]LCA\)的加强版,结果发现一个点的贡献是\(s_i\times (deep_i^k-(deep_i-1)^k)\),\(s_i ...