【总结】vim教程与详细命令总结,该来的躲不掉啊晕

news2024/12/28 23:20:46

在这里插入图片描述
B站|公众号:啥都会一点的研究生

目录

  • 写在前面
  • vim的工作模式
    • 普通模式
    • 编辑模式
    • 命令模式
  • 命令大全,最详细(建议收藏)
    • 光标的移动
    • 插入模式 - 插入/追加文本
    • 编辑文本
    • 选择文本(可视化模式)
    • 可视化模式命令
    • 剪切, 复制, 粘贴
    • 查找/替换
    • 多文件搜索
    • 多文件编辑
    • 标签
    • 寄存器
    • 标记
    • Diff

写在前面

曾经我也天真的觉得如今很多软件都可以充当文本编辑器,像vim上手这么麻烦的可以替代。但随着工作内容有的需要在服务器上操作,不支持UI,这时候vim就显得格外重要

先把需要分享(白嫖)的资源写在前面,搜集的vim键盘图&&命令总结共五份高清原始素材放在公众号【啥都会一点的研究生】,回复【vim】,有了一定vim基础后这些键盘图简直救命
在这里插入图片描述

此外推介个大白话简明教程

vim的工作模式

普通模式

终端使用vivim进入,如

vim example.txt

由Shell进入vim编辑器时,首先进入普通模式。在普通模式下,从键盘输入任何字符都被当作命令来解释。普通模式下没有任何提示符,输入命令后立即执行,不需要回车,而且输入的字符不会在屏幕上显示出来。

编辑模式

编辑模式主要用于文本的编辑。比如按下i该模式下用户输入的任何字符都被作为文件的内容保存起来,如果想返回 Normal 模式,请按ESC键。

来个基本案例,打开文本-写入内容-保存退出

vim example.txt
键盘按下i
随便写,比如shadousheng
键盘按ESC
键盘输入:wq(注意冒号是你需要输入的符号而不是仅输入wq)

命令模式

命令模式下,用户可以对文件进行一些高级处理。尽管普通模式下的命令可以完成很多功能,但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入命令模式。

如果不确定当前处于哪种模式,按两次 Esc 键将回到普通模式。

命令大全,最详细(建议收藏)

光标的移动

在这里插入图片描述

