Vim 命令从头学习记录

news2025/5/10 21:00:48

学习链接:eleon-vim基础教程

Vim - 基础翻屏操作

光标移动:hjkl 20j 向下移动20行,w 向后移动一个字符,b 向前移动一个字符。

Ctrl + u 向上翻半页 UP
Ctrl + d 向下翻半页 Down
Ctrl + f 向下翻整页 Forward
Ctrl + b 向上翻整页 Backward

大写M 跳转到屏幕中间 Middle
大写L 跳转到屏幕最后一行 Last Line
大写H 跳转到屏幕第一行 Home

Count + 大写H 光标移动到顶部下面的count行。
Count + 大写L 光标移动到底部上面的count行。

Ctrl + e 向下翻一行,光标不动
Ctrl + y 向上翻一行,光标不动

Vim - 编辑操作

复制yy=Y 复制光标所在行,3yy 复制光标所在行以在内的三行, y$ 复制光标所在字符至行尾的内容。
粘贴p P 一个是粘贴到光标或行之前,一个是之后。
删除dd 删除本行,3dd 删除光标所在行以在内的三行,D = d$删除光标所在字符至行尾的内容。
剪切x 剪切当前字符,3x 剪切当前字符在内的三个字符
交换字符顺序xp ,其实就是先剪切后粘贴
合并行:大写J 无论光标在哪里,都能把下一行的内容补到当前行尾,间隔一个空格。(在代码整理的时候用吗???)
替换光标处字符(单词打错了后很常用):rb 就可以把光标所在位置字符替换成b,Rccc 就可以把光标所在位置和其后面的俩字符都替换成b。
s 会删除掉单个字符然后进入插入模式。 S会删除掉光标所在行让后进入插入模式。
变更ccS的作用一样。
撤销u 或者 U 都行,撤销上一步。
重做Ctrl + ru作用的反向
大小写转换gu + Motion , gU + Motion 其中Motion可以是w表示转换单词,如果是2w就是转换当前单词在内的俩单词。
重复上次修改:点“.” 可以重复上次的命令操作。

Vim - 文本对象(常用)

