1.:put命令
:put 是一个命令行命令,用于将寄存器的内容粘贴到当前行的下方
这个命令一般用于将 当前行的所选中的内容复制到下一行。
首先选中你要复制的内容,可通过v或者ctrl+v亦或者shift+v然后通过h、l或f搜索移动光标进行选中,然后yy,然后移动到目的行的,进行:put即可在当前行的下一行进行粘贴。
2. 通过tab来编辑不同的文件
:tabnew <filename> 在新选项卡中打开指定的文件。
:tabnext 切换到下一个选项卡,或快捷键 gt
:tabprev 切换到上一个选项卡,或快捷键gT
:tabclose 关闭当前选项卡
ngt 切换到第n个选项卡,不用输入:
3.:sp命令
sp 命令进行分割窗口,使同一个文件有两个不同的窗口,或者打开另外一个文件
:sp b.txt
4.*和#命令
* 和 #: 匹配光标当前所在的单词,例如将鼠标放置在plugin上,这样按下 * 或 # 则可以在 <plugin> xxxx xxxx </plugin> 之间进行快速移动。
* 移动光标到下一个匹配单词,但实际键盘的输入为 shift + 8
# 移动光标到上一个匹配单词,但实际键盘的输入为 shift + 3
5.整体将代码进行左移和右移
shift + > + > (向右移动) ,shift + < + <(向左移动) // 需要按两下 >> <<
:10,15>
第10行至第15行向右整体移动
:20,80<
第20行至第80行反缩进
6.自动缩进
ctrl + v -> ngg -> =
7. 翻页
翻下一页,Ctrl+f键 ,f 的英文全拼为:forward
翻上一页,Ctrl+b键,b 的英文全拼为:backward
翻下半页,Ctrl+d键,d 的英文全拼为:down
翻上半页,Ctrl+u键,u 的英文全拼为:up
8. 进入编辑模式
I : 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
r : 在当前光标所在位置进行替换
R : 进入替换并光标向后移动依次进行替换,并直到esc退出替换
s : 删除当前光标所在的字符,并进入到编辑模式
cc : 删除当前光标所在的行,并进入到编辑模式
C : 删除当前光标到行尾的所有字符,并进入到编辑模式
9. 打开命令行
:tab ter //以tab方式打开terminal
ctrl+w gt 或 ctrl+w gT // 在文档和命令行之间进行切换
ctrl+d 关闭命令行
或者
:ter //以buffer方式打开terminal,将会显示上下两层
10. 快速删除
:g/^#/d :代表输入命令,g代表全量, // 之间是正则, ^# 以#开头的行,d代表删除
:g/^$/d :代表输入命令,g代表全量,// 之间是正则,^$代表从头到尾没有任何字符,d代表删除
属于 :global 命令,格式为 :g/pattern/command 对匹配 pattern 的行执行 command(这里是 d 删除),也就是说 删除或处理整行 → 用 :g
0d^ :代表删除从行首到第一个字符之间的空格, 0代表光标回到行首,d^代表删除从行首到第一个字符之间的空格
替换命令:
也就是说 修改行内内容 → 用 :%s/xxx/yyy/g 替换命令
:[range]s/pattern/replacement/[flags]
range:指定替换范围(默认当前行)% 表示整个文件,1,5 表示1-5行,'<,'> 表示选中的行(可视模式)
pattern:正则表达式(需注意 Vim 的语法差异)
replacement:替换内容(支持引用捕获组)
flags:控制替换行为(如 g 全局替换,c 确认)
捕获组与引用:
在 Vim 的正则表达式中,你可以通过 \(...\) 定义多个捕获组,然后通过 \1, \2, \3 等按从左到右的顺序引用它们
基本捕获组
案例1
:%s/^\(.*\)$/\1 : {{\1}}/g
: vim底部的命令
% 所有行
s 代表替换命令
/ 正则开始
^\(.*\)$ 这里代表当前行
/ 正则中间标识符
\1 代表上面(.\)的捕获组
: 增加了:
{{\1}} 在\1引用上增加了两个大括号
/ 正则结束
g 整个一行全部进行替换
结果
apple ---->>>> apple : {{apple}}
或者使用宏
qa " 开始录制到寄存器 a
0 " 跳到行首
y$ " 复制整行内容
A " 跳到行尾并进入插入模式
: {{<C-r>0}} " 输入 : {{ 粘贴复制的内容 }} 这里的<C-r>0引用0号寄存器的值,即y$复制的的值
<Esc> " 退出插入模式
q " 停止录制
然后执行全部行的话,即:%norm @a即可
案例2
:%s/\(\d\{4\}\)-\(\d\{2\}\)-\(\d\{2\}\)/日期:\1年\2月\3日/
结果
2023-09-15 ---->>>> 日期:2023年09月15日
案例3
:%s/\([a-z]\+\) \([0-9]\+\)/\2 \1/
结果
apple 123 ---->>>> 123 apple
嵌套捕获组
正则表达式 \(A\(B\(C\)\)\) 匹配 "ABC":
\1 → ABC(最外层分组)
\2 → BC(第二层分组)
\3 → C(最内层分组)
:s/\(\a\(\d\)\)/\1-\2/
\a 字母字符:匹配任意字母(等价于 [a-zA-Z])。
\+ 量词:匹配前导字符(此处是 \a)1 次或多次(相当于其他正则中的 +)
\d 等价于[0-9]
外层 \(\a\(\d\)\) 是 \1,内层 \(\d\) 是 \2
a3 ---->>>> a3-3
可以组合上述的两个命令:
:g/^#/s/old/new/g 先匹配以 `#` 开头的行,再在这些行中替换 `old` 为 `new
11. 使用quickfix
quickfix是什么?
专门用于 快速定位和处理代码中的错误、警告或其他批量结果(如全局搜索匹配项)。它最初设计是为了与编译器配合使用,但现已扩展到支持代码检查、搜索替换、静态分析等多种场景。
Quickfix 的核心是 「结果列表」 和 「快速跳转」。它会将外部工具(如编译器、grep、linter 等)的输出解析成一个结构化列表,并允许你快速在这些结果中导航。
关键特性
1. 批量处理结果
-
支持一次性加载多个错误/结果(例如编译错误、全局搜索匹配项)。
-
结果可以跨不同文件(如同时显示
main.c和utils.c中的错误)。
2. 快速跳转
-
无需手动翻找错误信息,一键跳转到具体文件的具体行。
-
支持顺序导航(下一个/上一个错误)。
3. 与外部工具集成
-
默认支持
:make(编译)、:grep(搜索)、:vimgrep(Vim 内置搜索)等命令
Quickfix 的本质是 Vim 的「结果处理器」,它:
-
将碎片化的错误/结果 结构化。
-
提供 快速导航 和 批量操作 的能力。
-
成为 Vim 与其他开发工具(编译器、linter、grep 等)的 桥梁。
如何使用quickfix?
这里有一个代码案例,目录结构为:
// 1. main.c(包含一个错误:未声明 printf)
int main() {
printf("Hello, World!\n"); // 错误:未包含 <stdio.h>
int x = add(2, 3); // 警告:函数未声明
return 0;
}
# 2. Makefile
CC = gcc
CFLAGS = -Wall -Wextra
all: my_program
my_program: main.o utils.o
$(CC) $(CFLAGS) -o $@ $^
main.o: main.c
$(CC) $(CFLAGS) -c $<
utils.o: utils.c
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o my_program
// 3. utils.c(包含一个警告:未使用的变量)
int add(int a, int b) {
int unused_var = 10; // 警告:未使用的变量
return a + b;
}
具体操作:
打开main.c 在底部执行 :make 命令
回车后如有错误则会显示如下图片:
然后 再次按 回车 返回, 然后在底部输入下列命令
:copen 打开一个窗口显示当前的错误列表,如果一个程序没有错误,也可以打开列表但是列表为空。
:ccl[ose]
下面是quickfix窗屏。你可以看到quickfix窗屏指向的第一个错误已经定位到我们相就错误的文件行上了。
通过是用ctrl+w在加上j或k 可以使光标啊在源代码窗口和quickfix窗口进行切换,我们可以像浏览文件那样用j, k在quckfix窗屏中上下移动到相应的错误上然后按回车,然后就可以在上面的窗屏里定位到相应的源文件的代码行。但是,如果是这样的话, 你要定位下一条错误还得用Ctrl +W 回到quickfix屏中来然后重复来过,存在总是在两个窗口之间切换的繁琐。
我们可以一直在源代码窗口而不用切换到quickfix,使用下面的命令而不用回到quickfix中来:
:cp 跳到上一个错误
:cn 跳到下一个错误
:cl 列出所有错误
:cc 显示错误详细信息
这样依次在源代码中修复好,最后make即可。
quickfix除了和make进行梦幻联动的编译操作,还可以与:grep和:vimgrep进行查找操作。
假设在 Nginx 源码中查找 NGX_HTTP_VAR_INDEXED 的定义或调用,然后在代码中进行搜索得出的结果放在了quickfix中,通过 :copen打开然后使用:cn或:cp进行下一个或上一个,和之前使用make所做的操作是一模一样。
# 进入 Nginx 源码目录
cd nginx-1.23.0/
# 我们正在浏览nginx的代码
vim somecode.c
# 然后在代码中执行搜索
:grep -r --include="*.[ch]" NGX_HTTP_VAR_INDEXED src/

发布评论