VIM使用
一、三种模式简介
1.Normal模式
ESC | ctrl+[
2.Insert模式
小写 i (insert) 当前字母前面插入 | 大写 I 行首插入
小写 a (append) 当前字母后面插入 | 大写 A行末插入
小写 o (open a line below) 当前行下方插入空行并进入插入模式 | 大写 O当前行上方插入空行并进入插入模式
小写 s (substitute) 删除当前字符并进入插入模式 | 大写 S删除当前行并进入插入模式 (注意会有删除操作)
3.Visual模式 普通模式下使用v进行visual选择,例如
选择 普通模式 按v,左下角变成VISUAL,光标往右移动(会选中一段区域),eg:按d或x删除
选择行 大V整行选中,使用上下方向键,eg:按d或x删除
选择块 Ctrl + v 配合方向键可以选择一块区域,eg:按d或x删除
Command命令,普通模式下输入“:”之后执行命令,例如
:wq 保存退出
:vs 垂直分屏 vertical split
:sp 横向分屏 split
:%s /oldstr/newstr /g 全局替换
:syntax on 语法高亮
:set hls 高亮搜索
:set incsearch 增量搜索
二、移动
上下左右:h (←) j (↓) k (↑) l (→)
ADM-3A 终端机全貌.png 键盘.png单词移动.png
单词移动
w/W 移到下一个word/WORD开头
e/E 移动到下一个word/WORD结尾 # 首次执行,若光标不在当前单词结尾,则会跳到本单词结尾
b/B 回到上一个word/WORD开头 # 首次执行,若光标不在当前单词开头,则会跳到本单词开头
其中 word -以非空白符分割的单词,WORD -以空白符分割的单词
行间搜索移动
f{char} 正向移动到下一个{char}字符上,F{char}表示反过来搜前面的字符
t{char} 正向移动到char的前一个字符,大写的T反过来向前,移动到char的后一个字符
; 重复上次的命令
, 反转方向执行上次的命令
Vim水平移动
0移动到行首第一个字符
$移动到行尾
Vim页面移动
gg/G 移动到文件的开头和结尾,可以使用Ctrl + o快速返回(可连续返回)
Ctrl + u/Ctrl + f 上下翻页(upword/forword)
Ctrl+u/Ctrl+d 上下翻半页(up/down)
标记跳转
m{mark} 标记
`{mark} 返回标记
三、文本对象
-
操作方式:[number]<command>[text object]
number 次数
command 命令,d(delete),c(change),y(yank)
text object 要操作的文本对象,比如单词w,句子s,段落p -
范围文本对象:
iw 当前单词 ; aw 当前单词及一个空格
-
分隔符文本对象:i (in) 选择分隔符内部的文本,a (around) 选择包括分隔符在内的整个文本
a) 一对圆括号 ; i) 圆括号内部
四、增删改查
Vim删除
-
Vim在Normal模式下:
x 删除光标处字符 4x 删除4个字符
dw/daw(d around word) 删除光标所在单词
diw 不会删除单词周围的空格
dd 删除当前行 5dd 删除5行 -
插入模式下:
ctrl+h 删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行(同样,这几个快捷键适用于终端)
Vim 快速修改
- 常用有三个,r(replace),c(change),s(substitute)
- normal模式下使用r可替换一个字符。s替换并进入插入模式
- 使用c配合文本对象,快速修改</pre>
撤销操作
u (undo)表示撤销最后一次修改 #可以连续用
U 表示撤销对整行的修改 #只能用一次,再用旧是恢复撤销的内容,二者不断切换
Ctrl + r 恢复撤销的内容 #可以连续用
Vim查询
-
使用/或?进行前向或者反向搜索
-
使用n/N跳转到下一个或者上一个匹配
-
使用*或者#进行光标所在单词的向前和向后匹配 # 得在查询时才能这样用
五、搜索替换
用途:代码中命名错误、重构代码
:[rang] s[ubstitute]/{pattern}/{string}/[flags]
-
rang
:表示范围,比如:10,20
表示 10-20 行,%
表示全部。 -
pattern
:表示要替换的模式(支持:正则)。 -
string
:替换后的文本。 -
flags
:替换标志位。g(global)
表示全局范围内执行;c(confirm)
表示确认,可以确认或拒绝修改;n(number)
报告匹配到的次数而不替换。
Tips:
- 单词精确匹配,可使用
<
和>
,如::% s/\<hello\>/world/g
,将所有的 hello 替换为 world。
六、复制粘贴与寄存器
Normal模式复制粘贴
选中 v(visual) 复制 y(yank) 粘贴 p(put) 剪切 d(delete),剪贴dp
粘贴代码需要注意:默认设置autoindent(自动缩进),粘贴python代码缩进混乱
需要使用:set paste 和:set nopaste解决
Vim寄存器
Vim里操作的是寄存器而不是系统剪切板
默认我们使用d删除或者y复制的内容都放到了“无名寄存器”
-
通过
"{register}
前缀可以指定寄存器,不指定默认用无名寄存器。- 如:
"ayiw
复制一个单词到寄存器a
中,"bdd
删除当前行到寄存器b
中。
- 如:
-
复制专用寄存器
"0
使用y
复制文本同时会被 拷到复制寄存器0
。 -
系统剪贴板
"+
可以在复制前加上"+
复制到系统剪贴板。注:需要支持:echo has('clipboard')
返回结果为:1。 -
其它一些寄存器,如:
".
上次插入的文本;"%
当前文件名。
Tips:
-
:set clipboard=unnamed
可以直接复制粘贴系统剪贴板的内容。 -
:reg a 查看寄存器a中的内容
-
:call setreg('a', '') 清空寄存器a的内容
-
常见寄存器:
"" 无名寄存器,缺省使用,""p等同于p
"a等 有名寄存器a-z
"0 复制专用寄存器,使用y复制文本同时会被拷贝到复制寄存器0
"+ 系统剪贴板,可以在复制前加上 "+ 复制到系统剪贴板
"% 当前文件名
". 上次插入的文本
七、宏(macro)批量操作
-
使用
q
来进行录制,同时使用q
来结束录制。 -
使用
q{register}
选择要保存的寄存器,把录制的命令保存其中。 -
使用
@{register}
回放寄存器中保存的一系列命令,达到批量操作。
例子:给多行url链接加上双引号
方法一:先使用q开始录制,给一行加上双引号,之后使用q退出;在剩下的所有行中回放录制的宏
录制 -->
qa #开始录制,保存在寄存器a(左下角出现recording @a)
I -> 加上前双引号 -> ESC #在行首插入双引号
A -> 加上后双引号 -> ESC #在行尾巴插入双引号
q #结束录制(左下角recording @a 消失)
回放 -->
1)一行行回放
j #到下一行
@a #回放寄存器a中的录制的操作
2)全篇回放
V #大V选中一行(左下角变成 --VISUAL LINE--)
G #选中行一直到结尾,即全选
: #进入命令行模式(左下角变为 :'<,'> )
normal @a #命令行模式下输入该命令,回车完成全部修改
八、Vim 补全
-
ctrl+n(nest),ctrl+p(previous)搜索文件内的关键词,匹配补全
-
ctrl+x+f 补全文件名。
网友评论