文章

vim操作速查

记录一些可能不太常用但很实用的vim操作,不涉及基础操作

注:常规操作不赘述

meme 梗图镇楼

参考链接/有用网站

配置文件

Vscode中vim配置文件: 由VSC settings.json中的vim.vimrc.path指定

Linux中vim配置文件位置:

1
~/.vimrc

操作速查

sheet 速查表

查找与替换

设置查找高亮:

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 进行授权