菜鸟vimer成长记——第1章、统一概念
不管学什么技术,我都深信概念是最重要的。是影响整个学习轨迹,决定能在这个技术领域高度。
当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了。
目的
弄清楚这些概念,有助于记忆,举一反三。重复的东西只学一次!!
用键盘不用鼠标
第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法。

具体有两个要注意的建议:
学会盲打
如果你要低头看着键盘打字,或者键位不熟悉,或者指法不舒服,那学习Vim 的好处不会立竿见影地显现出来。要高效地使用Vim,必须学会盲打。
不要离开主键盘
手指千万不要离开主键盘。很多人会说用光标键盘也没事,偶尔用一下或者设置一下鼠标。
不离开的理由:任何操作通过键盘都是可以完成的,只是不知道或者不熟悉而已,只要练习这些时间最终是可以被消除的。而回来切这中间是需要时间的,这些时间再怎么练习也是不可避免的。
组合式的设计理念
vim的学习,特别像汉字学习或者linux学习,通过组合。汉字你只要记几个部首和意义字,很多你没学过字组合在面前也能看得懂。linux,只要记住基本的命令,通过组合可以实现强大复杂的功能。
所以重点在于,通过各个维度划分快捷成独立概念。然后在操作的时候通过组合的方法去思维。
每个快捷即是独立概念
这里要描述的是概念,所以不会穷举快捷。具体的快捷到时会打散到各个模式里的常用操作。
比如:
- 表示动作的有: d(删除),m(移动),co(复制),s(替换),y(复制)等
- 表示移动的有:$(词尾),0(词首),w|b|e(词),G(行),h|j|k|l(方向)等
- 表示重复的量词:n(表示任何正数)
组合这些概念来完成命令
有一句话:越简单越灵活,实现的能力越强大。这是因为组合的存在。
比如:
- "dd" 删除当前行
- "3dd" 删除三行
- "d$" "d"表示删除,$"代表行尾,删除到行尾的内容(包含光标);
- "dw" 表示删除一个单词
- "dG" 表示删除到文件末尾
- "dff" 表示删除到第一个f
正则表达式
vim的操作核心是文本,既然是文本必须会提到正则。如果正则不熟悉,那很多地方是很纠结的。
这里只描述vim使用正则的场景。这里我划分的是两大块内容:通过正则匹配定位到文本,然后通过动作去操作。
想了解更多正则,可以参考下面资源:
应用场景
- 查找(阅读):/|?
- 替换:s
- 删除:d
- 拷贝:co
- 移动:m
更细则的东西将在normal模式里记叙。
所有重复都可以被解决
本质上讲,我们的工作是重复性的。不论是在几个不同的地方做相同的小改动,还是在文档的相似结构间移动,我们都会重复很多操作。凡是可以简化重复性操作的方式,都会成倍地节省我们的时间,都会被vim解决。
下面的举例只为说明问题,可能还不是最佳的方案。
文本操作
vim通过:.命令,;命令,量词,history,宏,vimscript等手段来实现消除重复操作。
但是消除这些重复的关键是以下的思想
不要自我重复
举例说明:
//有以下的文本
//要实现的效果,每行递进缩进一行。
Line one
Line two
Line three
Line four
//千万不要这么操作
//>G
//j >G
//j >G
//j >G
//上面的做法不断再重复>G这两个操作。
//合理一些的操作是
//>G
//j .
//j .
//j .
//当然再合理一些是用宏录制或者还有其他办法
只要是重复的任何操作都可以被解决。这点非常重复!
绝不多使用一个命令
举例说明:
//现在光标在行中间,但是发现行尾没有分号,或者说这行暂时不需要想给注释掉。
//千万不要这么做
//移动$|0
//按i
//输出符号
//合理做法
//直接使用I|A
//输出符号
只要一个命令可以完成的,坚决不使用二个或者多个命令。换句话说,每一个vim命令都是有原子的独立的概念,请最终独立记忆。
使修改可重复
举例说明:
//给+号左右都多加一个空格
var foo = "method(" + argument1 +","+argument2+")";
//千万不要这么做:
//f+
//i空格->(移动光标)空格
//f+ .
//f+ .
//合理作法:
//f+
//s空格+空格
//f+ .
//f+ .
首先,第一种使用了光标移动,这是很费时的,因为要在主键盘和光标区切换。其次也不能实现效果,因为.命令重复的是vim的操作,光标不包括在内。
所以很多时候要思考修改可被重复。
使移动可重复
上面的例子可以再简化。;命令会重复上次查找。因此后面可以输入两次按;即可。
所以,尽量让移动也可以重复。就可以使用;来简化。
理想模式
;命令带我们到下一个目标字符上,而.命令则重复上次的修改。因为连续输入2次;.就可以完成全部。最理想的模式:用一键移动,另一键执行。
IDE操作|个性化操作
只要是重复的都可以被解决。上面说的是文本的重复操作解决方案。除了文本之外还有更多的重复。比如在不同使用功能时使用不同插件。根据自己的个人喜爱,把重复的设置通过配置文件来固化。
比如说
- 在标记快速定位,可以使用ctags插件等。
- 你不用每次都set nu,不用每次都设置缩进。
回退everything
当vim让一个操作或者移动可以方便地重复时,我们经常会不小心操作太快过了头。这时不用担心,vim提供了强大的回退机制。
//目的 操作 重复 回退
//做出一个修改 {edit} . u
//在行内查找下一指定字符 f{char}/t{char} ; ,
//在行内查找上一指定字符 F{char}/T{char} ; ,
//在文档中查找下一处匹配项 /pattern<CR> n N
//在文档中查找上一处匹配项 ?pattern<CR> n N
//执行替换 :s/target/replacement & u
//执行一系列修改 qx{changes}q @x u
模式
Vim 提供一个区分模式的用户界面,就是 说在Vim中按键盘上的任意键所产生的结果可能会不一样,而这取决于当前处于哪种模式 (mode)。知道当前正处于哪种模式,以及如何在各模式间切换,是极其重要的。在后面的系列文章中,这个是重中之重,也会围绕着这些来记叙。主要记叙常用的4种模式。insert,normal,command-line,visual。
无处不在的help
有任何的不清楚或者想知道,都可以通过h: xx,来阅读更详细的帮助信息。
比如
- :h .
- :h ;
- :h vim-modes
还有一个快捷键,K(Shift+k),它能给出你光标上的文本的帮助信息。
vim统一概念很多,不可能一下子所有列举出来。会在后面的文章边学习边总结边补充。如果大家有什么好的想法也欢迎一起探讨。
菜鸟vimer成长记——第1章、统一概念的更多相关文章
- 菜鸟vimer成长记——第0章、我眼中的vim学习
这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系 ...
- 菜鸟vimer成长记——第3章、文件
上一章一直在讲的是vim的文本的操作,本章主要讲的是vim的文件操作. 本章的有些概念和传统的文本编辑器也不尽相同.所以需要注意概念或者切切说是思维习惯的区别. vim 允许在一个编辑会话中编辑多个文 ...
- 菜鸟vimer成长记——目录
菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟v ...
- 菜鸟vimer成长记——第2.1章、normal模式
目的 掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧. 通过normal模式举一反三掌握cmd-line和visual的常用文本操作. 简介 文本操作的理想状态为:一个 ...
- 菜鸟vimer成长记——第4.2章、编程插件
简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,ma ...
- 菜鸟vimer成长记——第4.1章、通用插件
简介 关于插件的分类,此系列只会简单的区分为通用插件和编程插件.通用插件的意思是,不基于任何编程语言都可以使用的插件.编程插件,是针对于编程习惯,或者说是针对于某种语言的插件. 计划中,是先把基本常用 ...
- 菜鸟vimer成长记——第2.4章、cmd-line模式
cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和S ...
- 菜鸟vimer成长记——第4.0章、Vim插件管理利器-Vundle
定义 Vundle是vim bunler和简称,它是一个vim插件管理器. Vim本身缺乏对插件的有效管理,安装插件并配置.vimrc文件非常不便.gmarik受到Ruby的bunler的启发,开发了 ...
- 菜鸟vimer成长记——第2.3章、insert模式
大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概 ...
随机推荐
- scrapy爬虫框架之Xpath选择器
问题: 本篇博文主要记录scrapy框架爬取伯乐在线文章的相关知识,在实践中学习对框架的理解.今天主要记录了xpath的相关用法以及语法规范. ----->>>点击进入爬取页面 一. ...
- 【原创】MySQL 生产环境备份还原
公司需要对生产环境的数据库进行备份,我接下了这份任务. 1. 首先谷歌了以下大家的备份方法 许多都使用到了Xtrabackup这个工具,超大型的公司可能有其他的的备份方法,这个工具对于中小型公司,甚至 ...
- 【转载】QPS,用户平均等待时间,服务器平均请求处理时间
转自:http://www.cnblogs.com/coldplayerest/archive/2012/06/28/2567656.html 1. 计算网络的QPS时,必须要指定并发度,否则没有意义 ...
- php功能模块学习笔记
字符串处理: explode爆炸 implode聚爆explode() 把字符串打散为数组.语法:explode(separator,string,limit) 本函数返回由字符串组成的数组, ...
- 【bzoj 4710】 [Jsoi2011]分特产
题目 容斥加组合计数 显然答案是 \[\sum_{i=0}^n(-1)^i\binom{n}{i}f_{n-i}\] \(f_i\)表示至多有\(i\)个人没有拿到特产 考虑求\(f\) 发现\(m\ ...
- 【洛谷】【线段树】P3353 在你窗外闪耀的星星
[题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...
- P2418 yyy loves OI IV
题目背景 某校2015届有两位OI神牛,yyy和c01. 题目描述 全校除他们以外的N名学生,每人都会膜拜他们中的某一个人.现在老师要给他们分宿舍了.但是,问题来了: 同一间宿舍里的人要么膜拜同一位大 ...
- [USACO08NOV]Mixed Up Cows
嘟嘟嘟 一看n那么小,那一定是状压dp了(表示从没写过,慌). 首先dp[i][j](i 是一个二进制数,第x位为1代表选了第x头牛),表示 i 这个状态最后一头牛是第 j 头牛时的方案数. 然后当 ...
- 怎么在移动端模拟pc端进行web开发调试日志
由于移动端开发,许多地方需要进行手势交互开发,而在pc模拟手机浏览器中不能进行模拟手势,所以无法查看日志,于是网上找了一个,腾讯vConsole,感觉还可以,分享给大家安装也方便 我的项目是基于vue ...
- LeetCode559. Maximum Depth of N-ary Tree
第一次写出了具有迭代和递归的函数,还是有点收获的,虽然题目比较简答 当要对某些对象重复使用时,考虑循环,也就是迭代 当函数可以简化一个重复的操作时,考虑递归,而且就当下一次使用这和函数的结果已经有啦, ...