我记不住的那些vim知识(快速识记)
1.:put命令
:put
是一个命令行命令,用于将寄存器的内容粘贴到当前行的下方
这个命令一般用于将 当前行的所选中的内容复制到下一行。
首先选中你要复制的内容,可通过v或者ctrlv亦或者shiftv然后通过h、l或f搜索移动光标进行选中,然后yy,然后移动到目的行的,进行:put即可在当前行的下一行进行粘贴。
2. 通过tab来编辑不同的文件
:tabnew <filename>
在新选项卡中打开指定的文件。
:tabnext
切换到下一个选项卡,或快捷键 gt
:tabprev
切换到上一个选项卡,或快捷键gT
:tabclose
关闭当前选项卡
ngt 切换到第n个选项卡,不用输入:
:tab ter 以tab方式打开terminal ,如何切换呢?使用 ctrlw : 到底部然后输入:tabprev或:tabnext进行切换
ctrld 关闭命令行
:ter //以buffer方式打开terminal,将会显示上下两层
ctrlw jhlk // 在各窗格之间进行切换
:vert ter // 以buffer方式打开terminal,将会显示左右
.:sp命令
sp 命令进行分割窗口,使同一个文件有两个不同的窗口,或者打开另外一个文件
:sp
4.*和#命令
* 和 #: 匹配光标当前所在的单词,例如将鼠标放置在plugin上,这样按下 * 或 # 则可以在 <plugin> xxxx xxxx </plugin> 之间进行快速移动。
* 移动光标到下一个匹配单词,但实际键盘的输入为 shift 8
# 移动光标到上一个匹配单词,但实际键盘的输入为 shift
5.整体将代码进行左移和右移
shift > > (向右移动) ,shift < <(向左移动) // 需要按两下 >> <<
:10,15>
第10行至第15行向右整体移动
:20,80<
第20行至第80行反缩进
6.自动缩进
ctrl v -> ngg -> =
7. 翻页
翻下一页,Ctrlf键 ,f 的英文全拼为:forward
翻上一页,Ctrlb键,b 的英文全拼为:backward
翻下半页,Ctrld键,d 的英文全拼为:down
翻上半页,Ctrlu键,u 的英文全拼为:up
8. 进入编辑模式
I : 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
r : 在当前光标所在位置进行替换
R : 进入替换并光标向后移动依次进行替换,并直到esc退出替换
s : 删除当前光标所在的字符,并进入到编辑模式
cc : 删除当前光标所在的行,并进入到编辑模式
C : 删除当前光标到行尾的所有字符,并进入到编辑模式
9. 打开命令行
:tab ter //以tab方式打开terminal
ctrlw gt 或 ctrlw gT // 在文档和命令行之间进行切换
ctrld 关闭命令行
或者
: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
, \
等按从左到右的顺序引用它们
基本捕获组
案例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月\日/
结果
202-09-15 ---->>>> 日期:202年09月15日
案例
:%s/\([a-z]\\) \([0-9]\\)/\2 \1/
结果
apple 12 ---->>>> 12 apple
嵌套捕获组
正则表达式 \(A\(B\(C\)\)\) 匹配 ABC:
\1 → ABC(最外层分组)
\2 → BC(第二层分组)
\ → C(最内层分组)
:s/\(\a\(\d\)\)/\1-\2/
\a 字母字符:匹配任意字母(等价于 [a-zA-Z])。
\ 量词:匹配前导字符(此处是 \a)1 次或多次(相当于其他正则中的 )
\d 等价于[0-9]
外层 \(\a\(\d\)\) 是 \1,内层 \(\d\) 是 \2
a ---->>>> a-
可以组合上述的两个命令:
:g/^#/s/old/new/g 先匹配以 `#` 开头的行,再在这些行中替换 `old` 为 `new
11. 使用quickfix
quickfix是什么?
专门用于 快速定位和处理代码中的错误、警告或其他批量结果(如全局搜索匹配项)。它最初设计是为了与编译器配合使用,但现已扩展到支持代码检查、搜索替换、静态分析等多种场景。
Quickfix 的核心是 「结果列表」 和 「快速跳转」。它会将外部工具(如编译器、grep、linter 等)的输出解析成一个结构化列表,并允许你快速在这些结果中导航。
关键特性
1. 批量处理结果
-
支持一次性加载多个错误/结果(例如编译错误、全局搜索匹配项)。
-
结果可以跨不同文件(如同时显示
和
中的错误)。
2. 快速跳转
-
无需手动翻错误信息,一键跳转到具体文件的具体行。
-
支持顺序导航(下一个/上一个错误)。
. 与外部工具集成
-
默认支持
:make
(编译)、:grep
(搜索)、:vimgrep
(Vim 内置搜索)等命令
Quickfix 的本质是 Vim 的「结果处理器」,它:
-
将碎片化的错误/结果 结构化。
-
提供 快速导航 和 批量操作 的能力。
-
成为 Vim 与其他开发工具(编译器、linter、grep 等)的 桥梁。
如何使用quickfix?
这里有一个代码案例,目录结构为:
// 1. (包含一个错误:未声明 printf)
int main() {
printf(Hello, World!\n); // 错误:未包含 <stdio.h>
int x = add(2, ); // 警告:函数未声明
return 0;
}
# 2. Makefile
CC = gcc
CFLAGS = -Wall -Wextra
all: my_program
my_program:
$(CC) $(CFLAGS) -o $@ $^
:
$(CC) $(CFLAGS) -c $<
:
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o my_program
// . (包含一个警告:未使用的变量)
int add(int a, int b) {
int unused_var = 10; // 警告:未使用的变量
return a b;
}
具体操作:
打开 在底部执行 :make 命令
回车后如有错误则会显示如下图片:
然后 再次按 回车 返回, 然后在底部输入下列命令
:copen 打开一个窗口显示当前的错误列表,如果一个程序没有错误,也可以打开列表但是列表为空。
:ccl[ose]
下面是quickfix窗屏。你可以看到quickfix窗屏指向的第一个错误已经定位到我们相就错误的文件行上了。
通过是用ctrlw在加上j或k 可以使光标啊在源代码窗口和quickfix窗口进行切换,我们可以像浏览文件那样用j, k在quckfix窗屏中上下移动到相应的错误上然后按回车,然后就可以在上面的窗屏里定位到相应的源文件的代码行。但是,如果是这样的话, 你要定位下一条错误还得用Ctrl W 回到quickfix屏中来然后重复来过,存在总是在两个窗口之间切换的繁琐。
我们可以一直在源代码窗口而不用切换到quickfix,使用下面的命令而不用回到quickfix中来:
:cp 跳到上一个错误
:cn 跳到下一个错误
:cl 列出所有错误
:cc 显示错误详细信息
这样依次在源代码中修复好,最后make即可。
quickfix除了和make进行梦幻联动的编译操作,还可以与:grep和:vimgrep进行查操作。
假设在 ginx 源码中查 GX_HTTP_VAR_IDEXED
的定义或调用,然后在代码中进行搜索得出的结果放在了quickfix中,通过 :copen打开然后使用:cn或:cp进行下一个或上一个,和之前使用make所做的操作是一模一样。
# 进入 ginx 源码目录
cd nginx-1.2.0/
# 我们正在浏览nginx的代码
vim
# 然后在代码中执行搜索
:grep -r --include=*.[ch] GX_HTTP_VAR_IDEXED src/
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 15 条评论) |
本站网友 河南郑州 | 25分钟前 发表 |
vimgrep进行查操作 | |
本站网友 比特币挖矿教程 | 9分钟前 发表 |
$(CC) $(CFLAGS) -c $< | |
本站网友 左大培 | 30分钟前 发表 |
my_program my_program | |
本站网友 松子日本料理 | 5分钟前 发表 |
tabnew <filename> 在新选项卡中打开指定的文件 | |
本站网友 李玟图片 | 10分钟前 发表 |
grep -r --include=*.[ch] GX_HTTP_VAR_IDEXED src/ | |
本站网友 深圳割双眼皮 | 13分钟前 发表 |
%s/^\(.*\)$/\1 | |
本站网友 任庆河 | 24分钟前 发表 |
int b) { int unused_var = 10; // 警告:未使用的变量 return a b; } 具体操作: 打开 在底部执行 | |
本站网友 艾默生电气 | 15分钟前 发表 |
grep | |
本站网友 金湖湾花园 | 13分钟前 发表 |
linter | |
本站网友 杨澜博客 | 5分钟前 发表 |
\ 量词:匹配前导字符(此处是 \a)1 次或多次(相当于其他正则中的 ) \d 等价于[0-9] 外层 \(\a\(\d\)\) 是 \1,内层 \(\d\) 是 \2 a ---->>>> a- 可以组合上述的两个命令: | |
本站网友 北京ios开发培训 | 2分钟前 发表 |
g/pattern/command 对匹配 pattern 的行执行 command(这里是 d 删除),也就是说 删除或处理整行 → 用 | |
本站网友 闫云达 | 11分钟前 发表 |
$(CC) $(CFLAGS) -o $@ $^ | |
本站网友 小菊的夏天 | 12分钟前 发表 |
[range]s/pattern/replacement/[flags] range:指定替换范围(默认当前行)% 表示整个文件,1 | |
本站网友 未定 | 0秒前 发表 |
%s/\(\d\{4\}\)-\(\d\{2\}\)-\(\d\{2\}\)/日期:\1年\2月\日/ 结果 202-09-15 ---->>>> 日期:202年09月15日 案例 |