Life Recording

~Make Memories Last Forever~

All Posts Under: vim

学习VIM模式篇之正常模式Tip9: 构建可重复的变更

VIM有一项很方便的特性, 就是能够充分利用“重复”(repetition)。 因此, 为了能很好地利用这么一项特性, 在平时, 我们需要下意识地在习惯上去构建这种可重复的变更。 方法总是比问题多, 同样地, 在用VIM解决我们需要的问题的时候, 可采用的方案也是非常多的。 衡量哪种方案相对最高效, 我们可以不妨参考哪个对应方案所需要的按键次数最少(fewest keystrokes)。 《Practical Vim》- Tip 9中提供了一个实例, 以及分别列举三种可采用的方案。 好, 让我们开始吧。 (实例, 我就重新换个) 假设, 我们打开一个名为“Tip9.txt”的文本(当然, 用vim)。 里面的内容是: Hello, i'm test file 实例操作前提: 光标置于文档末位, 即此例中file的e: Hello, i'm test file 方案1: 向后删除 开始: Hello, i'm test file db: Hello, i'm test e x: Hello, i'm…
Continue Read

学习VIM模式篇之正常模式Tip8: 打造属于你的撤销(Undo)命令

在很多其他的文本编辑器当中,每当我们在输入后调用撤销命令的时候,大部分情况下恢复的都是最后输入的那个词甚至是字符。 然而, 在VIM当中, 我们可以控制撤销命令的粒度(granularity)。 在Normal Mode中: u命令起到撤销的作用, 它能用来恢复最近的改动。 根据我们在Tip1, Tip4, Tip6当中的内容, 且参考.命令中改变(Change)的范围, 我们不难得出: 一个改变可以是任何对文档中文本的改动, 包括从Normal、Visual 以及 Command-Line Mode当中调用的命令, 也包括任何在Insert Mode当中被输入或者被删除的文本。 (即在Tip6中提到的, 在Normal Mode中, 如i{输入一些文本}<ESC>这能构成一个改变(Change)) 在本文开头,我们提到了很多其他文本编辑器(尤指没有模式提供的)在调用恢复命令的时候, 通常只能恢复最后输入的那个字符又或者是最后输入的词。 而在VIM中, 我们在开头也提到了它可以控制撤销命令的粒度。 我们刚才的结论也提到了, 从我们进入Insert Mode的那一刻到我们退出至Normal Mode这期间我们所做的改变(输入或者是删除)算做一个改变(Change)。 由此, 我们可以令撤销命令作用于词语,句子甚至段落上面等等, 而这些取决于我们如何使用<ESC>键。 那么,…
Continue Read

学习VIM模式篇之正常模式Tip7: 换个角度看VIM

VIM提供给我们了一个模式化的用户界面。 也就是说, 当前VIM所处的模式(Mode)不同会使得用户相同的输入得到不同的结果。 对于很多未使用过VIM或者偶尔接触过VIM的人来说, 使用VIM是个很不习惯的事情, 因为VIM的Normal Mode实在是看起来太奇怪,令人不习惯。而其它编辑器通常看起来一直是在插入模式(Insert Mode)。 作为一个程序员, 更多的时间是花在思考, 读代码以及跳转代码上, 那么在这样的情形下, 是否一定需要处在Insert Mode呢? 答案是否定的, 仁者见仁, 智者见智, 每个人都有每个人不同的想法。 倘若我们换一个角度, 会觉得, 唉, 就那么静静地处在Normal Mode当中, 然后配合着Normal Mode下的命令也能做出并且是更加高效地做出很多自己想要做的事, 也是一种极好的选择和体验。 参考: 《Practical Vim》- Tip 7…
Continue Read

学习VIM入门篇Tip6: “一劳永逸”-Part3

在Tip3, Tip4以及Tip5当中, 我们不难总结出。 对于一些重复性的工作或者操作。 我们不妨考虑将步骤简化为: 1. 移动 2. 重复执行 对于1. 来说, 移动的命令可以是方向键hjkl也可以是←↓↑→, 当然也可以是在Tip3和Tip4中出现过的n, N, ;, ,等等。 对于2. 来说, 重复执行可以通过命令.来简化, 我们在Tip1当中了解到, .命令的作用是重复执行一次上一次记录的改变。 据笔者个人目前为止的经验, (从Normal Mode跳转到Insert Mode再退出至Normal Mode)记录的是从进入插入(Insert)模式到按退出插入模式至正常(Normal)模式时的变化。 比如我的输入顺序如下: (前提是在Normal Mode当中) itest<ESC> 那么, 在Normal Mode中, 再次点按.所执行的重复部分是: itest<ESC> 另外, 由于上面也已经出于我个人的经验介绍了.记录的内容范围。 因此, 对于通过其他非i命令从Normal Mode进入Insert Mode的情况, 也同样能适用于.命令。 如Tip2的列表当中的命令, s, S, a,…
Continue Read

