从OS实验课学习的vim, 当时在ubuntu上对vim痛恨不已, 这学期决定好好学一下vim的技巧, 增加生产力!

vim的基本操作就不讲了

在命令模式下, HJKL控制光标左下上右的移动

让你的操作可重复

我们来举个例子,假设如下文本

one two three four five six

我希望改成

"one","two","four","five","six"

首先光标定位在该行的行首,可使用^。然后键入f␣(␣表示空格),此时光标定位在 one 和 two 之间的空格处,然后键入c␣","(修改空格,进入插入模式,然后增加","):

one","two three four five six

接着按;.,光标将先查找下一个空格,即重复f␣,这个空格位于 two 和 three 之间,然后.可以重复上一次的修改操作,即c␣","

one","two","three four five six
接着重复按若干次;.即可完成所有中间字符的修改:

one","two","three","four","five","six
最后应用I和A,添加开始和最后的双引号就可以了

高效移动

  • e、b:按照单词进行前后光标跳转
  • I、A:移动到行首或行末的第一个字符处,并进入插入模式
  • H、M、L:光标分别跳转到可视区域的最上面、中间、最下面。
  • Ctrl+D、Ctrl+U:有时,需要看的文本不在可视区域,通过这些组合进行上下翻页。
  • ^、$:光标移动到行首和行尾
  • f、F:通过上面的例子,我们知道,f是 find 的意思,可以在一行内查找某个字符出现的位置,并直接跳转过去。比如f<可以从当前光标开始向右,找到第一个<,并移动过去。F 是向左查找。
  • ;:重复上一次的f查找操作
  • .:重复上一次的修改操作,跟;可以说是好基友,经常用来实现一些简单的重复操作,比录制宏要简单很多。

高效修改

  • r:替换模式,替换当前光标所在位置的一个字符。虽然你同样可以i进入插入模式,然后删掉那个字符,再输入需要的字符,但这种操作是鼠标流思维方式。替换是一个可重复操作,多用没坏处
  • caw:change a word可以删除当前光标所在位置的单词。对于int count=0;的例子,如果此时光标在count中间某处,比如u处,直接键入caw可以达到同样的效果。所以caw更强大一些
  • c、c^:举一反三,可以猜到c是从当前位置删除到行尾,并进入插入模式。
  • ci":change inside "可以用于修改当前位置附近,在相同配对的"中的内容。比如对于const char *str="hello world";。当在双引号中间的任意位置键入ci"可以直接清空字符串,并继续输入新的希望的字符串。
  • ci(、ci[:举一反三change inside ( change inside [
  • yi":yank inside " 猜猜是啥意思?类似ci"只是把编辑操作编程复制操作,因为y是复制!是不是很强大
  • yw、yaw、daw、d$…:好了,这些可以” 发明” 出来了
  • o、O:向下向上增加空行
  • u、Ctrl+r:undo 和 redo
  • 比如要删除一个单词,我往往会用vwd,试图用vw选中一个单词,然后d删除
  • d: 删除(剪切)
  • y: 复制
  • v 加方向键: 选中