从本质上讲,我们的工作是重复性的 。不论是在几个不同的地方做相同的小改动,还是在文档的相似结构间移动,我们都会重复很多操作,凡是可以简化重复性操作的方式,都会成倍地节省我们的事件
减少无关的操作,以最少的命令完成任务
查找
f
行内查找下一个指定字符,光标位于字符处,;查找下一个,,查找上一个。F反向
t
行内查找下一个指定字符,光标位于字符前;查找下一个,,查找上一个。T反向
#
普通模式下输入#寻找游标所在处的单词,*是反向
ma
标记当前为止为 a
`a 引用标记的为止 a,跳转到 a
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
%
匹配对应的括号
(
光标移至句首,)反向
b
光标左移一个字至字首,跳过空格,B,跳转上一个空格前
移动{motion}
^ 行首第一个单词前
e
光标跳转到下一个单词尾,E跳转至下一个空格前的一个单词尾,不包含空行
b
光标跳转到上一个单词头,B,跳转上一个空格后的一个单词头,包括空行
w
光标跳转到下一个单词头,W,跳转下一个空格后的一个单词头
{
转到上一个空行 }反向
编辑
a 光标之后追加,A,行尾追加
i 光标处插入,I,行首追加
s
删除当前字符并进入插入模式,S删除当前行并进入插入模式
r 替换当前字符,R 进入替换模式,直到按下 esc
操作符{operator}
组合命令配合移动或查找命令一起使用,一般操作符命令连续调用两次时,它会作用与当前行
c
删除并进入插入模式,C等同于cc
d
删除,D等同于dd
> 增加缩进 <减少缩进
v 选择模式, V行选择模式
g 前缀字符,用于更改其后面的按键行为,可将其视为一整个操作符
gU
转换大写,例如:gUU操作整行,gUaw更高当前单词
gu
转换小写
g~ 大小写反转
gc 切换注释状态
gD,gd
跳转到局部变量的定义处
gv重选上次的高亮选区
{operator}i{motion},{operator}a{motion}
以当前位置进行操作,配合可以选择范围的移动命令,i和a的区别在于是否选中移动命令的关键词如{,(等。 例如:di{,di(,diw,da{,gUaw
其他
. 重复执行上次命令,即每次进入插入模式的那一刻(例如:输入 i),直到返回普通模式为止(输入<Esc>),Vim 会记录每一个按键操作。做出这样一个修改后在用.命令,它将会重新执行所有这些按键操作。
ZZ
命令模式下保存当前文件所做的修改后退出 vi;
EX 命令
[range]为可选参数,表示行的范围,
.表示当前行(缺省值).+3表示当前行后三行(缺省值)'m包含位置标记 m 的行n表示指定行n,m表示 n 到 m 行$可表示最后一行%表示所有行<高亮选取的起始行>高亮选取的结束行
[line]可选参数 指定行,默认为当前行 [x]寄存器为一位字符,可通过:registers(简称:reg)查看寄存器内容 [address]指定行,也可以使用$表最后一行
常用的操作缓冲区问的 ex 命令
:[range] delete [x]
删除指定范围的行到寄存器 X,简写d:[range] yank [x]
删除指定范围的行到寄存器 X,简写y:[line] put [x]
删除指定范围的行到寄存器 X,简写y:[range] copy {address}
复制指定范围内的行到某行 简写co:[range] move {address}
移动指定范围内的行到某行,简写m:[range] join
连接指定范围内的行,简写j:[range]/substiture/{pattern}/{string}/{flags}
把指定范围内出现的{pattern}替换为{string} 例如::%s/vivian/sky/g替换每一行中所有 vivian 为 sky:1,$ s/$/WORLD/g替换行尾:1,$ s/^/HELLO/g替换行首:g/^s*$/d删除所有空格- `:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:%s/ /\r/g替换空格为换行
:[range]global/{pattern}/[cmd]
对指定范围内匹配{pattern}的行执行 cmd,简称g:[range]normal {commands}对指定范围内的行执行普通命令。例如:% normal A;在每行后面添加;,在做修改时自动进入插入模式,修改后自动返回正常模式:% normal @q在每行执行宏命令:% normal .在每行执行最近修改命令
命令
:E
浏览当前目录 :f
在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例; :find 通过文件名查找文件,支持 tab 补全
翻页
H
光标移至屏幕顶行
L
光标移至屏幕最后行
M
光标移至屏幕中间行
Ctrl+b
向文件首翻一屏;
Ctrl+d
向文件尾翻半屏;
Ctrl+f
向文件尾翻一屏;
Ctrl+u
向文件首翻半屏;
配置文件
vim 的配置在~/.vimrc中。
- set paste 进入 paste 模式以后,可以在插入模式下粘贴内容,不会有任何变形,解决粘贴乱行问题
宏模式
在命令模式下按下qa开始记录,指导在命令模式下再次按下q结束记录。 可通过@a,重复执行命令,n@a重复执行n次。
查看颜色代码
1 | :hi |
例如 
其中关于搜索高亮的颜色是配置项 Search,我们可以临时修改
1 | :hi Search term=reverse ctermfg=0 ctermbg=3 guifg=#000000 guibg=#FFE792 |
也可在.vimrc中配置,使其永久生效
1 | hi Search term=reverse ctermfg=0 ctermbg=3 guifg=#000000 guibg=#FFE792 |
查看字节
使用 16 进制查看文件的 byte
1 | vim -b XXX.class |
显示特殊字符
在 vi 中
1 | :set list |
但是不会显示 dos 中的特殊符号^M,我们可使用dos2unix命令快速转换为 unix 格式,会自动移除掉^M