学习VIM入门篇Tip5: 手动替换

在日常生活中, 对文档进行编辑时, 常常会需要去替换一些字符串。 在VIM当中, 自提供了:substitute这个替换命令。 除此之外, 我们还可以手动搜索和进行选择性替换。 在此篇Tip中, 我们对后者进行讨论说明及总结。 诚然, 鉴于vimtutor中的学习, 我们已知vim自带的:substitute命令也可以达到后者手动搜索和进行选择性替换的功能。 但我们在本篇Tip中的目标是, 是从另外一个角度(手动搜索和替换, 并非靠:substitute命令)去完成替换的工作。 在Tip3及Tip4当中, 我们已知, 如何去搜索单个字符或者字符串。 当我们要搜索一个单词时,除了可以用/或者?来搜索之外, VIM还提供了一个很方便的适合懒人的搜索方式: * *命令的作用是: 搜索并跳转至下一个匹配当前光标所在位置所属的单词。 至于如何去重复搜索命令, 参考Tip3及Tip4, 尤其是Tip4当中的表格, 此时仍然可以使用n 或者N命令去搜寻下一个匹配的单词而无需重复用*或者/及?。 参考: 《Practical Vim》- Tip 5…
Continue Read

学习VIM入门篇Tip4: “一劳永逸”-Part2

如Part1中所阐述, 对于一些重复性的任务, 我们可以通过用命令进行重复性的工作而非采用手动输入的方式来优化整体工作效率。 以下是出自于《Practical Vim》中的一张表: 目的 操作 正向重复 逆向重复 做一次变更 {edit} . u 于当前行搜索下一个匹配的字符 f{char}/t{char} ; , 于当前行搜索上一个匹配的字符 F{char}/T{char} ; , 于整个文档中正向搜索匹配的字符串 /pattern n N 于整个文档中逆向搜索匹配的字符串 ?pattern n N 替换 :s/target/replacement & u 执行一系列的变更 qx{changes} @x u P.S.: 表中的正向重复和逆向重复针对的是操作(action)执行方向而言。 (即是相对于操作方向的正向和逆向) 参考: 《Practical Vim》- Tip 4…
Continue Read

学习VIM入门篇Tip3: “一劳永逸”-Part1

在学习此Tip之后, 对此的心得是, 学会把一些重复性的操作或者工作拆分为几个部分, 对于每一个重复的部分尽量用快速高效的命令去自动重复它而不是每一次都手动操作。 一些重复性的操作或者工作无非是分为两部分: 1. 变更的重复 2. 动作的重复 对于1. 变更的重复,结合在Tip1中所了解到的.命令, 我们不难想出: 对于此类重复, 皆可以用.命令去代替那些重复的输入工作。 对于2. 动作的重复, 我们可以利用一些其它搭配着动作命令使用的命令(在vimtutor中所学的n, N): 如: (/|?){keyword}: 使用n或N进行正方向或者反方向的重复搜索。 f{char}: 使用;或者,进行正反方向的重复搜索。 参考: 《Practical Vim》- Tip 3…
Continue Read

学习VIM入门篇Tip2: 混合(Compound)命令

在一些常用的情形当中, 我们出于效率考量会试图找出一个减少不必要移动的命令来代替原先冗余的命令。 下面是一个简单的汇集混合(Compound)命令的列表: 混合命令(Compound Command) 普通写法(Equivalent in Longhand) C C$ s cl S C I ^i A $a o A<Enter> O ko 参考: 《Practical Vim》- Tip 2…
Continue Read

学习VIM入门篇Tip1: 初识"."命令

.命令的作用是重复执行上一次的变更。 变更的范围包括: 上一次操作的命令, 如: x, d{motion}, >等等 上一次从进入插入模式(Insert)到退出插入模式到普通(Normal)模式之间的所有按键操作。 参考: 《Practical Vim》- Tip 1…
Continue Read

学习VIM

边学习边实践是非常高效的学习方法 参照着vimtutor学习了一遍之后,买了一本《Practical Vim》 好记性不如烂笔头,决定边学边记录每一个Tip中自己认为重要的部分。 目录: 入门篇 Tip 1: 初识"."命令 Tip 2: 混合(Compound)命令 Tip 3: “一劳永逸”-Part1 Tip 4: “一劳永逸”-Part2 Tip 5: 手动替换 Tip 6: “一劳永逸”-Part3 模式篇 正常模式 Tip 7: “一劳永逸”-Part3 Tip 8: 打造属于你的撤销(Undo)命令 Tip 9: 构建可重复的变更 如果涉及到版权问题, 请邮件联系我。…
Continue Read