第一章 .(dot)命令

. 命令可以重复上次的修改

Vim把进入插入模式到退出形成一次修改, i{insert something}<Esc>, 在插入模式中移动光标会重置修改状态

>G 增加从当前行到文档末尾的缩进层级

A 在当前行的结尾添加内容(等价$a), 类似还有:

查找:

第二章 普通模式(Normal Mode)

如果在插入模式使用了上下左右光标键,会产生一个新的撤销块 (P16)

构造一个可重复的撤销块 (配合 点.操作符使用)

这里要注意什么是一次修改. u会撤销最后一次修改.

http://vimgolf.com/ 尽量用最少的按键次数实现一个操作, 一个有趣的网站

db反向删除, 从光标开始位置到单词开头的内容(不包括光标下的字符)
dw正向删除, 从光标开始位置到下一个单词前(包括光标下的字符)
daw 反向删除, 从光标位置开始到前一个单词后(包括光标下的字符)

简单的算数运算:

<C-a><C-x> 会把当前光标之上或之后的数值加1/减1
count<C-a> 会把数值加上 [count]

这个依然可以配合点操作符

cW 从当前光标删除一个单词.

能够重复,就别用次数

之前的如dw, 都可以配合上次数, 如2dw, d2w

操作符 + 动作命令 = 操作

{d:操作符}{w:动作}删除单词. "w" 是词移动命令。实际上,"d" 命令后面可以跟任何 "动作" (motion) 命令,它会删除从当前位置到光标移动到的目标位置的全部内容. refer

常用操作符:

当操作符连续调用两次, 会作用于当前行. 如 dd, >>, gUgU或简写gUU

第三章 插入模式(Insert Mode)

在插入模式中更正错误,如果出错的位置在单词开头,删除整个单词再重新输入比退格键要快.

zz 命令可以重绘窗口,使当前行在窗口居中.

使用<C-o>配合zz(即<C-o>zz)可以方便的在插入模式写代码时,让当前行从末尾移到屏幕中央.

K 查看光标下单词的手册页
J 把当前行和下一行连接在一起

@todo 寄存器 tip 15, P 28

在插入模式中, 使用<C-r>=可以使用寄存器做运算.

<i><C-r>=(40+60)*5 + 500/10<CR>

C-v{code}, 其中{code}是要插入的字符编码

# 输入A
<C-v>065

# 输入一个unicode,
# :h i_CTRL-V _digit
<C-v>u00bf

光标移到字符上,使用ga可以查看它的编码.

<C-k>{char1}{char2} 二合字母(digraph)可以打出一些特殊字符

# 字符 «
<C-k><<

@todo tip 19 P33, 虚拟替换模式

第四章 可视模式(Virtual Mode)

可视模式有三种:

viw高亮选择当前光标下的单词, 然后使用c修改所选内容, 这样会删掉单词并进入插入模式.

高亮选取的范围由两个端点界定, 其中一个固定, 一个岁光标移动. o可修改固定端点. (P37)

在可视模式下, dot(.)操作符一般对行操作有用.

可视模式一般使用一次性的操作, 如果是重复操作, 最好使用操作符命令.

可视模式配合一些动作命令也很强大:

第五章 命令行模式

:进入命令行模式, 在命令行模式下执行的命令又称Ex命令. (源至ex行编辑器, vi先祖)

:h ex-cmd-index 查看完成的Ex命令列表

很多Ex命令可以用[range]指定要操作的范围.可以在某一范围内的所有行执行操作.

:print 命令(简写:p)用于在命令行显示指定行的内容

比如:2p移动到第二行并显示内容; :2,5p显示第2~5行的内容; :.,$p显示当前行到最后一行的内容; %p显示所有内容

使用VG高亮选取后按:进入命令行模式, 会自动填充:'<,'>, 这个也是Ex命令

用模式指定范围, 用偏移对地址进行修正. TODO

[range]定义的范围语法可以是行号、位置标记、查找模式、偏移:

复制, 使用:copy 或者 :co:t. 如

快速跳会原来的位置 C-o

普通模式命令适合在本地操作; Ex命令适合远距离操作

:normal 配合 . 命令, 可以在多行完成相同的内容, 如:

A;<ESC> -> jVG -> :'<.'>normal . 从当前行到文件末尾, 每行最后加一个分号

更简单的方式: .,$normal A;

:%normal i//所有行加上注释

.命令无法重复由Vim命令行中做出的修改, 改为使用@:重复上次的Ex命令. 然后可以使用@@来重复操作

在Ex命令自动补全时, 键入<C-d>会显示可用的补全列表, 如:

:col<C-d>
colder       colorscheme

对于命令历史, q:打开Ex命令的历史记录窗口; q\打开查找命令的历史记录窗口

在Ex命令窗口输入:!{command} 可以运行一次shell命令. 执行:shell可以启动一个交互的shell会话.

第六章 管理多个文件

我们所编辑的只是文件在内存中的映像, 也就是Vim的"缓冲区"

如果vim同时打开多个文件, 会把这些文件都加到缓存区, 但只有一个是激活的.

使用:ls可以查看缓冲区列表:

:ls
  1 %a   "a.txt"                        line 1
  2      "b.txt"                        line 0

使用:bnext可以切换到下一个缓冲区:

:ls
  1 #    "a.txt"                        line 1
  2 %a   "b.txt"                        line 1

其中%表示当前窗口中可见的缓冲区, a表示active, #表示轮转文件, 也就是切换过来的前一个缓冲区. <C-^>可以在两者间快速切换.

这里b表示buffer简写

如果缓冲区有修改, 则:ls会显示+:

:ls
  1 #    "a.txt"                        line 1
  2 %a + "b.txt"                        line 18

此时如果要切换缓冲区, 需要加!强制执行, 如:bnext!, 此时当前缓存冲会被标记为隐藏缓冲区(h):

:ls
  1 %a   "a.txt"                        line 1
  2 #h + "b.txt"                        line 18

:args类似:ls, 不过显示的比较简陋.

分割窗口:

排列窗口: