标签:
首先,其他的文本编辑器只有一种模式,就是插入模式。而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章、模式初探
标签:
原文地址:http://www.cnblogs.com/ansn001/p/4646072.html