vim入门指南
快捷操作
- di" 删除本行""内的文本
- cw 替换一个词
- yaw 复制当前词
- f和 t来查找当前行字符,`;`重复查找,`*`查找当前词,n 跳往下一个.
- ctrl + d/u 向下/上 滚动半屏
- 分隔符 a/i 带空格/不带空格 ,例如 a(/i( ,一般 d 和 a 配合,c 和 i 配合, w/词 -> s/句子->p/段落.
- u 撤销修改,U 撤销所有修改(undo), 撤销最后一次修改 ctrl + R
- i/I,a/A,o/O 插入
- mm 命令可以标记一个位置,然后~m回到标记点
- 全局替换`:%s/{pattern}/{string}/{flags}`
- 宏: q a-z 命名, 操作 q 离开完成.调用 @ a-z 具体的宏.
字符跳动
- h,j,k,l 左下上右
模式
所有命令都需要在normal模式下使用
- i切换到insert模式,按esc回到normal模式
- v 可视化模式,按v或V进入可视模式
v可以进入面向字符的可视模式,V 是针对行的可视模式.ctrl +v可以进入针对列的可视模式.可视模式下按 o 可以调整选择区边界. - :wqa! w为保存,q为离开,!为强制执行 ,a表示all所有
行内移动
- 0 到行头
- ^ 第一个不是空的位置
- $ 行尾
g_ 最后一个不是空的位置
w 下一个单词开头
- b 当前或上一个单词开头
wi/bi 在开头前插入
e 当前或下一个单词结尾 (end)
- ge 上一个单词结尾
ea,gea 在结尾后插入
fa 下一个字符为a的位置
- ta 字符a前的第一个字符
页移动
- H 跳转到当前屏幕第一行 (head)
- M 当前屏幕中间一行 (middle)
L 最后一行 (last)
2H 移动到当前屏幕第2行
- 3L 移动到当前屏幕倒数第三行
- ctrl + f 前移一页 (forward)
- ctrl + b 后移一页 (back)
- ctrl + d 往下滚动半屏 (down)
ctrl + u 往上滚动半屏
gg 调到首行 相当于:1
- G 调到尾行
- nG 调到n行 相当于:n
- % 调到另一边括号 ({[]})
配合查找字符方式移动
- fa 正向移动到第一个字符a处, ta 正向移动到下一个a字符之前
- Fa 逆向移动到第一个字符a处, Ta 逆向移动到下一个a字符之前
;
可以重复查找上次 f 命令查找的字符,不用再重复使用 f 命令.如果按了太多次,可以按,
回到上次位置.*
命令可以查找光标当前所在词,按 n 跳往下一个.- f/t 只能在行内查找且查找时只能查找一个字符,而不是单词.查找时尽量选择频率比较低的字符从而快速移动到目标处.
非相邻单词或字符间移动
- 8w 正向移动到相隔8个单词的首字符
- 4Fa 逆向移动到第4个a字符
搜索匹配
- /text 向后搜索
- ? text 向前搜索
- :g/word 全局搜索
- n 搜索下一个同样的内容
N 搜索上一个同样的内容
查找 :{作用范围}s/{目标}/{替换}/{替换标志}
:%s/old/new/gc 全局替换
作用范围 当前行:s,全文:%s,选区在visual 选择区域后输入:后 vim 自动补全:’<,>’s 或手动指定:4,6s 或.,+2s 接下来 2 行
替换标志
- i 表示大小写不敏感,I 表示敏感,等于与模式中的\c
:%s/foo/bar/i === :%s/foo\c/bar - g 全局替换
- c 表示需要确认,每次替换系统按键确认 y 替换/n 不替换/a 替换所有/q 退出查找模式/ l 替换当前位置并退出
- i 表示大小写不敏感,I 表示敏感,等于与模式中的\c
在normal模式下按下*即可查找光标所在单词(word)
- \c表示大小写不敏感查找,\C表示大小写敏感查找
- # 匹配当前光标所在的单词 是下一个 #是上一个
- 光标移动可以与其他命令联动,比如 0y$ 表示从行首拷贝到最后一个字符
- 拷贝不一定要用y,还可以使用d(删除),v(可视化选择),gU(变大写),gu(变小写)
插入
- i在光标前插入(insert),I 在当前行开头插入
- a在光标后插入(append),A在当前行结尾进行插入,相当于执行了
$a
操作 - o在当前行后插入新行, O在当前行前插入新行
- ea 在当前行结尾插入(end append)
- cw 当前光标到单词结尾清空并插入
- 在插入模式删除除了使用退格键,还可以使用 ctrl+w 删除前一个单词或使用 ctrl + u 删除至行首.
替换和删除
- r 替换一个字符 replace,R 可以替换多个字母.
- cc 替换一行
- cw 替换一个 word
- c$ 替换到行尾
- s 修改一个字符
S 修改一整行
x 删除当前光标所在的一个字符
- dl 删除当前字符 === x
- dw 删除到下一个单词开头
- d0 删除至行首
- dd 删除当前行
- dj 删除上一行
- dk 删除下一行
- gg dG 删除全部内容
- :1,10d 删除1-10行
- :11,$d 删除11行及以后所有行
删除的内容存到剪贴板.
操作
d,c,y等操作符加 一个动作命令组成一次操作.例如 daw.
操作符有
- c 修改 (change)
- d 删除 (delete)
- y 复制, (yank)
- p 粘贴 (paste/put)
- g~ 反转大小写
- gu 转换为小写
- gU 转换为大写
- `>` 增加缩进
- `<` 减少缩进
- `=` 自动缩进
复制粘贴
- yy 拷贝当前行(yank)
- 按v或V进入可视模式,然后上下左右选择,再按y即可复制,按d即可剪贴
- p 粘贴到下一行或右侧
- P 粘贴至上一行或左侧
- 调换文本行可以使用 ddp(先删除当前行再粘贴),同理复制当前行 yyp
- 交换两个词. 先用 d 删除一个词,然后 mm 标记,在用 v 选中另一个词按 p替换,然后 ~m 回到标记位置再按 p 即可完成替换.
- 针对字符的复制或删除操作如 x,diw等将创建面向字符的寄存器,粘贴时会放在光标后.针对行的复制删除操作如 dd,yy 或 dap 会创建针对行的寄存器,粘贴时会放在当前行的下一行.
撤销和重复
- u撤销最近一次修改(undo)
- .命令可以再普通模式下重复上次修改,如果想要在命令模式下重复上次命令可以用
@:
- U撤销所有
- ctrl + r 取消最后一次的撤销
文件管理
- :e
打开一个文件 - :saveas
文件另存为 - :x 或 zz 或:wq 保存并推出
- :bn 切换到下一个文件(n表示next,b表示切换blocked-out)
- :bp 切换到上一个文件(p表示prev)
- :n 切换到下一个
命令行模式技巧
- DTc 删除光标的c之间的所有字符
- Rc 将光标的字符替换为c
- nDD 删除n行数据
- nYY 复制n行数据
- nX 删除n个字符
命令模式
按:进入命令模式.
- :n 光标移动到多少行
- :1,5w file 将第一行至第五行写入文件
- :.,$w file 当前行至结束写入文件
- :w 保存
- :wq 保存退出
- :q 退出
- :q! 强制退出
- :/str/ 正向搜索,光标移动到下一个结果
- :?str? 逆向搜索
- 正则:
- :/^xxx/
- :/xxx$/
- :s实现替换
- delete 删除
- yank 复制
- put 粘贴
- copy 拷贝
- move 移动
- join 连接
- normal 可以执行普通模式下的命令
- substitute/{pattern}/{string}/{flags} 在范围内出现{pattern}的地方替换为{string}
- x,y 表示 x-y 行,
.
表示当前行,%
表示当前文件所有行 - 使用
:t
和:m
命令复制和移动行.其中:t
是 copy 命令的简写(可以理解为copyTo),:m
是 move 命令的简写
vim 实用技巧
分隔符文本对象.
vim 的文本对象由两个字符组成,第一个字符是 i/a, i 会选择分隔符内部文本,a 会选择包括分隔符在内的整个文本.可以理解为 inside/all. 第二个字符是分隔符如)]}>'"
,t 表示标签- a)/i)
- a”/i”
- at/it
文本对象前可使用d/c/y/g~/gu/gU/>/</=
等操作符
范围文本对象
- aw 当前单词及一个空格/iw 当前单词
- as 当前句子及一个空格/is 当前句子
- ap 当前段落及一个空行/ ip 当前段落
一般 d 和 a 配合, c 和 i 配合.
标记位置
mm 命令可以标记一个位置,然后~m回到标记点 可以回到上次修改位置.
比如我们想要修改一对大括号,可以先用%匹配大括号,这时 vim 会自动为发生跳转的地方设置一个标记,在我们使用 r]修改后大括号后,按 ~~ 调回到前大括号,然后 r[ 修改完成.自定义宏
- 创建宏 q a,操作,q 结束. 其中 a 为命名的寄存器.
- 查看宏 :reg a
- 调用宏 @a, @@可以回放上次调用的宏.
- 当前行多次调用宏. 3@a ,调用三次宏 a
- 多行调用宏, 按 v 进入可视模式,选中执行区间,
:normal @a
就可以在每一行执行宏了.
用迭代求值的方式给列表编号
1
2
3
4
5:let i = 1 #定义变量
qa # 定义宏和寄存器
I ctrl+r =1 ctrl+R ) esc # 对行进行操作
:let i += 1 # 变量递增
q # 完成录制搜索引擎
\v
表示模式开关,可以让搜索时不用正则写过多的转义字符,比如要匹配 css 中的颜色可以使用/\v #[0-9a-fA-F]{6}|[0-9a-fA-F]{3}
\V
表示原义开关,按照字符进行匹配,即便字符中有像.这样的符号也会按照原义查找.substitude命令
该命令可以提供查找模式以及替换字符串,还可以指定执行的范围.具体语法:s/{pattern}/{string}/{flags}
在范围内出现{pattern}的地方替换为{string},如果想要全局配置要使用:%s/xxx/xxx/g
flags 为标志位,其中 g 是全局范围,n 为统计个数而不执行替换,c 让我们确认每一次修改.e 可以屏蔽错误提示.i 表示大小写不敏感,I 表示大小写敏感.
分屏
- :vsp 左右分屏
- :sp 上下分屏
- :tabnew 新建标
z和fzf脚本
1 | j() { |