您现在的位置是:首页 > 编程 > 

我记不住的那些vim知识(快速识记)

2025-07-22 05:57:48
1.:put命令 :put 是一个命令行命令,用于将寄存器的内容粘贴到当前行的下方 这个命令一般用于将 当前行的所选中的内容复制到下一行。 首先选中你要复制的内容,可通过v或者ctrlv亦或者shiftv然后通过h、l或f搜索移动光标进行选中,然后yy,然后移动到目的行的,进行:put即可在当前行的

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 的「结果处理器」,它:

  1. 将碎片化的错误/结果 结构化

  2. 提供 快速导航 和 批量操作 的能力。

  3. 成为 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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1164906.html

相关标签:无
上传时间: 2025-07-21 01:24:56
留言与评论(共有 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日 案例