Vim 实用技巧(1)

Vim 实用技巧(1)


1. 认识 . 命令

. 命令做用javascript

  • ==重复上次修改==。(参见 :h .

应用举例java

  • x 命令会 ==删除光标下的字符==,使用 . 会让 ==重复删除光标下的字符==。

屡次输入 u 撤销上述修改。vim

  • dd 命令删除一整行,使用 . 命令会 ==重复删除当前行==。markdown

  • >G ==增长从当前行到文档末尾处的缩进层级==,使用 . 会重复该操做。oop

  • 每次 i 进入插入模式的那一刻,到返回普通模式为止, Vim 会记录每个按键操做,作出这样一个修改再用 . 命令,它会从新执行全部这些按键操做。this

. 命令是一个微型的宏 macrospa


2. 不要自我重复

var foo = 1
var bar = 'a'
var foobar = foo + bar
复制代码

在行尾添加分号:code

  • $ 移动到行尾,而后 a 编辑,输入分号,Esc 完成修改
  • 对剩下的两行能够使用两次 j$.
  • . 意味着 a;<Esc>,一个键顶三个键

有没有改进的余地?orm

  • 能够使用 A 代替 $a。==A$a 封装成了一个按键操做。==
  • 而后输入分号,按 Esc
  • 以后就能够使用 j. 来重复操做了。

一举两得对象

复合命令 等效的长命令 做用
C c$ 删除到行尾并进入插入模式
s cl 删除当前字符并进入插入模式
S ^C 删除当前行内容并进入插入模式

3. 以退为进

需求:把 JavaScript 的字符串拼接的加号先后都加上空格。

var foo = "method("+argument1+","+argument2+")";
复制代码

要改为:

var foo = "method(" + argument1 + "," + argument2 + ")";
复制代码
  • f+ 查找加号

注:f{char} 查找下一处指定字符出现的位置

  • s空格+空格<Esc> 进行修改
  • ; 重复查找上次 f 查找的字符
  • . 重复上次修改
  • ;.
  • ;.

注意:不用输入 4f+,用 ; 重复查找便可。

;. 重复查找 + 重复修改


4. 执行、重复、回退

重复颇有用,但有时候屡次按 . 或者 ; 的时候,容易出现多按的错误。

  • 若是多按了 . 能够使用 u 撤销上次修改。
  • 若是多按了 ; 能够使用 , 跳转回去,由于 , 会反向查找上次 f{char} 所查找的字符
目的 操做 重复 回退
作出一个修改 {修改} . u
在行内查找下一指定字符 f{字符} / t{字符} ; ,
在行内查找上一指定字符 F{字符} / T{字符} ; ,
在文档中查找下一处匹配项 /pattern回车 n N
在文档中查找上一处匹配项 ?pattern回车 n N
执行替换 :s/target/replacement & u
执行一系列修改 qx{修改}q @x u

注意:t{字符} 的在查找的字符前面停下来,而 T{字符} 在查找的字符后面停下来。


5. 查找并手动替换

需求 把文本中的 content 替换成 copy

...We're waiting for content before the site can go live...
...If you are content with this, let's go ahead with it...
...We'll launch as soon as we have the content...
复制代码

:substitute 命令专门用于查找替换任务。

偷懒的办法:无需输入就能够进行查找 做者云:. 命令是我最喜好的 Vim 单键命令,排在第二的是 * 命令,此命令 ==能够查找当前光标下的单词==。

  1. /content:查找到 content 单词

或者直接把光标移动到这个单词上 2. *:查找该单词 3. cwcopy<Esc>:修改 contentcopy 4. n:找到下一个 5. .:重复修改 6. n.n.n.:完成全部修改 7. 若是不想修改,不按 . 直接按 n 跳转到下一个便可

移动光标到 content 上,而后按 *,会产生两个结果:

  • 光标跳到下一个匹配项上
  • 全部出现这个词的地方都被高亮显示

若是没有高亮,试着运行 :set hls


6. 认识 . 范式

==. 范式是最理想的编辑模式,用一键移动,另外一键执行。==

  • 只须要按一次键就能把光标移到下一个目标上
  • 都利用 . 命令重复上次修改

普通模式 normal modeVim 的默认状态。

7. 停顿时请移开画笔

画家在休息时不会把画笔放在画布上。 普通模式就是 Vim 的天然放松状态,其名字已经寓示了这一点。


8. 把撤销单元切成块

u 键会触发撤销命令,它会撤销最新的修改。 在 Vim 中,咱们本身能够控制撤销命令的粒度。 从进入插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。 所以,只要控制好 <Esc> 键的使用,就可以使撤销命令做用于单词、句子或段落。

多久离开一次插入模式? 做者喜欢让每一个 “可撤销块” 对应一次思考过程。 无论停顿的时间有多短,每次停顿都是一个天然的中断点,提示做者该退出插入模式了。

当处于插入模式中,另起一行最快的方式是按 <CR>。 可是有时做者更喜欢按 <Esc>o,这是由于做者有预感,也许在撤销时做者想拥有更细的粒度。

通常来说,若是你停顿的时间长到足以问 “我应该退出插入模式吗?” 这个问题,就退出吧。

==在插入模式中使用方向键移动光标会重置修改状态== 若是在插入模式中使用了 <Up><Down><Left><Right> 这些光标键,将会产生一个新的撤销快。 你能够把这想象为先切换回普通模式,而后用 hjkl 命令对光标进行了移动,可是没有退出插入模式。 这会对 . 命令的操做产生影响。


9. 构造可重复的修改

Vim 中,评估哪一种方式最好时,最显而易见的指标是效率,即哪一种手段须要的按键次数最少(又名 VimGolf)。 VimGolf vimgolf.com/

然而在平局时如何选择胜者呢?

需求 The end is nigh 光标位于 h,如今要删除单词 nigh

反向删除Vim 高尔夫得分 3

  • db 删除从光标起始位置到单词开头的内容
  • x 删除 h

正向删除Vim 高尔夫得分 3

  • b 移动到单词开头
  • dw 删除整个单词

删除整个单词Vim 高尔夫得分 3 使用 aw 文本对象 text object

  • daw 删除一个单词(能够解读为 delete a word

决胜局:哪一种方式最具重复性? 看哪一种方式能够发挥 . 命令的最大威力。 反向删除 . == x 正向删除 . == dw 删除整个单词 . == daw 因此 daw 胜出!

相关文章
相关标签/搜索