h - 左移光标
j - 下移光标
k - 上移光标
l - 右移光标
gj - 下移光标(折行文本)
gk - 上移光标(折行文本)
H - 移动到当前页面顶部
M - 移动到当前页面中间
L - 移动到当前页面底部
w - 移动到下个单词开头
W - 移动到下个单词开头(单词含标点)
e - 移动到下个单词结尾
E - 移动到下个单词结尾(单词含标点)
b - 移动到上个单词开头
B - 移动到上个单词开头(单词含标点)
ge - 移动到上个单词结尾
gE - 移动到上个单词结尾(单词含标点)
% - 跳转到配对的符号(默认支持的配对符号组:: '()', '{}', '[]' - 在vim中使用 :h matchpairs 获得更多信息)
0 - 移动到行首
^ - 移动到行首的非空白符
$ - 移动到行尾
g_ - 移动到行内最后一个非空白符
gg - 移动到文件第一行
G - 移动到文件最后一行
5gg or 5G - 移动到第五行
gd - 跳转到局部定义
gD - 跳转到全局定义
fx - 移动到字符 x 下次出现的位置
tx - 移动到字符 x 下次出现的位置的前一个字符
Fx - 移动到字符 x 上次出现的位置
Tx - 移动到字符 x 上次出现的位置的后一个字符
; - 重复之前的f、t、F、T操作
, - 反向重复之前的f、t、F、T操作
} - 移动到下一个段落 (当编辑代码时则为函数/代码块)
{ - 移动到上一个段落 (当编辑代码时则为函数/代码块)
zz - 移动屏幕使光标居中
zt - position cursor on top of the screen
zb - position cursor on bottom of the screen
Ctrl + e - 向下移动屏幕一行(保持光标不动)
Ctrl + y - 向上移动屏幕一行(保持光标不动)
Ctrl + b - 向上滚动一屏
Ctrl + f - 向下滚动一屏
Ctrl + d - 向下滚动半屏
Ctrl + u - 向上滚动半屏

注:命令前追加数字表示命令的重复次数, 比如 4j 表示向下移动四行

插入模式 - 插入/追加文本

i - 从光标前开始插入字符
I - 从行首开始插入字符
a - 从光标后开始插入字符
A - 从行尾开始插入字符
o - 在当前行之下另起一行, 开始插入字符
O - 在当前行之上另起一行, 开始插入字符
ea - 从当前单词末尾开始插入
Ctrl + h - 在插入模式下,删除光标前的字符
Ctrl + w - 在插入模式下,删除光标前的单词
Ctrl + j - 在插入模式下,另起一行
Ctrl + t - 在插入模式下,向右缩进,宽度由 shiftwidth 控制
Ctrl + d - 在插入模式下,向左缩进,宽度由 shiftwidth 控制
Ctrl + n - 在插入模式下,在光标之前插入自动补全的下一个匹配项
Ctrl + p - 在插入模式下,在光标之前插入自动补全的上一个匹配项
Ctrl + rx - 插入寄存器 x 的内容
Ctrl + ox - 暂时进入正常模式以发出一个正常模式命令 x。
Esc - 退出插入模式

编辑文本

在这里插入图片描述

r - 替换当前字符
R - 在 ESC 按下之前,替换多个字符
J - 将下一行合并到当前行, 并在两部分文本之间插入一个空格
gJ - 将下一行合并到当前行, 两部分文本之间不含空格
gwip - 重新调整段落
g~ - 大小写转换操作修饰符
gu - 小写操作修饰符
gU - 大写操作修饰符
cc - 将光标所在的行删除, 然后进入插入模式
c$ or C - 将光标处到行尾删除, 然后进入插入模式
ciw - 将光标所在的单词删除, 然后进入插入模式
cw or ce - 从光标位置开始, 修改单词
s - 删除当前字符, 然后进入插入模式
S - 清空当前行, 然后进入插入模式 (同cc)
xp - 当前字符后移
u - 撤销
U - 撤销上一次的改动行的操作
Ctrl + r - 重做(取消撤销)
. - 再次执行上个命令

选择文本(可视化模式)

在这里插入图片描述

v - 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(如 y - 复制)
V - 进入可视化模式(行粒度选择)
o - 切换光标到选择区开头/结尾
Ctrl + v - 进入可视化模式(矩阵选择)
O - 切换光标到选择区的角
aw - 选择当前单词
ab - 选择被 () 包裹的区域(含括号)
aB - 选择被 {} 包裹的区域(含花括号)
at - 选择被 <> 标签包裹的区域(<>标签)
ib - 选择被 () 包裹的区域(不含括号)
iB - 选择被 {} 包裹的区域(不含花括号)
it - 选择被 <> 标签包裹的区域(不含<>标签)
Esc - 退出可视化模式

注:也可以使用 ( 和 { 分别代替 b 和 B

可视化模式命令

在这里插入图片描述

> - 向右缩进
< - 向左缩进
y - 复制
d - 剪切
~ - 大小写切换
u - 将选中文本转换为小写
U - 将选中文本转换为大写

剪切, 复制, 粘贴

在这里插入图片描述

yy - 复制当前行
2yy - 复制 2 行
yw - 复制当前单词
yiw - 复制光标处的单词
yaw - 复制光标处的单词及其前后的空格
y$ or Y - 复制, 从光标位置到行末
p - 在光标后粘贴
P - 在光标前粘贴
gp - 在光标后粘贴并把光标定位于粘贴的文本之后
gP - 在光标前粘贴并把光标定位于粘贴的文本之后
dd - 剪切当前行
2dd - 剪切 2 行
dw - 剪切当前单词
diw - 删除光标处的单词
daw - 删除光标处的单词及其前后的空格
:3,5d - 删除 35 行
:.,$d - 删除当前行到文件末尾
:.,1d - 删除当前行到文件开头
:10,$d - 从第 10 行到文件末尾
:g/{pattern}/d - 删除所有包含模式的行
:g!/{pattern}/d - 删除所有不包含模式的行
d$ or D - 剪切, 从光标位置到行末 (同 D )
x - 剪切当前字符

查找/替换

在这里插入图片描述

/pattern - 查找 pattern
?pattern - 向上查找 pattern
\vpattern - pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)
n - 查找下一个
N - 查找上一个
:%s/old/new/g - 替换全部
:%s/old/new/gc - (逐个)替换
:noh[lsearch] - 移除搜索结果的高亮显示

多文件搜索

:vim[grep] /pattern/ {`{file}`} - 在多个文件中搜索 pattern
e.g. :vim[grep] /foo/ **/*
:cn[ext] - 移动至下一个
:cp[revious] - 移动至上一个
:cope[n] - 打开搜索结果列表
:ccl[ose] - 关闭 quickfix 窗口

多文件编辑

:e[dit] 文件名 - 新建缓冲区打开 filename
:bn[ext] - 切换到下个缓冲区
:bp[revious] - 切换到上个缓冲区
:bd[elete] - 关闭缓冲区
:b[uffer]# - 切换到第 # 个缓冲区
:b[uffer] file - 用文件名切换缓冲区
:ls or :buffers - 列出所有打开的缓冲区
:sp[lit] 文件名 - 新建缓冲区打开 filename 并水平分割窗口
:vs[plit] 文件名 - 新缓冲区打开 filename 并垂直分割窗口
:vert[ical] ba[ll] - 垂直分割窗口编辑所有缓冲区
:tab ba[ll] - 标签页编辑所有缓冲区
Ctrl + ws - 水平分割窗口
Ctrl + wv - 垂直分割窗口
Ctrl + ww - 在窗口间切换
Ctrl + wq - 关闭窗口
Ctrl + wx - 当前窗口与下一个窗口交换位置
Ctrl + w= - 令所有窗口高 & 宽一致
Ctrl + wh - 切换到左侧窗口
Ctrl + wl - 切换到右侧窗口
Ctrl + wj - 切换到下侧窗口
Ctrl + wk - 切换到上侧窗口
Ctrl + wH - 使游标所在视窗全高并移至最左 (最左垂直视窗)
Ctrl + wL - 使游标所在视窗全高并移至最右 (最右垂直视窗)
Ctrl + wJ - 使游标所在视窗全宽并移至最下 (最下水平视窗)
Ctrl + wK - 使游标所在视窗全宽并移至最上 (最上水平视窗)

标签

:tabnew or :tabnew {page.words.file} - 在新标签中打开文件
Ctrl + wT - 将窗口变成标签
gt or :tabn[ext] - 切换到下一个标签
gT or :tabp[revious] - 切换到上一个标签
#gt - 切换到第 # 个标签
:tabm[ove] # - 移动标签到第 # 位(下标从 0 开始)
:tabc[lose] - 关闭当前标签
:tabo[nly] - 关闭其他标签
:tabdo command - 在所有标签中执行命令 (例如 :tabdo q 关闭所有标签)

寄存器

:reg[isters] - 显示寄存器内容
"xy - 复制内容到寄存器 x
"xp - 粘贴寄存器 x 中的内容
"+y - 复制内容到系统剪贴板寄存器
"+p - 粘贴系统剪贴板寄存器的内容

注:寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载

特殊寄存器

0 - 上次复制
 " - 未命名寄存器,上次复制或删除
 % - 当前文件名
 # - 轮换文件名
 * - 剪贴板内容 (X11 primary)
 + - 剪贴板内容 (X11 clipboard)
 / - 上次搜索的pattern
 : - 上次执行的命令
 . - 上次插入的文本
 - - 上次剪切的短于一行的文本
 = - 表达式寄存器
 _ - 黑洞寄存器

标记

在这里插入图片描述

:marks - 标记列表
ma - 设置当前位置为标记 a
`a - 跳转到标记 a 的位置
y`a - 复制当前位置到标记 a 的内容
`0 - 跳转到上次 Vim 退出时的位置
`" - 跳转到上次编辑该文件时的位置
`. - 跳转到上次修改的位置
`` - 跳转回上次跳转前的位置
:ju[mps] - 列出跳转历史记录
Ctrl + i - 跳转至跳转历史中较晚的位置
Ctrl + o - 跳转回跳转历史中较早的位置
:changes - 列出修改历史记录
g, - 跳转至修改历史中较晚修改的位置
g; - 跳转至修改历史中较早修改的位置
Ctrl + ] - 跳转到当前光标位置对应的 tag

注:可以使用反引号(`)或单引号(')跳转至标记位置。使用单引号会跳转至该标记所在行行首(首个非空白字符)

qa - 录制宏 a
q - 停止录制宏
@a - 执行宏 a
@@ - 重新执行上次执行的宏

Diff

zf - 定义折叠修饰符
zd - 删除光标位置的折叠
za - 展开 & 关闭光标位置的折叠
zo - 展开光标位置的折叠
zc - 关闭光标位置的折叠
zr - 展开同级的所有折叠
zm - 关闭同级的所有折叠
zi - 开启 & 关闭折叠功能
]c - 光标移至下一处差异
[c - 光标移至上一处差异
do or :diffg[et] - 将另一缓冲区中的差异合并至当前缓冲区
dp or :diffpu[t] - 将当前缓冲区中的差异推送至另一缓冲区
:diffthis - 令当前窗口成为 diff 模式的窗口之一
:dif[fupdate] - 强制刷新 diff 的高亮与折叠
:diffo[ff] - 令当前窗口退出 diff 模式

注:

  • 折叠命令(e.g. za)只作用于当前级别。使用大写字母(e.g. zA)令命令作用于全部级别
  • 可以直接在终端运行 vimdiff 查看文件间的不同。也可以将该程序设为 git difftool 的选项之一

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

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

相关文章

【Selenium学习】Selenium 中特殊元素操作

1.鼠标定位操作鼠标悬停&#xff0c;即当光标与其名称表示的元素重叠时触发的事件&#xff0c;在 Selenium 中将键盘鼠标操作封装在 Action Chains 类中。Action Chains 类的主要应用场景为单击鼠标、双击鼠标、鼠标拖曳等。部分常用的方法使用分类如下&#xff1a;• click(on…

过滤器与拦截器

文章目录一、前言1、概述2、过滤器与拦截器异同2.1 简介2.2 异同2.3 总结3、Filters vs HandlerInterceptors二、过滤器1、概述2、生命周期2.1 生命周期概述2.2 基于函数回调实现原理3、自定义过滤器两种实现方式3.1 WebFilter注解注册3.2 过滤器&#xff08;配置类注册过滤器&…

vue2vue3常用语法(持续更新)

一、基础1. 指令指令描述v-if判断v-else-if判断后剩下的v-else判断后剩下的v-html渲染html文本格式v-text渲染文本v-for循环v-showdisplay&#xff1a;none/block切换v-model双向绑定v-bind(缩写&#xff1a;:)动态绑定v-on(缩写&#xff1a;)绑定dom事件(如点击事件)v-cloak解…

WMS AMS【Android Framework进阶】

1.简介 可以毫不夸张的说&#xff0c;android的framework层主要是由WMS、AMS还有View所构成&#xff0c;这三个模块穿插交互在整个framework中&#xff0c;掌握了它们之间的关系和每一个逻辑步骤&#xff0c;你对framework的了解至少有百分之五十 AMS是Android中最核心的服务…

设计模式:行为型设计模式

参考文章&#xff1a; 《设计模式》 《设计模式知识体系详解》 《DesignPatterns》 写在开头&#xff1a;本文为学习后的总结&#xff0c;可能有不到位的地方&#xff0c;错误的地方&#xff0c;欢迎各位指正。 前言 行为型模式是将不同的行为代码解耦&#xff0c;从而解决…

疯狂弹出请插入多卷集的最后一张磁盘窗口

整个人嘛了&#xff0c;今天插上U盘&#xff0c;跟tmd中了病毒一样&#xff0c; 屏幕疯狂弹出窗口&#xff0c; 提示请插入多卷集的最后一张磁盘&#xff01; 点确定之后他继续弹出&#xff0c;点取消它也继续弹出&#xff0c; 关掉一个又弹出来一个&#xff0c;妈的&#x…

系统编程中的进程的概念No.3【进程状态】

引言&#xff1a; 北京时间&#xff1a;2023/2/17/8:17&#xff0c;目前听着超能陆战队主题曲《Immortals》&#xff0c;感觉又要螺旋式升天&#xff0c;并且为我今天上午没课感到happy&#xff0c;所以继我们很久以前的关于进程的博客&#xff0c;今天我们就再来学习一下有关…

buuctf Web 下

9.[ACTF2020 新生赛]Exec 访问url&#xff1a; http://cc3c6c27-e2df-4665-baba-1d9a32dc963e.node3.buuoj.cn/ 首页如下&#xff1a; 直接ping ip可以得到结果 常见管道符 1、|&#xff08;就是按位或&#xff09;&#xff0c;直接执行|后面的语句 127.0.0.1 | cat /flag…

html 的相对路径和绝对路径

整篇文章是以 src 标签进行演示。 文章目录 一、相对路径 1、同级目录查找 2、上一级目录查找 3、下一级目录查找 二、绝对路径 一、相对路径 &#x1f475;相对路径&#xff1a;从当前目录开始查找。 1、同级目录查找 写法&#xff1a; 1.1.直接写文件名字&#xff1b;…

Linux之进程控制

一.进程创建 1.1 fork函数 我们创建进程的方式有./xxx和fork()两种 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程…

Echarts实现多柱状图重叠重叠效果

有两种重叠效果: 1. 多个柱子重叠为一个 2. 多个柱子重叠为两组 第一种,图例: 这个灰色不是阴影哦, 是柱子. 1. 使用详解 (1) series.Z 折线图组件的所有图形的 z 值。控制图形的前后顺序。 z 值小的图形会被 z 值大的图形覆盖。z 相比 zlevel 优先级更低&#xff0c;而且不会…

GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像

我们使用GEE在线编辑可以直接通过在线的网页可以加载展示我们计算的结果&#xff0c;而python版的GEE要展示我们的计算结果可能就比较麻烦。如果有同学看过GEE的python版API中可以找到一个类ee.mapclient&#xff0c;这个类的介绍是它是GEE官方通过Tk写的一个加载展示地图的类。…

【蓝桥日记⑤】2014第五届省赛(软件类)JavaA组❆答案解析

【蓝桥日记⑤】2014第五届省赛&#xff08;软件类&#xff09;JavaA组☃答案解析 文章目录【蓝桥日记⑤】2014第五届省赛&#xff08;软件类&#xff09;JavaA组☃答案解析1、猜年龄2、李白打酒3、神奇算式4、写日志5、锦标赛6、六角填数7、绳圈8、兰顿蚂蚁9、斐波那契10、波动…

Linux 操作系统原理 — NUMA 体系结构

目录 文章目录 目录NUMA 体系结构NUMA 的基本概念查看 Host 的 NUMA TopologyBash 脚本DPDK 脚步NUMA 体系结构 NUMA(Non-Uniform Memory Access,非一致性存储器访问)的设计理念是将 CPU 和 Main Memory 进行分区自治(Local NUMA node),又可以跨区合作(Remote NUMA nod…

操作系统 三(存储管理)

一、 存储系统的“金字塔”层次结构设计原理&#xff1a;cpu自身运算速度很快。内存、外存的访问速度受到限制各层次存储器的特点&#xff1a;1&#xff09;主存储器&#xff08;主存/内存/可执行存储器&#xff09;保存进程运行时的程序和数据&#xff0c;内存的访问速度远低于…

【信管12.2】知识管理与知识产权

知识管理与知识产权想必你对知识的概念多少都会有一些自己的理解&#xff0c;毕竟我们经过了那么多年的教育&#xff0c;学来学去可不都学习的是“知识”嘛。在今天的学习中&#xff0c;内容还是会比较多&#xff0c;因为除了知识管理相关的内容之外&#xff0c;还有知识产权相…

Matlab 最小二乘法拟合平面(SVD)

文章目录 一、简介1.1最小二乘法拟合平面1.2 SVD角度二、实现代码三、实现效果参考资料一、简介 1.1最小二乘法拟合平面 之前我们使用过最为经典的方式对平面进行了最小二乘拟合(点云最小二乘法拟合平面),其推导过程如下所示: 仔细观察一下可以发现

IP协议

网络层的一个重要作用就是把世界上的地址能够以一定的规范定义出来。地址管理路由选择网络层的代表:IP协议4位版本指的是&#xff1a;此处的取值只有两个ipv4,ipv64位首部长度&#xff1a;描述了ip报头有多长&#xff08;ip报头是变长的&#xff09;报头中有一个选项部分&#…

JUnit5文档整理

1、Overview 1.1、Junit5是什么 与以前的JUnit版本不同&#xff0c;JUnit 5是由三个不同子项目的几个不同的模块组成。 JUnit 5 JUnit Platform&#xff08;基础平台&#xff09; JUnit Jupiter&#xff08;核心程序&#xff09; JUnit Vintage&#xff08;老版本的支持&a…