Linux环境基础开发工具->vim
引入:vim是什么?
vs叫作继承开发环境,我们可以在里面编辑代码,调式代码,运行代码....这种叫集成开发环境;而vim只用来编辑代码,也就是类似于在windows上打开一个记事本来写代码的操作
集成开发环境有他的好处,但一个人要想成长,一定是自己用不同的工具完成每一步
所以vim就是Linux的代码在编辑这一步所需要的工具
一:用vim写一个打印程序
多得不说,先用vim写上一个代码,需要注意的是,你可以touch创建.c文件再vim打开该文件进行编辑;也可以直接vim上一个.c文件进行编辑。但是一定要是.c文件,因为你编辑代码的目录,肯定是要执行的,所以需要gcc生成一个.out的可执行文件,原因就是因为gcc只能对.c文件进行编译,所以一定是要.c文件
所以下面我们写一个程序,引出三个模式
1:vim上一个.c文件
2:写一个打印程序
进入之后是这样的页面:
此时处于命令模式,输入i切换到插入模式:
然后开始写一个打印程序:
3:退出并保存
写完程序后,先按Esc键切换到底行模式,然后再输入:,再输入wq,再按回车
: 是英文的冒号,所以等于在英文输入法下进行shitf + ;
①:按Esc键切换到底行模式
INSERT字样 消失了 则代表进入了底行模式
②:再输入:,再输入wq,再按回车
③:gcc编译,然后./a.out执行文件,显示打印效果
所以我们现在知道了三个模式,这三个就是vim最常用的模式
命令模式 插入模式 底行模式
注意:
命令模式 也可以叫作 正常模式
底行模式 也可以叫作 末行模式
下面开始细讲三个模式的切换和操作
二:三种模式的切换
1:三种模式的用途
命令模式:我们可以控制屏幕光标的移动,字符、字或行的删除,复制粘贴,剪贴等操作。
插入模式:进行文字输入,该模式是我们使用最频繁的编辑模式。
底行模式:将文件保存或退出,也可以进行查找字符串等操作
2:模式的切换
我们在编译代码的时候,需要用到这三个模式,所以要知道如何进行模式的切换
如图:
解释:
不知道当前处于什么模式,只需要看最底行就行:底行是INSERT则是插入模式;底行是冒号则是底行模式;底行什么都没有或者是NEW FILE则是命令模式!
要换什么模式,都可以无脑的Esc回到命名模式,这样如果想要命名模式正好;反之想要插入模式则输入a i o,要底行模式则英文冒号即可!
Q1:为什么插入模式不能切换到底行模式?
A1:因为插入模式你输入什么都是往代码里面写,你这时候属于英文冒号,依然是被视为代码,而不是用来切换到底行模式,所以要先退回到命令模式
Q2:为什么底行模式不能切换到插入模式?
A2:你处于底行模式,你属于i o a ,都会被视为底行模式的操作,而不是用来切换到插入模式,所以要先Esc切换到命令模式
总结:
【命令模式】切换至【插入模式】
1)输入「i」:在当前光标处进入插入模式。
2)输入「a」:在当前光标的后一位置进入插入模式。
3)输入「o」:在当前光标处新起一行进入插入模式。
①:命令模式切换到插入模式
如图:(绿色代表光标位置)
②:【命令模式】切换至【底行模式】
输入「Shift+;」即可,实际上就是输入「:」。
③:【插入模式】或【底行模式】切换至【命令模式】
插入模式或是底行模式切换至命令模式都是直接按一下「Esc」键即可。
注意:之前在第一大点里面我们想要退出vim,就是在底行模式输入wq然后回车的
wq意味着保存并退出,可以单独的w也可以单独的q
3:没有正常退出vim的后果
但我们有可能因为各种原因导致没有按照底行模式,然后wq退出,比如断网啊,云服务器闪退啊等等,这时候,当我们再vim进入文件的时候,会出现以下界面:
该页面想告诉你:
因为你没有按照正确的方式保存并退出vim(如 Vim 崩溃、系统断电、强制关闭终端等),vim贴心的给你保存了,保存到了一个隐藏文件(又叫交换文件).file.c.swp 中,现在要让你选择选项:
Vim 让你选择如何处理这个文件.file.c.swp:
选项 | 说明 | 适用场景 |
---|---|---|
[O]pen Read-Only | 以只读模式打开文件,不能修改 | 仅查看文件,不修改 |
[E]dit anyway | 忽略交换文件,直接编辑 | 确认没有其他 Vim 在编辑,且不需要恢复旧数据 |
[R]ecover | 尝试恢复未保存的更改 | 上次编辑崩溃,可能有未保存内容 |
[D]elete it | 删除交换文件 | 确定不需要恢复,或已经恢复过 |
[Q]uit | 退出 Vim | 暂时不处理 |
[A]bort | 中止操作(类似 Ctrl+C ) | 取消当前操作 |
所以我们一般直接d删除这个隐藏文件,或者r恢复没来得及保存的代码
注意:选项不区分大小写
此时我们在file.c位于的目录中也是通过ls -la指令看见这个一隐藏文件:
总结:一定要正确的退出vim编辑器,养成好习惯
三:命令模式的操作
注意:n+什么,这里的+不用手动输入 只是为了表示两者组合的意思
命令模式的操作是最多的,也是最有意思的
当我们vim进入文件的时候,我们会发现我们的鼠标不能控制光标的移动,这是因为,vim产生的时候,鼠标还没产生,所以我们无法用鼠标来控制光标
Q:那该怎么控制光标?
A:当然在命令模式下 有一些列的操作指令来控制光标
1:控制光标
【移动光标】
1)按「k」:光标上移。
2)按「j」:光标下移。
3)按「h」:光标左移。
4)按「l」:光标右移。
5)按「$」:移动到光标所在行的行尾。 (shift + 4)
6)按「^」:移动到光标所在行的行首。 (shift + 6)
7)按「gg」:移动到文本开始。
8)按「Shift+g」:移动到文本末尾。 (G)
9)按「n+Shift+g」:移动到第n行行首。 (n+G)
10)按「n+Enter」:当前光标向下移动n行。(n+回车)
11)按「w」:光标从左到右,跳到下一个单词的开头。
12)按「e」:光标从左到右,跳到下一个单词的结尾。
12)按「b」:光标从右到左,跳到上一个单词的开头
Q:hjkl不就是小键盘的上下左右吗,岂不是多此一举?
A:vim产生的时候,我们的键盘还没有小键盘这个概念,所以没有上下左右四个键位,如下:
老式键盘,hjkl上面还贴心的标注了方向
记忆技巧:
j->jump 跳下去 所以是下;k->King 所以是上;h位于四个键的最左面所以是左,同理l是右
Q:n指的什么?
A:n就是数字,比如 「n+Enter」,则在键盘上输入5 然后回车,则光标向下移动5行
Q:w e b 的应用场景是什么?
A:当代码很长的时候,我们不想一个个的移动光标,以单词为单位移动会更快!
2:控制内容
之前说过,除开控制光标,命令模式还可以控制内容,进行删除,复制粘贴,剪贴.....
①:复制粘贴
复制粘贴】
1)按「yy」:复制光标所在行
2)按「n+yy」:复制光标所在行开始往下的n行
3)按「yw」:将光标所在位置开始到字尾的字符复制 (看似多余实则为了n+yy)
4)按「n+yw」:将光标所在位置开始往后的n个字复制
5)按「p」:将已复制的内容在光标的下一行粘贴上。
6)按「np」:将已复制的内容在光标的下一行粘贴n次。
例子:
②:剪切
剪切】
1)按「dd」:剪切光标所在行。
2)按「n+dd」:剪切光标所在行开始往下的n行。
3)按「p」:将已剪切的内容在光标的下一行粘贴上。
4)按「n+p」:将已剪切的内容在光标的下一行粘贴n次。
解释:剪切即将内容去掉了,但是仍然可以复制
③:删除
删除】
1)按「x」:删除光标所在位置的字符。
2)按「n+x」:删除光标所在位置开始往后的n个字符。
3)按「X」:删除光标所在位置的前一个字符。
4)按「n+X」:删除光标所在位置的前n个字符。
5)按「dd」:删除光标所在行。
6)按「n+dd」:删除光标所在行开始往下的n行。
解释:其实用得最多的还是1和dd
④:撤销
【撤销】
1)按「u」:撤销。
2)按「Ctrl+r」:恢复刚刚的撤销。
解释:命令模式的任何操作后悔了,均可u进行撤销,而你对撤销后悔了,不能用u撤销(否则套娃了),而是要用Ctrl+r,这里的+,意思是Ctrl和r一起按的意思
⑤:其他操作
大小写切换】
1)按「~」:完成光标所在位置字符的大小写切换。
2)按「n~」:完成光标所在位置开始往后的n个字符的大小写切换。
【替换】
1)按「r」:替换光标所在位置的字符。
2)按「R」:替换光标所到位置的字符,直到按下「Esc」键为止。
【更改】
1)按「cw」:将光标所在位置开始到该单词的字符删除,并进入插入模式。
2)按「cnw」:将光标所在位置开始往后的n个字删除,并进入插入模式。
【翻页】
1)按「Ctrl+b」:上翻一页。
2)按「Ctrl+f」:下翻一页。
3)按「Ctrl+u」:上翻半页。
4)按「Ctrl+d」:下翻半页。
解释:值得一提的是
a: 「~」:可以长按,它会一个一个的变成大写,到合适的时候再停下来
b:「r」:要先按r,然后再按自己想替换的字符,就能替换了
c:「R」:先按R,此时就进入了替换模式,然后你可以输入什么,输入几个,就从光标往后给你替换几个,Esc退出替换模式(是的,这也是一种模式,知道就行)
d:「cw」,比如你光标是在printf的p,那么会删除掉printf,进入插入模式;若你光标是在r,这删除rintf,保留p,进入插入模式
最常用的还是「~」和「R」,其他了解即可
四:底行模式的操作
1:行号设置
【行号设置】
1)「set nu」:显示行号。
2)「set nonu」:取消行号。
打代码的都喜欢显式行号,vim也提供了!
2:保存退出
【保存退出】
1)「w」:保存文件。
2)「q」:退出vim,如果无法离开vim,可在「q」后面跟一个「!」表示强制退出。
3)「wq」:保存退出。
3:分屏
【分屏指令】
1)「vs 文件名」:实现多文件的编辑。
2)「Ctrl+w+w」:光标在多屏幕下进行切换。「Ctrl+w+w」是在命令模式下进行,而不是底行模式!
经常需要两个文件之间来回查看,比如一个头文件一个.c文件,此时 「vs 文件名」即可,如下:
Q:那此时我怎么知道我在那个文件中啊?
A:看光标即可,如上图光标在左侧,即test.c文件中,此时你执行什么都是在对test.c执行
此时「Ctrl+w+w」则将光标转移到另一个文件中!
注意:「Ctrl+w+w」是在命令模式下进行,而不是底行模式!
4:不退出vim执行指令
执行指令】
1)「!+指令」:在不退出vim的情况下,可以在指令前面加上「!」就可以执行Linux的指令,例如查看目录、编译当前代码等。
解释:每次都退出vim,然后再在Linux下执行指令,过于麻烦,所以 底行模式下「!+指令」即可
例子:
我们在vim中进行ls指令的执行
会跳转到外面目录显式指令对应的内容
然后再按回车,则继续vim!
五:vim的配置
Q:哎,我觉得vim编辑代码是真的麻烦啊!又没缩进,又没符号补齐,又没提示,全靠手搓!
A:DIY配置一下vim即可
配置肯定是站在普通用户的角度进行配置的,你进公司也不可能直接就是root
1:创建.vimrc文件
每个普通用户的家目录下,需要创建一个.vimrc文件,是的,它是一个隐藏文件,如果有了,则不用再创建了,如下:
2:配置 .vimrc文件
用vim打开.vimrc文件,补上一个显示行号的指令:
然后wq退出,此时再去vim编辑任何一个文件,都会又行号了:
所以只要你想要什么,就在.vimrc文件中,进行相应的补充,不知道的指令就去网上查一查,但是想要配置出一个好用的vim是非常的不容易的,某些vim配置还需要使用插件,建议不要自己一个个去配置。
但是作为我的粉丝,博主已经准备好了❀(#^.^#):
直接执行以下指令(想在哪个用户下让vim配置生效,就在哪个用户下执行该指令,不推荐直接在root下执行):
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
注意:(centos 7 才能用这个指令 因为博主就是centos7哦)
然后按照提示输入root密码:
然后等待安装配置,最后手动执行source ~/.bashrc即可。
配置完成后,像什么自动补全、行号显示以及自动缩进什么的就都有了。
六:小技巧和易错点
1:批量注释和取消注释
①:Ctrl V
解释:左下角显式V-block 就对了
②:hjkl进行注释区域的选择
解释:博主j到了行号7的位置
③:输入大写I
解释:输入 I 之后呢,左下角回到插入模式,这就对了
④:输入//
⑤:点击Esc
解释:把所选区域都进行注释了
批量取消注释,类似道理,不再赘述
批量化取消注释:
1.ctrl v
2.hjkl
3.d
2:退出的方式
底行模式想保存退出的时候,记住是wq,而不是qw,否则会一直不让你退出,此时你qw!强行退出,下一次进来就会生成隐藏文件(交换文件)
另外 vim的时候,可以在命令模式下ZZ(两个大写的Z),也可以退出vim编辑,但是不推荐,还是老老实实的wq退出
七:操作汇总
vim命令模式各命令汇总
【移动光标】
1)按「k」:光标上移。
2)按「j」:光标下移。
3)按「h」:光标左移。
4)按「l」:光标右移。
5)按「$」:移动到光标所在行的行尾。
6)按「^」:移动到光标所在行的行首。
7)按「gg」:移动到文本开始。
8)按「Shift+g」:移动到文本末尾。
9)按「n+Shift+g」:移动到第n行行首。
10)按「n+Enter」:当前光标向下移动n行。
11)按「w」:光标从左到右,从上到下的跳到下一个字的开头。
12)按「e」:光标从左到右,从上到下的跳到下一个字的结尾。
12)按「b」:光标从右到左,从下到上的跳到上一个字的开头
【删除】
1)按「x」:删除光标所在位置的字符。
2)按「nx」:删除光标所在位置开始往后的n个字符。
3)按「X」:删除光标所在位置的前一个字符。
4)按「nX」:删除光标所在位置的前n个字符。
5)按「dd」:删除光标所在行。
6)按「ndd」:删除光标所在行开始往下的n行。
【复制粘贴】
1)按「yy」:复制光标所在行到缓冲区。
2)按「nyy」:复制光标所在行开始往下的n行到缓冲区。
3)按「yw」:将光标所在位置开始到字尾的字符复制到缓冲区。
4)按「nyw」:将光标所在位置开始往后的n个字复制到缓冲区。
5)按「p」:将已复制的内容在光标的下一行粘贴上。
6)按「np」:将已复制的内容在光标的下一行粘贴n次。
【剪切】
1)按「dd」:剪切光标所在行。
2)按「ndd」:剪切光标所在行开始往下的n行。
3)按「p」:将已剪切的内容在光标的下一行粘贴上。
4)按「np」:将已剪切的内容在光标的下一行粘贴n次。
【撤销】
1)按「u」:撤销。
2)按「Ctrl+r」:恢复刚刚的撤销。
【大小写切换】
1)按「~」:完成光标所在位置字符的大小写切换。
2)按「n~」:完成光标所在位置开始往后的n个字符的大小写切换。
【替换】
1)按「r」:替换光标所在位置的字符。
2)按「R」:替换光标所到位置的字符,直到按下「Esc」键为止。
【更改】
1)按「cw」:将光标所在位置开始到字尾的字符删除,并进入插入模式。
2)按「cnw」:将光标所在位置开始往后的n个字删除,并进入插入模式。
【翻页】
1)按「Ctrl+b」:上翻一页。
2)按「Ctrl+f」:下翻一页。
3)按「Ctrl+u」:上翻半页。
4)按「Ctrl+d」:下翻半页。vim底行模式各命令汇总
在使用底行模式之前,记住先按「Esc」键确定你已经处于命令模式,再按「:」即可进入底行模式。【行号设置】
1)「set nu」:显示行号。
2)「set nonu」:取消行号。
【保存退出】
1)「w」:保存文件。
2)「q」:退出vim,如果无法离开vim,可在「q」后面跟一个「!」表示强制退出。
3)「wq」:保存退出。
【分屏指令】
1)「vs 文件名」:实现多文件的编辑。
2)「Ctrl+w+w」:光标在多屏幕下进行切换。
【执行指令】
1)「!+指令」:在不退出vim的情况下,可以在指令前面加上「!」就可以执行Linux的指令,例如查看目录、编译当前代码等。
感谢该博客提供素材(#^.^#):Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)_yum install makefile-CSDN博客
相关文章:

Linux环境基础开发工具->vim
引入:vim是什么? vs叫作继承开发环境,我们可以在里面编辑代码,调式代码,运行代码....这种叫集成开发环境;而vim只用来编辑代码,也就是类似于在windows上打开一个记事本来写代码的操作 集成开发…...

跳板问题(贪心算法+细节思考)
首先直接看题: 这题直接贪心其实问题不大: 下面先展示我的一个错误代码: # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…...

RuoYi前后端分离框架集成UEditorPlus富文本编辑器
一、背景 采用若依框架搭建了一个小型的电子书项目,项目前端、后端、移动端就一人,电子书的章节内容是以富文本内容进行呈现的,产品设计人员直接给了一个第三方收费的富文本编辑器截图放到开发文档中,提了一沓需求点,概况下来就是要做成下图中的样子。作为一个后端开发人…...

IPD流程落地:项目任务书Charter开发
目录 简介 第一个方面,回答的是Why的问题。 第二点,要回答做什么的问题,也就是产品定义What的问题。 第三点就是要回答执行策略与计划的问题,也就是How、When、Who的问题。 第四点是对上述这些分析的总结分析,要为…...

Vue 2 混入 (Mixins) 的详细使用指南
1.基本概念 混入 (Mixins) 是 Vue 2 中用于组件代码复用的重要特性,它允许你将可复用的功能分发到多个组件中。 混入是一种灵活的代码复用方式,可以包含任意组件选项(data、methods、生命周期钩子等)。当组件使用混入时ÿ…...
day020-sed和find
文章目录 1. sed1.1 查找、过滤文本1.1.1 根据行号取行1.1.2 根据行号取范围1.1.3 过滤出指定行1.1.4 过滤出指定范围内容 1.2 替换文件内容1.2.1 将文件中虚拟用户命令解释器替换成/bin/bash1.2.2 修改原文件并备份1.2.3 为每行开头加上# 1.3 反向引用(后向引用&am…...
OpenGL Chan视频学习-4 Vertex Buffers and Drawing a Triangle in OpenGL
一、视频链接 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 二、相关网站 docs.gl 三、代码整理 c #include <GL/glew.h> #include <GLFW/glfw3.h>#include<iostream>int…...
数据库事务的四大特性(ACID)
一、前言 在现代数据库系统中,事务(Transaction)是确保数据一致性和完整性的重要机制。事务的四大特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)…...
网络安全全知识图谱:威胁、防护、管理与发展趋势详解
1 网络安全基础概念 1.1 什么是网络安全 网络安全是指通过技术、管理和法律等手段,保护计算机网络系统中的硬件、软件及其系统中的数据,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,确保系统连续可靠正常地运行,网络服务不…...

