vim操作速查
记录一些可能不太常用但很实用的vim操作,不涉及基础操作
注:常规操作不赘述
参考链接/有用网站
vimAwesome:vim插件推荐网站
参考手册: 非官方的vim参考手册
配置文件
Vscode中vim配置文件: 由VSC settings.json中的vim.vimrc.path指定
Linux中vim配置文件位置:
1
~/.vimrc
操作速查
查找与替换
设置查找高亮:
1
2
:set hlsearch # 设置高亮
:set nohlsearch # 取消高亮
设置查找时忽略大小写:
1
2
3
4
:set ignorecase # 设置默认进行大小写不敏感查找
:set noignorecase # 取消忽略大小写
:set smartcase # 设置智能大小写查找, 当查找内容包含大写字母时,查找时区分大小写
查找替换:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 模板:
:{作用范围}s/{目标}/{替换}/{替换标志}
# 例子:
: %s/foo/bar/g # 将全文中的所有foo替换为bar | %表示全文替换,g表示全局替换
: s/foo/bar/g # 将当前行中的所有foo替换为bar
: 2,11s/foo/bar/g # 将2-11行中的所有foo替换为bar
: 2,$s/foo/bar/g # 将2行到最后一行中的所有foo替换为bar
: .,$s/foo/bar/g # 将当前行到最后一行中的所有foo替换为bar
: .,+2s/foo/bar/g # 将当前行到当前行+2行中的所有foo替换为bar
1
2
3
4
5
: %s/foo/bar/gc # 将全文中的所有foo替换为bar,并且在替换前询问用户是否替换(c表示confirm)
: %s/foo/bar/gi # 将全文中的所有foo替换为bar,并且忽略大小写(i表示ignorecase)
: %s/foo/bar/gI # 将全文中的所有foo替换为bar,并且大小写敏感(I表示ignorecase)
注意:vim的查找替换支持正则表达式
命令行模式
在vim窗口中打开一个新文件:
1
:e <filename>
常用set命令:(注意: 为临时设置,要永久生效需修改.vimrc)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
:set number " 显示行号
:set nonumber " 关闭行号
:set tabstop=4 " 设置 tab space 为4个空格
:set ts=4 " 同 tabstop
:set expandtab " 将tab替换为指定数量的空格
:set autoindent " 设置为自动缩进
:set background=dark " 设置背景颜色
:set guifont=consolas:h14 " 设置字体为 consolas,字号为14
:set history=700 " 设置保存命令的行数
:set autoread " 设置当文件变化时,自动读取新文件
:set wrap " 启动折行
:set nowrap " 禁止折行
" 切换文件格式,ff是 fileformat 的缩写
:set ff=unix " 将文件切换为 unix 格式,每行以 "\n" 结尾
:set ff=dos " 切换为 Windows 格式,每行以 "\r\n" 结尾
" 设置编码格式
:set encoding=utf-8 " 设置 vim 展示文本时的编码格式
:set fileencoding=utf-8 " 设置 vim 写入文件时的编码格式
:set filetype=html " 设定文件类型,方便语法高亮
:set hlsearch " 高亮显示搜索结果
:set paste " 设置为 paste 模式,在粘贴前设置该模式,可以避免各种 auto-formating
:set nopaste " 切换回 normal 模式
使用Shell命令
基础语法:
1
2
:! <shell-command> # 执行<shell-command>的shell命令
:!! # 重复上一次的shell命令
使用shell并将其标准输出写入文件:
1
2
3
:r !<shell-command> # 将<shell-command>的输出写入当前文件的光标位置
:<n1>r !<shell-command> # 将<shell-command>的输出写入当前文件的第<n1>行
:<n1>,<n2>r !<shell-command> # 将<shell-command>的输出写入当前文件的第<n1>行到第<n2>行
1
2
3
4
5
# 例子:
:r !ls # 将ls命令的输出写入当前文件的光标位置
:r !echo "hello" # 将echo "hello"的输出写入当前文件的光标位置
:5r !ls # 将ls命令的输出写入当前文件的第5行
将当前文件的内容写入shell命令的标准输入:
1
2
:w !<shell-command> # 将当前文件的内容写入<shell-command>的标准输入
:<n1>,<n2>w !<shell-command> # 将当前文件的第<n1>行到第<n2>行的内容写入<shell-command>的标准输入
1
2
3
# 例子:
:w !cat # 将当前文件的内容写入cat命令的标准输入
:1,5w !wc # 将当前文件的第1行到第5行的内容写入wc命令的标准输入
注意: 在Vsc vim插件中部分shell命令可能无法使用,例如git/ls等
宏
录制宏:
1
2
3
q<register> # 开始录制宏,register为寄存器名
# do something
q # 结束录制
使用宏:
1
<num>@<register> # 使用宏,num为重复次数,register为寄存器名
插件
vimplug: vim插件管理器,可以在vim中安装/卸载插件
neovim
vim的重构版本
本文由作者按照 CC BY 4.0 进行授权