vim
本文最后更新于:2025年5月12日 中午
vim
插件
1 |
|
快速执行上一条命令
@:
:在普通模式下,重复上一条 Ex 命令。命令行模式:在
:
命令行模式下,按↑
查看和执行上一条命令。@@
:在普通模式下,重复上一个宏。.
命令:- 作用:在普通模式下,重复最后一次普通模式命令或插入模式操作。
- 示例:
- 删除多行:
dd
(删除当前行),然后按.
继续删除下一行。 - 插入文本:
iHello<ESC>
(插入文本并返回普通模式),然后按j.
重复插入。 - 替换字符:
rA
(替换字符),然后按.
重复替换下一个字符。
- 删除多行:
多窗口
跳转翻页
跳转到指定行
- 直接输入行号:在命令模式下直接输入行号即可跳转到该行,例如输入
500
跳转到第 500 行。 :行号
:跳转到指定行,例如:101
跳转到第 101 行。
翻页操作
Ctrl+f
:向下翻一整页。Ctrl+b
:向上翻一整页。Ctrl+d
:向下翻半页。Ctrl+u
:向上翻半页。
滚动操作
Ctrl+e
:向下滚动一行。Ctrl+y
:向上滚动一行。
位置跳转
n%
:跳转到文件的 n% 位置,例如50%
跳转到文件中间。
屏幕显示调整
zz
:将当前行移动到屏幕中央。zt
:将当前行移动到屏幕顶端。zb
:将当前行移动到屏幕底端。
这些命令可以帮助你更有效地在 Vim 中导航和调整视图,适用于快速查找和定位代码或文本。
多行操作
win11 wsl2 ctrl+v冲突
在 Windows 11 下使用 Vim,如果在 Normal 模式下按
Ctrl + v
被系统拦截为“粘贴”操作,而不是进入 Vim
的视觉块模式(Visual Block Mode),这是因为终端或系统默认将
Ctrl + v
绑定为粘贴快捷键,覆盖了 Vim 的功能。
- 在 Normal 模式下,按
Ctrl + q
代替Ctrl + v
,功能完全相同。
移动
以下是 Vim 中与光标移动相关的常用命令的总结:
w
:将光标移动到下一个单词的开头(以空格或标点符号为分隔符)。W
:将光标移动到下一个以空格为分隔符的单词的开头。b
:将光标移动到当前单词的开头,或者到前一个单词的开头(以空格或标点符号为分隔符)。B
:将光标移动到当前以空格为分隔符的单词的开头,或者到前一个以空格为分隔符的单词的开头。e
:将光标移动到当前单词的末尾(以空格或标点符号为分隔符)。E
:将光标移动到当前以空格为分隔符的单词的末尾。f
+ 字符: 将光标向右移动到指定字符的位置。- 按下
;
键,将光标跳转到下一个相同的字符处。 - 按下
,
键,将光标跳转到上一个相同的字符处。
- 按下
F
+ 字符: 将光标向左移动到指定字符的位置。t
+ 字符: 将光标向右移动到指定字符的前一个位置。T
+ 字符: 将光标向左移动到指定字符的前一个位置。n
+G
: 将光标移动到第n
行。%
: 匹配括号定位:将光标置于某个括号上时,按下%键,Vim 将会跳转到配对的对应括号上。
这些命令可以帮助你在 Vim 中高效地移动光标,进行文本编辑。
wrap
在 Vim 中,set nowrap
是用来禁用自动换行的设置。默认情况下,当一行的内容超出屏幕宽度时,Vim
会自动将其换行显示。如果你使用
set nowrap
,那么长行文本将会被水平滚动,而不是换行。
这意味着:
set nowrap
:禁用换行,文本行如果超出屏幕宽度,则需要水平滚动才能查看。set wrap
(默认):启用换行,当一行文本超出屏幕宽度时,自动换行到下一行显示。
通常,如果你处理的是长代码行或长文本行,set nowrap
可以帮助避免换行带来的视觉干扰。
非常对!你补充的这些命令是 Vim 在 set nowrap
生效时进行水平滚动的常用快捷键,下面是详细说明,便于你使用和记忆:
✅
基本的水平滚动命令(在 set nowrap
时使用)
命令 | 含义 |
---|---|
zh |
向右滚动1个字符(视图窗口内容向右平移,显示更多左边的内容) |
zl |
向左滚动1个字符(显示更多右边的内容) |
zH |
向右滚动半个屏幕宽度 |
zL |
向左滚动半个屏幕宽度 |
Nzl |
向左滚动N 个字符 |
Nzh |
向右滚动N 个字符 |
NzL |
向左滚动N × 半屏宽 |
NzH |
向右滚动N × 半屏宽 |
🔄 示例
10zl
:向左滚动 10 个字符2zL
:向左滚动一个完整屏幕(因为是 2 × 半屏)5zh
:向右滚动 5 个字符zH
:相当于“向右快速看一下前面的内容”zL
:相当于“向左快速跳到行的后面部分”
删除
D
:删除到行尾,相当于d$
d+G
:删除到文档尾(包括当前行)d+g+g
:删除到文档头(包括当前行)d+0
:删除从光标前一个字符到行首n+x
:向右删除n个 不包括光标所在n+X
:向左删除n个 不包括光标所在d+w
:当光标在一个单词首时,删除一个单词,不在单词首是,从光标开始删除至单词结尾。不进入插入模式d+a+w
:删除一个单词(包括空白字符),光标在单词内部时,不进入插入模式
复制和移动行
:t
命令(复制行)
- 语法:
:[range]t[target]
- 示例:
- 复制当前行到第 10 行后:
:t10
- 复制第 3 行到第 10 行后:
:3t10
- 复制第 1 到第 3 行到第 10 行后:
:1,3t10
- 复制当前行到第 10 行后:
:m
命令(移动行)
- 语法:
:[range]m[ove] [target]
- 示例:
- 移动当前行到第 10 行后:
:m10
- 移动第 3 行到第 10 行后:
:3m10
- 移动第 1 到第 3 行到第 10 行后:
:1,3m10
- 移动当前行到第 10 行后:
实用技巧
- 复制当前行到文件末尾:
:t$
- 移动当前行到文件末尾:
:m$
查找替换
(命令模式)搜索和替换
命令模式下(esc退出插入模式):
1 |
|
快速选择单词并按其查找
- 将光标移动到单词的任意字母上,按
*
键向下查找并高亮显示该单词的所有匹配项,按n
键跳转到下一个匹配项,N
键跳转到上一个匹配项。 #
键功能类似*
键但向上查找。- 按
g+d
键可高亮显示单词,然后按n
键查找。 - 对于前后无空白字符或标点的单词,可用
g*
键查找,包含单词字符序列的内容都会被匹配。
返回终端
忽略大小写
鼠标模式
sudo保存文件
-
1
:w !sudo tee % > /dev/null
格式化与缩进
格式化命令
- 格式化整个文件(在正常模式下):
ggVG=
:跳转到文件开头,选中整个文件,并应用格式化。
- 格式化选定范围(在可视模式下):
shfit + v
进入行可视模式后,使用方向键选择需要格式化的行,然后按=
进行格式化。
- 格式化指定行范围(在正常模式下):
nG=mG
:格式化从第n
行到第m
行,例如5G=10G
格式化第 5 行到第 10 行。
缩进命令
- 增加缩进:
>
:在正常模式下,按>
后需要按Enter
来增加当前行的缩进。>>
:在正常模式下,直接增加当前行的缩进(无需按Enter
)。增加多行缩进:
- 进入行可视模式:按
shift + v
。 - 扩展选定范围:使用方向键选择多行。
- 增加缩进:按
>
。
- 进入行可视模式:按
- 减少缩进:
<
:在正常模式下,按<
后需要按Enter
来减少当前行的缩进。<<
:在正常模式下,直接减少当前行的缩进(无需按Enter
)。减少多行缩进:
- 进入行可视模式:按
shift + v
。 - 扩展选定范围:使用方向键选择多行。
- 减少缩进:按
<
。
- 进入行可视模式:按
折叠
在 Vim 中如何使用缩进折叠的方法:
- 开启缩进折叠:
- 在 Vim 的配置文件中添加
set foldmethod=indent
- 这样 Vim 就会根据代码的缩进深浅自动进行折叠
- 在 Vim 的配置文件中添加
- 控制折叠深度:
- 使用
set foldlevel=n
命令来设置初始的折叠深度 n
表示只会折叠缩进深度小于等于n
的代码块- 例如
set foldlevel=2
表示只会折叠缩进深度小于等于 2 的代码块
- 使用
- 常用的折叠控制命令(按下Esc进入普通模式执行下方命令):
za
: 打开/关闭当前折叠zo
: 打开当前折叠zc
: 关闭当前折叠zR
: 打开所有折叠zM
: 关闭所有折叠
- 一些技巧:
- 可以在编辑时使用
>>
和<<
命令来增加或减少代码缩进,这样会相应地创建或删除折叠 - 可以设置
foldnestmax
来限制最大折叠深度,避免过度折叠 - 可以设置
foldcolumn
来显示折叠状态的列,方便查看
- 可以在编辑时使用
跳转
Vim 跳转相关快捷键及其配合使用:
Ctrl + ]
:跳转到光标下符号的定义处。- 常用场景:当你在代码中看到一个函数或变量名,使用
Ctrl + ]
可以快速跳转到其定义位置。
- 常用场景:当你在代码中看到一个函数或变量名,使用
Ctrl + t
:返回到上一个跳转位置。- 配合使用:如果你用
Ctrl + ]
跳转到定义处之后想返回到跳转前的位置,就可以使用Ctrl + t
。
- 配合使用:如果你用
Ctrl + o
:后退到上一个跳转位置。- 常用场景:当你在文件中多次跳转(例如通过搜索、跳转到定义等),使用
Ctrl + o
可以依次返回之前的跳转位置。 - 配合使用:这个命令适合在你连续进行了多次跳转后,想要逐步回顾之前的位置时使用。
- 常用场景:当你在文件中多次跳转(例如通过搜索、跳转到定义等),使用
Ctrl + i
:前进到下一个跳转位置。- 常用场景:在使用
Ctrl + o
后,如果你想再跳回到之前的某个位置,可以使用Ctrl + i
向前移动。 - 配合使用:
Ctrl + i
和Ctrl + o
是配对使用的,Ctrl + o
用于回退,Ctrl + i
用于前进,帮助你在跳转历史中自由导航。
- 常用场景:在使用
:jumps
:列出跳转历史。- 常用场景:当你不确定自己跳转过哪些位置,或想查看完整的跳转路径时,可以使用
:jumps
来显示跳转历史列表。
- 常用场景:当你不确定自己跳转过哪些位置,或想查看完整的跳转路径时,可以使用
使用示例:
- 你在代码中使用
Ctrl + ]
跳转到一个函数的定义。 - 查看完定义后,想返回之前的位置,按
Ctrl + t
。 - 你继续编辑文件,并多次跳转(例如使用搜索或其他跳转命令)。
- 需要逐步回顾之前的位置时,按
Ctrl + o
逐步后退。 - 如果后退过头,按
Ctrl + i
前进到下一个跳转位置。
通过这些命令的配合,你可以高效地在代码中导航、跳转和回溯,提高编辑效率。
#ifdef
- 跳转到匹配的
#else
或#endif
%
:在#ifdef
、#else
、#endif
之间跳转,返回到匹配项。
- 返回到
#ifdef
或#if
的开始处[#
:跳转到上一个#ifdef
或#if
块的开始(如果光标在块内)。
- 跳转到下一个
#else
或#endif
]#
:跳转到下一个#else
或#endif
,跳过中间的#ifdef
或#if
块。
例子说明
- 如果光标在
#ifdef
处,按%
会跳转到对应的#else
。 - 继续按
%
会跳转到#endif
,再按一次%
会回到原来的#ifdef
。 - 在一个
#ifdef
-#endif
块内的某个位置,按[#
会移动到对应的#ifdef
或#if
。 - 按
]#
会跳转到下一个#else
或#endif
,并跳过当前块。
注意事项
- 如果光标不在
#if
或#ifdef
的后面位置,按[#
时 Vim 会鸣音(发出错误提示)。 - 确保 Vim 的文件类型检测正确,以便它能够正确识别 C/C++ 代码中的这些预处理指令。
函数跳转
回到函数开头
- 使用
[{
命令:- 将光标放在函数体的任意位置,然后输入
[{
。这个命令会将光标移动到当前函数的开头。
- 将光标放在函数体的任意位置,然后输入
回到函数结尾
- 使用
]}
命令:- 将光标放在函数体的任意位置,然后输入
]}
。这个命令会将光标移动到当前函数的开头。
- 将光标放在函数体的任意位置,然后输入
cscope
先在源码目录中生成索引数据:
1 |
|
Vim 中 cscope 相关的 Ctrl 快捷键:
Ctrl + \
系列快捷键:Ctrl + \
s
: 查找C语言符号,等同于normal模式下的:cs f s <symbol>
Ctrl + \
g
: 查找函数、宏、枚举等定义的位置,等同于normal模式下的:cs f g <symbol>
Ctrl + \
d
: 查找本函数调用的函数,等同于normal模式下的:cs f d <symbol>
Ctrl + \
c
: 查找调用本函数的函数,等同于normal模式下的:cs f c <symbol>
Ctrl + \
t
: 查找指定的文本字符串,等同于normal模式下的:cs f t <string>
Ctrl + \
e
: 查找egrep模式,等同于normal模式下的:cs f e <pattern>
Ctrl + \
f
: 查找并打开指定的文件,等同于normal模式下的:cs f f <filename>
Ctrl + \
i
: 查找包含本文件的文件,等同于normal模式下的:cs f i <filename>
- 其他 cscope 快捷键:
Ctrl + ]
: 跳转到光标下符号的定义处Ctrl + T
: 返回上一个位置
buffers
在 Vim 中,查看和管理 buffers 的常用简写命令如下:
:ls
or:buffers
- 列出所有已打开的 buffers。:b <buffer_number>
- 切换到指定的 buffer。例如:b 2
切换到 buffer 2。:bn
- 切换到下一个 buffer。:bp
- 切换到上一个 buffer。:bd
- 关闭当前 buffer。:bd <buffer_number>
- 关闭指定的 buffer。:bufdo <command>
- 对所有打开的 buffers 执行指定的命令。例如:bufdo w
保存所有 buffers。
这些是使用 Vim 处理 buffers 时最常用的简写命令。如果您需要更多关于 Vim buffers 的信息,欢迎随时询问我。
Quickfix
Vim 中使用 Quickfix 窗口的常用快捷键简写:
:copen
- 打开 Quickfix 窗口- 命令模式下执行
:TlistToggle
关闭函数及变量列表,不关闭会影响Quickfix 窗口聚焦。 - 当窗口聚焦时,您可以使用 j 或 k 来高亮显示下一个或上一个列表项,使用 enter 将光标移动到高亮显示的文件上和位置上。
- 命令模式下执行
:ccl
- 关闭 Quickfix 窗口,是:cclose
命令的简写形式:cl
- 列出所有 Quickfix 条目,是:clist
命令的简写形式,进入选择列表后d
向下翻页,u
向上翻页:cc [nr]
- 跳转到指定编号的 Quickfix 条目:cn
- 跳转到下一个 Quickfix 条目,是:cnext
命令的简写形式:cp
- 跳转到上一个 Quickfix 条目,是:cprev
命令的简写形式:cfirst
- 跳转到第一个 Quickfix 条目:clast
- 跳转到最后一个 Quickfix 条目
导航旧Quickfix
Vim 在每个会话中保留多达 10 个快速修复列表,在每个窗口中保留 10 个位置列表。
cscope、grep等都可以创建新的快速修复列表。
如vim -t start_kernel
打开init/main.c后,在命令行模式下执行:
1 |
|
可以创建一个新的Quickfix。
:col
- 切换到较早的 Quickfix 列表,是:colder
命令的简写形式:cnew
- 切换到较新的 Quickfix 列表,是:cnewer
命令的简写形式:cdo <command>
- 对所有 Quickfix 条目执行指定命令
位置列表
如vim -t start_kernel
打开init/main.c后,在命令行模式下执行:
1 |
|
可以创建一个新的位置列表。
导航位置列表的一些命令:
:lopen
- 打开位置列表窗口。:lcl
或:lclose
- 关闭位置列表窗口。:lnext
- 跳到列表的下一项。:lprev
- 跳到列表的前一项。:lfirst
- 跳到列表的第一项。:llast
- 跳到列表的最后一项。ll [n]
- 跳到第 n 项。
位置命令与它们的快速修复列表几乎完全相同,除了c 被替换成 l 。
NERDTree
以下是 Vim 的 NERDTree 插件中常用的快捷键总结:
NERDTree
是 Vim 的一个插件,用于在 Vim
中管理和浏览文件和目录。以下是一些常用的 NERDTree
命令和操作:
基本命令
:NERDTree
:打开或关闭NERDTree
窗口。:NERDTreeToggle
:切换NERDTree
窗口的显示或隐藏状态(如果打开则关闭,关闭则打开)。:NERDTreeFocus
:将焦点切换到已经打开的NERDTree
窗口。:NERDTreeFind
:定位NERDTree
到当前正在编辑的文件,并将焦点移动到该文件上。
基本导航
o
: 打开/关闭选中文件或目录。Enter
: 打开文件,或者进入目录。s
: 水平分割窗口并打开选中的文件。i
: 垂直分割窗口并打开选中的文件。t
: 在新标签页中打开选中的文件。p
: 转到当前节点的父目录。
文件与目录操作
m
: 打开文件操作菜单,可以选择创建、删除、重命名文件或目录。a
: 添加文件或目录。d
: 删除选中的文件或目录。r
: 重命名文件或目录。
切换视图
I
: 切换显示隐藏文件(以.
开头的文件)。C
: 将当前目录设置为 NERDTree 的根目录。u
: 返回到上一级目录。R
: 刷新目录树。
帮助与其他
?
: 打开 NERDTree 的帮助文档。q
: 关闭 NERDTree 窗口。
这些快捷键可以帮助你更高效地在 NERDTree 中进行文件和目录的导航和操作。