FreeRTOS 在物联网传感器节点的应用:低功耗实时数据采集与传输方案
FreeRTOS 在物联网传感器节点的应用:低功耗实时数据采集与传输方案 二、FreeRTOS 任务划分与优先级设计 任务名称优先级执行周期功能描述Sensor_Collect3100ms多传感器数据采集与预处理Data_Process2事件驱动数据滤波/压缩/异常检测LoRa_Transmit41s低功耗长距离数…...
解决 iTerm2 中 nvm 不生效的问题(Mac 环境)
解决 iTerm2 中 nvm 不生效的问题(Mac 环境) 标题 《为什么 iTerm2 无法使用 nvm?—— 解决 Mac 终端环境变量冲突指南》 问题描述 许多开发者在 Mac 上使用 nvm 管理 Node.js 版本时,发现: 原生终端:n…...

Linux环境下基于Docker安装 PostgreSQL数据库并配置 pgvector
文章目录 1 docker-compose 安装 PostgreSQL 容器内安装 pgvector1.1 基于 docker-compose 安装 PostgreSQL 数据库1.2 容器内配置 pgvector 2. docker-compose Dockerfile 形式直接配置PostgreSQL数据库及 pgvector参考资料 PostgreSQL是一种功能强大的开源关系数据库管理系…...

