vimbook-OPL(1-4)

Chapter 2 Editing a Little Faster

  • ZZ 写回当前文件,并退出,与 :x功能相同
  • w b 向右或向左移动到单词的头部
  • W B 向右或向左移动到字串的头部
  • e ge 向右或向左移动到单词的尾部
  • E gE 向右或向左移动到字串的尾部
  • f{char} F{char} 向右或向左查找字符{char},光标停留在字符上,; 同方向继续搜索,, 反方向继续搜索;
  • t{char} T{char} 向右或向左查找字符{char},光标停留在字符之前,; 同方向继续搜索,, 反方向继续搜索;
  • CTRL-G 在状态栏显示目前光标在文件中的位置
  • CTRL-U 命令向上移动半屏
  • CTRL-D 命令向下移动半屏
  • [count]G 分别移动到count行
  • [count]J 将光标下的count行合并,空行会去掉,非空行用空格分隔
  • r{char} 把光标下的字符换成 {char}
  • ~ 切换光标下字符的大小写,并把光标右移
  • q{0-9a-zA-Z"} 在寄存器 {0-9a-zA-Z"} 里录制宏,并以q退出保存,用 @{0-9a-zA-Z"} 执行。如用 qa 开启记录,其后的所有命令直到再次遇到 q 之前的所有命令都放到录制的 a 宏中,通过 @a 在文件上执行里边的命令。
  • CTRL-K{char}{char} 显示digraphs字母,目前只在命令模式中实验成功,插入模式还没有成功,CTRL-K_S_E “§”

Chapter 3 Searching

  • :set incsearch 设置增量搜索的选项(options),搜索会随着键入进行搜索,而不会等到按下后才开始搜索
  • / 进行正向搜索 ? 进行反向搜索

Chapter 4 Text Blocks and Multiple Files

Marks

ma 将光标所在的位置做标记,以后用 `a 或者 'a 回到标记的位置,唯一的区别在于前者回到对应的列,后者回到行首。:marks 命令显示所有的标记,包括 mark, line, col 以及对应行的文本,一些特殊的标记:

  • " 离开本缓冲区所在位置,默认文件首行
  • ' 上次进入本缓冲区跳转的位置
  • [ ] 分别表示首行和尾行
  • ^ 上次进入插入模式关闭时光标所在位置
  • . 最后一次改变时的位置

Filtering

用外部程序对选中的文本进行过滤,意思是将选中文本作为数据传递给外部程序,执行完之后的输出覆盖现有的文本。!motion command 就是对由当前行到以 motion 表示的位置执行命令并替换后的结果。

$(GENIE) vs2012
$(GENIE) vs2013
$(GENIE) --gcc=android-arm gmake
$(GENIE) --gcc=android-mips gmake
$(GENIE) --gcc=android-x86 gmake
$(GENIE) --gcc=mingw-gcc gmake
$(GENIE) --gcc=linux-gcc gmake
$(GENIE) --gcc=osx gmake
$(GENIE) --gcc=ios-arm gmake
$(GENIE) --gcc=ios-simulator gmake
$(GENIE) xcode4

当我的光标在第一行,并输入 !10j 时,会选中此11行文本,并且在屏幕的左下角显示 :.,.+10j! ,其后再输入 sort 将此11行文本进行排序,得到如下文本:

$(GENIE) --gcc=android-arm gmake
$(GENIE) --gcc=android-mips gmake
$(GENIE) --gcc=android-x86 gmake
$(GENIE) --gcc=ios-arm gmake
$(GENIE) --gcc=ios-simulator gmake
$(GENIE) --gcc=linux-gcc gmake
$(GENIE) --gcc=mingw-gcc gmake
$(GENIE) --gcc=osx gmake
$(GENIE) vs2012
$(GENIE) vs2013
$(GENIE) xcode4

是不是一个很棒的命令?除此之外还有一个非常有用的用法 !! 命令将当前进行过滤,我们可以在空行处执行 !!date 将系统的时间获取并覆盖当前行,这样我们就可以非常方便的记录文件更改时间。!!ls 获取当前目录的所有文件及子文件,在写文档时十分有用。

Dealing with Multiple Files

此小节讲述在命令行一次性打开多个文件的情况,如 ~> vim one.c two.c three.c,在不同文件之间切换用 :next :previous :first :last,按照它们的字面意思分别是向后、向前、第一个和最后一个文件,如果对任何一个文件进行了改变但是还没有保存,这些命令会失败,应使用 :write 进行写入,或者 :wprevious wnext 写入并向前向后。:[count]next :[count]previous 重复执行next或previous操作count次。

:args 命令显示参数列表,方括号中的为当前编辑的文件,如我们的输出:one.c [two.c] three.c

在编辑多个文件时,特殊的文本寄存器(#)表示上次编辑的文件在vim术语中alternate file,使用 :e # 可以打开,等价命令 CTRL-6,不停按这个命令会在这两个文件键不停切换。