Operation + type + Object 的组合
Operation: 可能是d,y, c, v
Type:只有两种 ai,分别表示all和in
Object:可以是一堆括号{ [ ( " '等,也可也是w(word)s(句子)t(tab,html用到)

Vim - 缩进

1 手动缩进
>> :增加缩进
<< :减小缩进
3>> :当前行以下3行增加缩进,减小缩进类似。
> % :当光标放在大括号上时有效,对当前块进行增加缩进操作,减小缩进类似。
> i { :为{}内的内容(不含{})增加缩进
> a { :为包含{}在内的块儿内内容增加缩进

2 自动缩进
== :对当前行自动缩进
4== :对当前行及下面三行执行自动缩进
=i{ :对{中的内容自动缩进
=a{ :对{中的内容包括{自动缩进(常用)
=% :当贯标在括号上时自动缩进整个块

3 缩进格式设置
set shiftwidth=8 设置缩进操作长度为8个空格的长度(如果tab为4个空格,则缩进就是两个制表符,如果tab为8个空格,则缩进就是1个制表符)
set tabstop=4 设置tab的长度为4,当在命令模式下进行缩进时起作用。
set expandtab插入模式和命令模式都起作用,使用手动缩进插入的是空格。此时如果在插入模式下敲入tab,则插入的是空格
set noexpandtab expandtab 的反面,使用手动缩进插入的是制表符。此时如果在插入模式下敲入tab,则插入的是制表符
上面的命令与手动自动缩进命令的配合来编写符合原代码规范的代码。
set softtabstop=8 只在插入模式起作用。 注意与tabstop的不同。如果你想手动写tab则要修改这个命令。
在检查更改时如果要检查自己的设置是否正确使用俩命令:
set list 显示特殊符号,如$表示行尾,Ctrl+I表示tab制表符
set nolist 隐藏特殊符号

4 插入模式下编辑下一行时如何自动缩进
set <自动缩进类型>: 类型有四种,autoindentsmartindent, cindent, indentexpr;
我现在先使用cindent, 是用于c语言时的缩进格式。 我找了很长时间,网上的教程都是东拼西凑,原来学习还得需要系统,这块东西如果光靠一个博客就搞明白的确很费精力。

Vim - 折叠-Floding

如果有不需要的代码可以折叠起来。也可以参考手册命令模式输入:help folding
当前我,几乎不咋用,只有使用vim -d 进行文件对比的时候使用。仅列在这,详情参考vim 基础教程
z + f + Motion : 创建当前行至Motion为一个折叠。
count + z + F: 创建当前行之后count行的折叠。
z + f + %:查找光标所在的块进行块儿折叠。
z + o 打开折叠,z + O 递归打开折叠。
z + c 折叠起来,z + C 递归折叠起来。
z + d 删除光标所在行折叠,z + D 递归删除光标所在块折叠。
z + E 删除所有折叠。

Vim - Buffers 多文件(很重要)

命令模式下有如下命令,我曾苦苦找寻,如今发现vim本身就特么强大的一批了,我还装个毛线的nvim. lvim,骑驴觅驴而已。
:e + 文件名 打开并激活指定文件(e为edit)
:ls, :buffers, :files 列出缓冲区文件,这仨命令一样的作用
:b add b.txt 向缓冲区列表添加新文件但不激活。
:b d 3 删除缓冲区编号为3的文件,d也可写作delete, 如果删除当前文件不需要加数字即可。
:b+空格+Tab 先在命令模式输入ls进入buffer列表,然后输入该命令tab就可实现文件跳转,哈哈好方便啊,我之前都打开一堆vim窗口,简直是浪费声明卧槽了。
:bn, bp 可以切换到buffer中下一个nexp文件,上一个privious文件
:b3 ,:buffer3 都可以切换到buffer中符号为3的文件。
:b# 访问刚刚访问的文件,这个应该最常用了。
:bf, :bl 可以跳转到buffer中第一个文件,最后一个文件
:b1.txt, buffer1.txt 都可以切换到指定文件名的文件,支持tab补全。
:set hidden 当写入内容后不保存也能切换不同文件 :set nohidden作用相反。

Vim - Windows 多窗口

可以将一个窗口分隔成多个窗口,不常用,如果对比文件直接vim -d 不更方便?但是还是记录下基本用法,以免以后用到查找。
sp + 文件名,split的缩写,横向分隔窗口打开指定文件
vs + 文件名,vertical split缩写,纵向分隔窗口打开指定文件
Ctrl + W + Motion Motion 可以是hjkl实现窗口切换
Ctrl + W + w 轮换窗口
Ctrl + W + + 增加窗口高度。Ctrl + W + -减小窗口高度。
Ctrl + W + > 增加窗口宽度。Ctrl + W + <减小窗口宽度。
Ctrl + W + Count + action 其中action可以是上面的窗口操作,比如窗口宽度增大4个格:ctrl + W + 4 + >
Ctrl + W + _ 最大化窗口高度; Ctrl + W + | 最大化窗口宽度;
Ctrl + W + = 调整窗口为一致性大小。
Ctrl + W + H/J/K/L 注意motion为大写,用于调整光标所在窗口在屏幕的位置。
Ctrl + W + q 退出当前窗口
Ctrl + W + = 除当前窗口之外全部退出,等价于on。

Vim - tabs 多标签

vim -p 文件1 文件2 以TAB形式打开指定文件
vim -p * 以TAB形式打开当前目录所有文件
:tabe + 文件名 以TAB形式打开新文件,常用(tab edit)
gt:tabn跳到下一个tab. (tags跳转比buffers跳转方便,普通模式,不用输入冒号)
gT:tabp跳到上一个tab.
数字 + gt:tabn + 数字 跳到指定序号的的tab
:tabl 跳到最后一个tab
:tabm + 数字 (tab move)将当前tab插入到指定数字的位置
:tabc (tab close)
:tabo 只保留当前窗口 (tab only)

《思考 buffers Windows tabs 的关系》

之前都是先搜索怎么配置,网上找到博客一通复制粘贴,跟着人家的命令就开始用,也不知到为啥,但是最终还是被这些概念搞烦了,最后使用最简单的vim 打开一个文件的最原始状态。现在机缘成熟,我学到这里了,也该搞明白他们的关系了,看这个大佬博客:如何理解并正确使用 Vim 中的 Buffer、Window 和 Tab

总结
buffers: 为文件在内存中的缓存数据,每个文件对应内存中唯一的buffer。
Windows: 在一个电脑屏幕大小的空间,划分不同的小窗口,每个小窗口可以显示一个打开的文件。可以说Windows可以规定一个窗口的布局。
tabs:每个tab可以理解为一个电脑屏幕,每个tab里面都可以有一种窗口布局。不同tab之间的窗口没关系。

我应该如何使用 tabs 和 buffer ?
Windows使用的很少,当我使用vim filename.c 打开一个文件,找到一个目标函数,转到定义时此时跳到另外一个文件,此时通过:ls可以到这个文件的buffer也被激活了,这就已经打开了多buffer.
当我要 porting 两个不同工程的代码时,我可以为每个工程打开一个tag。这样可以方便的实现复制。
之前我都是使用多tag, 每个tag显示一个文件,但是当你使用ctags工具跳转时,tag的名称也会跟着你跳转的文件变化,而且tag太多也会造成选择困难,所以如果文件很多需要tag和buffers配合:总策略如下:
把vim打开的文件分为两类,一类为正在编辑的文件,比如a b两个文件,一类是需要一直查看来回跳转的文件比如a c。我们要创建4个tag. 前两个tag为a,b编辑使用(因为tag跳转命令比buffers跳转要方便一点),后两个tag为a,c两个文件查看跳转,前两个tag修改的内容也会自动同步到全局。

Vim 寄存器

无名寄存器(Unnamed): (没错就是个双引号)
用于保存d, c, x, s, y操作的内容。可以通过命令行输入:reg "来查看无名寄存器的内容。

数字寄存器(Number): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 一共10个数字寄存器。
0号寄存器 保存y操作的内容。
1-9 号寄存器 保存d, c操作的内容,且保存的内容会随着操作的进行逐渐向后搬移,1号寄存器始终保存着最新删除的内容。
搜索寄存器/,当执行搜索字符后,这个寄存器保存刚刚的搜索记录。
系统剪切板寄存器:+ 和 * 。在ubuntu中看到两个寄存器的内容一致,都来自鼠标或键盘复制得到的内容。

只读寄存器:有三个,分别为:

  • 文件名寄存器:%
  • 命令寄存器::
  • 插入文本寄存器:.

Named - 寄存器a-z 共26个寄存器。比较常用。
" + 寄存器 + 操作:操作指定寄存器。其中复制操作时可以指定大小写(小写覆盖,大写追加),粘贴时只能小写。例子:
"ayaw :将单词 复制 到 a 寄存器。
"byiw :将单词 复制 到 b 寄存器。
"Cyaw :将单词 追加 到 c 寄存器。
"ap :将 a 寄存器中的内容粘贴到光标之后的位置。
"cP :将 c 寄存器中的内容粘贴到光标之前的位置。

思考:这一堆寄存器什么时候用?
用于存储录制的宏:比如想要实现快速实现单行内容添加注释或者增加注释。(在调试代码)
用于porting代码:将一个文件中的不连续的几行内容复制到另一个文件的某位置,可以用寄存器追加,不用来回切换文件。
用于存储书签:我发现书签的有名寄存器虽然也叫abcd这些字母,但是使用marks得到的书签仅用于存储书签,根这里介绍的寄存器不是一个寄存器。

寄存器内容查看reg + 寄存器名
寄存器内容操作Count + " + 寄存器名 + 操作
举例:3"+p"+3p 都是将+寄存器中的内容粘贴到光标处重复3次。

Vim - Macro 宏(需要用寄存器存储)

宏就是一个录制好的一串命令,如果这个命令需要多次重复操作,你就可以录制一个宏到指定的Named 寄存器,这样下次就不用一个一个敲了(但是觉的还是很少用到)。
记录宏的步骤:
开始记录宏:q + 寄存器名
输入宏命令
按下q结束宏录制

使用宏的步骤:
使用录制的宏命令:@ + 寄存器名
使用最近一次录制的宏命令:@@

追加宏内容:q + 大写寄存器名
多次重复宏命令:count + @ + 寄存器名

举例子:
比如我想要实现按下@c来快速将本行行首添加//注释掉本行(想法牛逼,很实用)。
比如我想要实现按下@d来快速将本行行尾添加;

Vim - Marks书签(需要用寄存器存储)

用到小写和大写两种寄存器,每个文件内有一套小写Named寄存器提供文件内书签跳转(局部跳转),而文件之间有大写Named寄存器可以实现文件之间书签跳转(全局跳转)。
添加书签:m + Named寄存器
清理书签:delmarks a 可清理a书签
查看书签:marks + 要查看的寄存器(此时区分小写还是大写)
跳转到书签所在行: ' + Named寄存器 (单引号)
跳转到书签所在行与列: ` + Named寄存器(反引号)

范式:Operation + ' + Named寄存器(单引号)
比如:
d'a :删除当前光标所在行至a寄存器书签所在行之间的内容。
y'a :复制光标所在行至a寄存器书签所在行之间的内容。
c'a :删除当前光标所在行至a寄存器书签所在行之间的内容并进入插入模式。

思考:书签什么时候用?
通过marks查看寄存器存储的标签,可见他会随着你删除代码动态更新,这比较有用。
1,多文件穿梭,可能你说用buffers的命令bn就够了,但是书签可以更快的跳转到目标位置,还能跟随删除粘贴等命令移动。
2,调试过程中,可以标记报错位置,快速往返于代码和日志。

Vim - 插入模式下的快捷键

  1. 进入插入模式常用的有:i, l, a, A, o, O, ea
  2. Ctrl + y : 插入光标之前行的内容,一直操作就可以一直复制。
  3. Ctrl + e : 插入光标之后行的内容,一直操作就可以一直复制。
  4. Ctrl + r + =:将表达式求值并插入。(会议一下:在命令模式使用“ap插入寄存器内容)
  5. Ctrl + r + 寄存器将寄存器内容插入
  6. Ctrl + t当前行增加缩进
  7. Ctrl + d当前行减小缩进
  8. Ctrl + w删除光标前面的单词
  9. Ctrl + h:删除光标前面的字符
  10. Ctrl + o:切换到普通模式,完成一个命令后,重新进入插入模式。

插入模式下比较常用的操作
缩进应该比较少用,我只需要知道如何在命令模式自动管理缩进就够了。删除操作吧,都是退回到命令模式切换光标位置或者按上下左右切换位置,感觉都不咋用。

Vim - 视图模式

之前我只知道Ctrl+V, 用来对那几行前面插入注释,但不知道为何他只能选择一个方块儿,后面的内容就无法选中。。。
小写v: 基于字符模式选择,从光标所在字符开始选中。
大写V:基于行选择,从光标所在行开始选中整行。
Ctrl + v:基于块,可以选中方块儿形状的内容。(可配合小写o,大写O来快速跳转光标位置)
gv:选中之前选择的内容。
小写u大写U来切换文本大小写,~也可切换大小写。
> 增加缩进,< 减小缩进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GStreamer开发笔记(三):测试gstreamer/v4l2+sdl2/v4l2+QtOpengl打摄像头延迟和内存

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、O…

科技成果鉴定测试有哪些内容?又有什么作用?

科技成果鉴定测试是评价科技成果质量和水平的方法之一&#xff0c;通过测试&#xff0c;可以对科技成果的技术优劣进行评估&#xff0c;从而为科技创新提供参考和指导。 一、科技成果鉴定测试的内容   1.技术评审&#xff1a;通过技术专家对项目进行详细的技术分析&#xff…

基于Spring Boot + Vue 项目中引入deepseek方法

准备工作 在开始调用 DeepSeek API 之前&#xff0c;你需要完成以下准备工作&#xff1a; 1.访问 DeepSeek 官网&#xff0c;注册一个账号。 2.获取 API 密钥&#xff1a;登录 DeepSeek 平台&#xff0c;进入 API 管理 页面。创建一个新的 API 密钥&#xff08;API Key&#x…

A2A与MCP定义下,User,Agent,api(tool)间的交互流程图

官方图&#xff1a; 流程图&#xff1a; #mermaid-svg-2smjE8VYydjtLH0p {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2smjE8VYydjtLH0p .error-icon{fill:#552222;}#mermaid-svg-2smjE8VYydjtLH0p .error-tex…

蓝桥杯2025年第十六届省赛真题-水质检测

C语言代码&#xff1a; #include <stdio.h> #include <string.h>#define MAX_LEN 1000000int main() {char a[MAX_LEN 1], b[MAX_LEN 1];// 使用 scanf 读取字符数组scanf("%s", a);scanf("%s", b);int ans 0;int pre -1;int state -1;i…

[Windows] 东芝存储诊断工具1.30.8920(20170601)

[Windows] 东芝存储诊断工具 链接&#xff1a;https://pan.xunlei.com/s/VOPpMjGdWZOLceIjxLNiIsIEA1?pwduute# 适用型号 东芝消费类存储产品&#xff1a; 外置硬盘&#xff1a;Canvio 系列 内置硬盘&#xff1a;HDW****&#xff08;E300 / N300 / P300 / S300 / V300 / X30…

Linux网络编程day7 线程池and UDP

线程池 typedef struct{void*(*function)(void*); //函数指针&#xff0c;回调函数void*arg; //上面函数的参数 }threadpool_task_t; //各子线程任务的结构体/*描述线程池相关信息*/struct threadpool_t{pthread_mutex_t lock; …

ABB电机保护单元通过Profibus DP主站转Modbus TCP网关实现上位机通讯

ABB电机保护单元通过Profibus DP主站转Modbus TCP网关实现上位机通讯 在工业自动化领域&#xff0c;设备之间的通信至关重要。Profibus DP是一种广泛应用的现场总线标准&#xff0c;而Modbus TCP则是一种基于以太网的常见通信协议。将Profibus DP主站转换为Modbus TCP网关&…

迪士尼机器人BD-X 概况

这些机器人代表着迪士尼故事叙述与非凡创新的完美结合。它们不仅栩栩如生&#xff0c;还配备了先进的技术。 -迪士尼幻想工程研发部高级副总裁凯尔劳克林 幕景 BDX 机器人是由华特迪士尼公司的研究和幻想工程部门利用NVIDIA人工智能技术 (AI)开发的现实世界机器人&#xff0c;…

UE5骨骼插槽蓝图

首先在人物骨骼处添加插槽并命名&#xff0c;然后再选择添加预览资产把你要的模型&#xff08;静态网格体&#xff09;放上去。 选择绑定的骨骼再去右边相对位置、旋转等调整物体。 再去人物蓝图里面写就ok了

绘制拖拽html

<!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1" /> <title>拖拽绘制矩形框 - 可移动可调整大小</ti…

ggplot2 | GO barplot with gene list

1. 效果图 2. 代码 数据是GO的输出结果&#xff0c;本文使用的是 metascape 输出的excel挑选的若干行。 # 1. 读取数据 datread.csv("E:\\research\\scPolyA-seq2\\GO-APA-Timepoint\\test.csv", sep"\t") head(dat)# 2. 选择所需要的列 dat.usedat[, c(…

系统思考:短期困境与长期收益

最近在项目中&#xff0c;一直有学员会提到一个议题&#xff0c;如何平衡当前困境和长期收益&#xff1f; 我的思考是在商业和人生的路上&#xff0c;我们常常听到“鱼和熊掌不可兼得”的说法&#xff0c;似乎短期利益和长期目标注定是对立的。但事实上&#xff0c;鱼与熊掌是…

Cjson格式解析与接入AI大模型

JSON格式的解析与构造 基本概念 JSON是JavaScript Object Notation的简称&#xff0c;中文含义为“JavaScript 对象表示法”&#xff0c;它是一种数据交换的文本格式&#xff0c;而不是一种编程语言。 JSON 是一种轻量级的数据交换格式&#xff0c;采用完全独立于编程语言的…

基于英特尔 RealSense D455 结构光相机实现裂缝尺寸以及深度测量

目录 一&#xff0c;相机参数规格 二&#xff0c;结合YOLO实例分割实现裂缝尺寸以及深度测量 2.1 应用场景 2.2 实现流程 2.3 效果展示 2.4 精度验证 2.5 实物裂缝尺寸以及深度测量效果展示 一&#xff0c;相机参数规格 英特尔 RealSense D455 是英特尔 RealSense D400 系…

Nacos源码—7.Nacos升级gRPC分析四

大纲 5.服务变动时如何通知订阅的客户端 6.微服务实例信息如何同步集群节点 6.微服务实例信息如何同步集群节点 (1)服务端处理服务注册时会发布一个ClientChangedEvent事件 (2)ClientChangedEvent事件的处理源码 (3)集群节点处理数据同步请求的源码 (1)服务端处理服务注册…

TIME - MoE 模型代码 3.2——Time-MoE-main/time_moe/datasets/time_moe_dataset.py

源码&#xff1a;GitHub - Time-MoE/Time-MoE: [ICLR 2025 Spotlight] Official implementation of "Time-MoE: Billion-Scale Time Series Foundation Models with Mixture of Experts" 这段代码定义了一个用于时间序列数据处理的 TimeMoEDataset 类&#xff0c;支…

【某OTA网站】phantom-token 1004

新版1004 phantom-token 请求头中包含phantom-token 定位到 window.signature 熟悉的vmp 和xhs一样 最新环境检测点 最新检测 canvas 下的 toDataURL方法较严 过程中 会用setAttribute给canvas 设置width height 从而使toDataURL返回不同的值 如果写死toDataURL的返回值…

OrangePi Zero 3学习笔记(Android篇)2 - 第一个C程序

目录 1. 创建项目文件夹 2. 创建c/cpp文件 3. 创建Android.mk/Android.bp文件 3.1 Android.mk 3.2 Android.bp 4. 编译 5. adb push 6. 打包到image中 在AOSP里面添加一个C或C程序&#xff0c;这个程序在Android中需要通过shell的方式运行。 1. 创建项目文件夹 首先需…

DeepResearch深度搜索实现方法调研

DeepResearch深度搜索实现方法调研 Deep Research 有三个核心能力 能力一&#xff1a;自主规划解决问题的搜索路径&#xff08;生成子问题&#xff0c;queries&#xff0c;检索&#xff09;能力二&#xff1a;在探索路径时动态调整搜索方向&#xff08;刘亦菲最好的一部电影是…