(9)-java+ selenium->元素定位之By name
1.简介 上一篇已经介绍了通过id来定位元素,继续介绍其他剩下的七种定位方法中的通过name来定位元素。本文来介绍Webdriver中元素定位方法之By name,顾名思义,就是我们想要定位的目标元素节点上,有一个name ="value"的属性,这样我们就可以通过name的value直接去…...

深浅拷贝?
一、定义: 浅拷贝:只复制对象的第一层属性,若第一层属性是引用类型(如对象、数组),则复制其内存地址,修改拷贝后的嵌套对象会影响原对象。 深拷贝:递归复制对象的所有层级…...

Beckhoff PLC 功能块 FB_CTRL_ACTUAL_VALUE_FILTER (模拟量滤波)
1. 功能块概览 名称:FB_CTRL_ACTUAL_VALUE_FILTER(实际值滤波控制功能块)。作用:对测量输入值进行合理性检查( plausibility check )和滤波处理,防止异常跳变(如传感器信号突变&…...
Mysql在SQL层面的优化
以下是MySQL在SQL层面的优化方法及详细案例,结合实际场景说明如何通过调整SQL语句提升性能: 1. 确保索引有效使用 案例:订单状态查询优化 问题SQL: SELECT * FROM orders WHERE status shipped AND create_time > 2023-01-…...
JVM规范之栈帧
JVM规范之栈帧 前言正文概述局部变量表操作数栈动态链接 总结参考链接 前言 上一篇文章了解了JVM规范中的运行时数据区: JVM规范之运行时数据区域 其中,栈是JVM线程私有的内存区,栈中存储的单位是帧(frames)ÿ…...

【C++指南】string(四):编码
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 引言 在 C 编程中,处理字符串是一项极为常见的任务。而理解字符串在底层是如何编码存储的&…...

深度学习之序列建模的核心技术:LSTM架构深度解析与优化策略
LSTM深度解析 一、引言 在深度学习领域,循环神经网络(RNN)在处理序列数据方面具有独特的优势,例如语音识别、自然语言处理等任务。然而,传统的 RNN 在处理长序列数据时面临着严重的梯度消失问题,这使得网…...

AI量化交易是什么?它是如何重塑金融世界的?
第一章:证券交易的进化之路 1.1 从喊价到代码:交易方式的革命性转变 在电子交易普及之前,证券交易依赖于交易所内的公开喊价系统。交易员通过手势、喊话甚至身体语言传递买卖信息,这种模式虽然直观,但效率低下且容易…...

分布式事务处理方案
1. 使用Seata框架解决 1.1 XA 事务 1.1.1 XA整体流程 第一阶段 RM1开启XA事务-> 执行业务SQL -> 上报TC执行结果RM2开启XA事务-> 执行业务SQL -> 上报TC执行结果 第二阶段 TC根据 RM上报结果通知RM一起提交/回滚XA事务 1.1.2 XA特点 XA 模式必须要有数据库的支…...

CVE-2024-36467 Zabbix权限提升
漏洞描述 在Zabbix中,具有API访问权限的已认证用户(例如具有默认用户角色的用户)可以通过调用user.update API接口,将自己添加到任何用户组(如Zabbix管理员组)。然而,用户无法添加到已被禁用或…...

Dify中的自定义模型插件开发例子:以xinference为例
本文使用Dify v1.0.0-beta.1版本。模型插件结构基本是模型供应商(模型公司,比如siliconflow、xinference)- 模型分类(模型类型,比如llm、rerank、speech2text、text_embedding、tts)- 具体模型(…...
crud方法命名示例
以下是基于表名dste_project_indicator(项目指标表)的完整命名示例,覆盖各类增删改查场景: 1. 表名与实体类映射 // 表名:dste_project_indicator // 实体类:DsteProjectIndicatorEntity public class Ds…...

尚硅谷redis7 33-36 redis持久化之RDB优缺点及数据丢失案例
官网说明优点: RDB是Redis数据的一个非常紧凑的单文件时间点表示,RDB文件非常适合备份。例如,您可能希望在最近的24小时内每小时旧档一次RDB文件,并在30天内每天保存一个RDB快照,这使您可以在发生来难时轻松恢复不同版本的数据集。RDB非常适合灾难恢复,它是一个可以…...
No such file or directory: ‘ffprobe‘
目录 详细信息: 解决方法: No such file or directory: ffprobe 详细信息: File "/usr/local/lib/python3.10/dist-packages/framepump/framepump.py", line 168, in get_duration return float(ffmpeg.probe(video_path)[form…...

计算机网络-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx
文章目录 WebSocketDNS什么是dns域名解析底层协议 cookie/sessionToken/JWTNginx WebSocket 一种网络通信协议,允许在单个 TCP(半双工) 连接上进行全双工通信(客户端和服务器可同时双向传输数据)。 HTTP是基于请求-响…...
功能“递归模式”在 C# 7.3 中不可用,请使用 8.0 或更高的语言版本的一种兼容处理方案
原程序: internal class ControllerParameterCreator : IParameterCreator {private Controller controller;public ControllerParameterCreator(Controller controller){this.controller controller;}public Parameter CreateSystem(string name, int unused){re…...
第4章-操作系统知识
存储管理 固定分区:一种静态分区方式请求分页存储管理覆盖技术:覆盖技术是指让作业中不同时运行的程序模块共同使用同一主存区域。...

将网页带格式转化为PDF
# 一、安装插件 SingleFile | 将完整的页面保存到一个 HTML 文件中 – 下载 🦊 Firefox 扩展(zh-CN) 打开火狐浏览器,安装上面的插件 # 二、下载html单文件 打开对应的网页,点击插件下载对应的html文件 # 三、打开…...