第1章 Vim解决问题的方式
- A;<Esc>:在当前行行尾添加一个;
- A命令相当于$a。$命令让光标跳到行尾
- . 可以重复上一个命令
- 普通模式下 f{char}:跳到当前行的该字符,按下 ; 跳到下一个 按下 , 反向查找。
- 普通模式下不同命令,重复和回退方式:
目的 操作 重复 回退 做出一个修改 {edit} . u 行内查找下一指定字符 f{char}/t{char} ; , 行内查找上一指定字符 F{char}/T{char} ; , 文档中查找下一匹配项 /pattern<CR> n N 文档中查找上一匹配项 ?pattern<CR> n N 执行替换 :s/target/replacement & u 执行一系列修改 qx{changes}q @x u - 普通模式下 * 命令可用来查找当前光标所在单词。
第2章 普通模式
- Vim从进入插入模式开始,到返回普通模式为止,期间所做的任何操作,都被当成一次修改。而撤销操作一次撤销一个修改。
- db命令可以删除从光标起始到单词开头的内容。
- b命令可以移动光标到单词的开头;dw命令删除整个单词(光标位于单词开头时)。
- daw命令可以直接删除一个单词。
- ctrl+a命令和ctrl+x命令可以分别对数字进行加一和减一操作。在前面添加数字可以控制加一和减一次数。
- gU将一行变成大写,gUaw将一个单词变成大写。说明vim的命令是可以很灵活地组合的。
- gu转换为小写,g~反转大小写。
- c修改,d删除,y复制到寄存器。
- >添加缩进;<减小缩进;=自动缩进。
第3章 插入模式
- 除退格键外的删除方式:
ctrl+h 删除前一字符
ctrl+w 删除前一单词
ctrl+u 删除至行首 - ctrl+o可以进入插入-普通模式,即让你可以执行一个普通模式的命令,然后马上自动回到插入模式。
- 普通模式中的zz命令,可以让当前行处于屏幕中间,方便观察上下文。
- 插入模式下输入:ctrl+r = 可以进入表达式寄存器,输入相应计算表达式后回车,计算结果会输入到当前位置。
- 普通模式下,光标移动到某个字符然后按下ga,可以看其字符编码。
第4章 可视模式
- 进入可视模式:v进入“面向字符的可视模式”;shift+v进入“面向行的可视模式”;ctrl+v进入“面向列块的可视模式”。
- o可以选定高亮区的开始位置,e是高亮区的结束位置。
- 可视模式下执行一次命令后会自动退出。
第5章 命令行模式
- 按下 : 键时,vim会切换到命令行模式。按Esc键退出。
- :tabnew 新建一个文本tab。
- :2,5p 打印2到5行的内容
- .符号可以代表当前行,$符号可以代表最后一行
- :/pattern1/,/pattern2/p 通过模式匹配指定行的开始和结束
- :[range]copy{address} 将range范围内的东西复制到address行。copy可以简写为co或者t
- :[range]move{address} 和copy类似,不过是移动(也就是剪切粘帖)。move可以简写为m
- VG,可以高亮选择当前行到最后行区域,这时候按下: 可以自动对当前高亮每一行处理
- 在命令行模式下通过 normal 普通模式命令可以对每一行执行该普通模式。
- 给每一行末尾加入;的例子:
#方法1:繁琐版 A;<Esc> #给第一行末尾加入; jVG #跳到下一行,高亮选择剩余行并进入可视模式 :'<,'>normal . #对高亮选中区域执行一个普通模式命令 #方法2:简练版 :normal A;
第6章 管理多个文件
- vim可以读取编辑文件,并保存修改。但实际上当我们编辑一个文件时,编辑的是文件在内存中的映像,Vim中称为“缓冲区”。
- vim可以同时在多个缓冲区上工作。
- vim 后面跟多个文件时,可以同时打开多个文件。
- :ls 查看当前缓冲区列表
- :bnext 切换到列表中下一个缓冲区;:bprev切换到上一个缓冲区。
:bfirst和:blast,切换到缓冲区的开头和结尾。 - 实际上缓冲区功能比较缺乏灵活性,如果有多个文件一起打开工作的需要,把工作区划分成多个分割窗口、标签页、参数列表可能是更好的选择。
- :args 可以看到打开文件时候传递给vim的文件。
:next和:prev命令,可以用来切换参数列表中的文件。
:argdo 可以在列表中每个缓冲区上执行同一条命令。 - 如果一个缓冲区内容被修改,但没保存到文件,然后你要切到其他缓冲区,这时候要在切换命令后加!,强制切换。这时候缓冲区被标记为。
如果想保存修改可以通过:write命令保存,如果想放弃可以通过:edit! 命令重新读入文件。
如果想退出vim,放弃所有缓冲区修改可以执行:qall! ;如果退出并将所有缓冲区修改保存到文件,可以执行:wall! 。 - ctrl+w s水平切分窗口;ctrl+w v垂直切分窗口。
- 切分窗口后,可以通过:edit {filename}载入新文件,不然是和原来切分出来的同一缓冲区。也可以通过:[v]sp[lit] {filename}实现两步合一。
- ctrl+w W窗口间循环切换;ctrl+w h切到左边;ctrl+w j切到下边;ctrl+w k切到上边;ctrl+w l切到右边。
- :close关闭当前窗口 :only关闭除当前窗口外的其他所有窗口。
第8章 用动作命令在文档中移动
- 通过home row移动光标:
h左移一列 l右移一列 j下移一行 k上移一行 - w 移动到下一个单词的开头
b 反向移动到当前单词/上一单词开头
e 移动到当前单词/下一单词结尾
ge 反向移动到上一单词结尾 - cw 删除当前单词并进入插入模式。
第10章 复制与粘帖
- xp剪切和粘帖一个字符 ddp剪切和粘帖一行
- 默认命令操作存放到无名寄存器。可以通过在命令前添加 "{register} 前缀指定寄存器。例子:
"ayiw #把当前单词复制到寄存器a
"bdd #把当前行剪切到寄存器b中 - 其他常用寄存器:
"" 无名寄存器
"0 复制用寄存器 使用复制命令时,复制到无名寄存器和该寄存器
"a ~ "z 26个有名寄存器
"_ 黑洞寄存器,剪切一些内容,然后想抛弃而不是覆盖无名寄存器,可以用
第11章 宏
- 可以把一系列命令录制成宏保存到寄存器中。q{register} 开始,再次按下q结束。
录制完成后,通过@{register} 来执行指定寄存器内容。
第12章 按模式匹配及按原义匹配
- 通过命令 :set ignorecase 忽略大小写查找。
也可以通过 :set smartcase 设置 :没有大写字母时,忽略大小写查找;有大写字母时严格查找。 - 在搜索前面加入\v 可以不用反斜杠转义特殊符号,例如:
/\v#([0-9a-fA-F]{6} | [0-9a-fA-F]{3})
第13章 查找