Linux开发工具:Vim 与 gcc,打造高效编程的魔法双剑
文章目录
- 一、初识Vim
- 模式
- 二、vim基本操作
- 2.1基础操作
- 2.2命令模式/正常模式
- 2.2.1光标定位
- 2.2.2复制粘贴、删除
- 2.2.3撤销
- 2.2.4替换字符
- 2.2.5替换模式
- 2.3底行模式
- 2.3.1退出vim和**保存文件**
- 2.3.2定位文本字符串
- 2.3.3命令
- 2.3.4实现分屏
- 2.3.5替换指定字符串
- 2.4补充指令
- 2.4.1视图模式
- 2.4.2打开文件指定行号
- 2.4.3感叹号,快速执行历史命令
- 2.4.4设置行号
- 三、使用Linux编译器:gcc
- 3.1预处理
- 3.2编译
- 3.3汇编
- 3.4链接
- 四、动静态库
- 4.1语言发展
- 4.2动静态库、动静态链接
- 实现静态链接
- 补充:sudo,无法使用的情况
- 小知识:代码裁剪
一、初识Vim
Vim是vi编辑器发展而来的。vi是早期Unix系统中的编辑器,Vim是在vi的增强版,在此基础上添加许多新的功能
- Vim是一款多模式编辑器,这是它很重要的特性。命令模式、插入模式、底行模式、视图模式、替换模式等等,一共又12种模式,其中最重要的是命令模式、插入模式、底行模式,用于对代码的编辑、提高编写效率、保存退出等功能。
- Vim这款编辑器中是无法使用鼠标的,其原因之一:熟练使用各种模式下的命令操作,在编辑代码的效率上比VS编译器的效率还要高,例如:在Vim中可以指定光标的位置,一个1000行的代码,在VS编译器中需要不断的滚动光标才查找的了需要的行号,Vim中只需要通过命令指定行号即可跳转。
这里的Vim与我们平时使用的VS2022编译器不一样,VS2022是一款集成开发环境,可以用于,编写代码-调试代码理-编译运行代码。
在Linux中:
- Vim负责对代码的编辑。
- gdb负责代码的调试
- gcc/g++负责代码的编译运行
在早期的键盘上,是没有 ↑↓←→的方向键,在Vim中移动光标是通过h、j、k、l这四个按键控制。当然现在Vim也支持使用方向键,但在实际中,并不会使用方向键,在使用上方向将并没有hjkl四个按键顺手。类似于在游戏中我们不会使用方向将来操控角色,而是用wasd来控制方向。

模式
直接输入vim,进入vim的环境查看它版本信息。


额,进去之后别慌,此时vim正处于命令模式,注意观察左下脚的单词 NORMAL,此时的状态指的就是命令模式,又被称为正常模式,在命令模式中,输入的任何按键都可以被视为一条指令,当然这条指令是合法的才会生效。在命令模式中输入 Shirt + zz即可退出,别搞错了,英文输入法才会起效果~。
命令模式:normal mode
又称为正常模式,Linux会将输入的所有内容当作为命令,它只识别支持的命令,乱按键盘是没用滴~ ,可以控制光标的移动,代码、字符串、行的复制、粘贴、删除等操作。此模式无法进行编辑
- 最大意义:提高编辑代码的效率,熟练使用这些指令后,编辑效率比使用鼠标配合键盘快很多。
在Windows中,使用 CTRL + c / v进行复制粘贴的快捷方式,实际上是一个指令,和命令模式中的命令操作本质是一样的。
插入模式: insert mode
对文件输入内容,在命令模式中输入 i即可进入,通过ESC可以退出插入模式,切回命令模式。
底行模式:Last line mode
文件保存、退出、查找字符串、列出行号等操作。在命令模式中输入 Shift + ;,通过ESC可以退出底行模式,切回命令模式。
-
底行模式与插入模式中是无法互相切换的
-
任何模式下,使用ESc都可以切换到命令模式,而命令模式又可以切换到所有的模式。
-
命令模式是vim中的精华
二、vim基本操作
安装Vim
sudo yum install vim //普通用户
yun install vim //超级用户
2.1基础操作
通过vim打开文件进行编辑
vim [文件名]
刚开始使用Vim进行编辑看见的是这样:
啊,这该怎么玩它,什么按键按下去也没有效果。此时Vim处于命令模式,想要进行代码的编辑,需要输入 i切换到插入模式,左下脚有INSERT的字样,成功进入插入模式。

在插入模式中进行编辑,又发现一些问题,为什么没有快捷输入,报错信息,换行不会自动大四个空格,等等等,放在就是用着变扭

第一次使用的vim是刚出厂的什么内容都还没有进行配置,语法高亮、自动换行等内容,而这些可以通过手动在 vim ~/.vimrc中进行配置,打造属于自己的vim编辑器。.vimrc的配置
在普通账户的加目录中执行一下命令,即可自动配置vim的环境,需要在联网环境运行。[配置Vim环境](VimForCpp: 快速将vim打造成c++ IDE)
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
2.2命令模式/正常模式
特点,退出vim前,光标在那一行,再次使用vim进入该文件时,光标还是在哪一行
切换插入模式
| 命令模式 | 结果 |
|---|---|
| i | 进入插入模式,光标在哪,进入插入模式光标就指向哪 |
| a | 进入插入模式,光标在当前位置后移一个位置 |
| o | 进入插入模式,光标换到下一行 |
2.2.1光标定位
上下定位
| 命令模式 | 结果 |
|---|---|
| gg | 光标直接定位到第一行 |
| shift + g == G | 光标定位到文本结尾 |
| 数字 + gg | 使光标定位到任意行 |
gg

G

48 + gg:

90 + gg

通过数字加gg的方式定位光标在效率上明显快很多,而想要在一行内完成左右定位,该咋办捏~
左右定位
| 命令模式 | 结果 |
|---|---|
| Shift + 4 == $ | 光标定位到改行内容的结尾 |
| Shift + 6 == ^ | 光标定位到改行有效内容的起始位置 |
| w | 以单词为单位,使光标前移动 |
| b | 以单词为单位,使光标后移动 |
| 数字 + w、b | 通过数字控制移动的单词个数 |
h、j、k、l :h控制光标先左移动一个单位;j控制光标向下移动一个单位;k控制光标向上移动一个单位;l控制光标向右移动一个单位
不使用方向键:在键盘初期没有 ↑ ↓ ← →键位
$:注意需要使用英文输入法

^

3w

2.2.2复制粘贴、删除
| 命令模式 | 结果 |
|---|---|
| yy | 复制当前行 |
| p | 粘贴到当前行的下一行 |
| dd | 剪切或删除当前行 |
| dd + p | 完整剪切逻辑,可以通过数字进行配合 |
| 数字 + yy | 从第一行复制的指定数字对应的行号 |
| 数字 + p | 数字大小可以指定粘贴多少份。 |
| 数字 + dd | 从光标所在这一行开始向下指定剪切多少行 |
| 数字 + x | 向后删除的一个字符。通过数字配合指定向后删除字符的个数 |
| 数字 + X | 注意了,这是大写的X,向前删除一个字符。 |
2.2.3撤销
| 命令模式 | 结果 |
|---|---|
| u | 撤销 |
| CTRL + r | 对u进行撤销 |
这两个命令在逻辑上呈现环装,可以进行相互撤销,写错东西,删错了可别慌,只要还没有退出vim还有补救滴~
退出vim出后,无法进行撤销操作
2.2.4替换字符
| 命令模式 | 结果 |
|---|---|
| ~ (Shift + `) | 快速转换大小写 |
| r + 需要替换的字符 | 将光标选中的内容进行替换。 |
| 数字 + r + 需要替换的字符 | 数字大小,表示从当前光标指定的内容向后替换的字符个数 |
2.2.5替换模式
Shift + r:从命令模式切换到替换模式,光标在哪里进行输入,直接进行替换

2.3底行模式
需要在命令模式输入冒号进行切换,shift + ; == :
底行模式输入,help可以观察viim的模式,和一些相关信息,看不懂英文没关系,有翻译软件呐~

2.3.1退出vim和保存文件
| 底行模式 | 结果 |
|---|---|
| w | 保存当前文件 |
| q | 退出文件 |
| wq | 退出并保存 |
| ! | 强制执行,可以与上述三个指令配合执行。 |
| Shift + zz | 退出vim |
2.3.2定位文本字符串
| 底行模式 | 结果 |
|---|---|
| / + 查找的字符串 | 定位到该字符串出现的第一次出现的位置 |
| / + 查找的字符串 / 数字 | 定位到下一个出现字符串的位置 |
还可以在擦找到一个字符串后不断的按n,向后查找


2.3.3命令
! + 命令:在不退出vim,使用命令行命令
例如:在底行模式中编译运行test.c文件


2.3.4实现分屏
vs + 文件名:实现分屏操作。在分屏中,光标在哪个屏幕,使用哪个文件

CTRL + ww:将光标移动到下一个屏幕

其余的操作与正常使用一个fengping
2.3.5替换指定字符串
%s/替换的字符串/替换后的内容/g
global:整体的
| 底行模式 | 结果 |
|---|---|
| %s/printf/print/g | 将文本中所有printf替换为print |

2.4补充指令
2.4.1视图模式
CTRL + v:进入视图模式
- 在视图模式下可以进行批量化操作,批量化注释,批量化tab,批量化删除、批量化插入等等
shitf+i,进入插入模式
视图模式 + h j k l选择注释的区域 + shift+i + // + Esc:批量化注释:
视图模式 + (gg + shift+g) + shift+i + // + Esc:全注释:
视图模式 + h j k l选择注释的区域 + d:批量化删除
成功进入视图模式:

批量化注释:
通过hjkl,或者gg,G选择待注释的区域

Shift + i,进入插入模式输入 //,进行注释

Esc,退出

批量化删除,在视图模式中使用,hjkl,或者gg,G控制待删除的区域

d,在键盘上输入d。完成删除

2.4.2打开文件指定行号
使用vim + 文件名 + 数字:可以指定打开文件后,指定光标所在的行号。

2.4.3感叹号,快速执行历史命令
注意,这是在退出Vim编辑器后执行的命令行指令
!g:执行最近使用的gcc命令
!l:执行最近使用的LL命令
!w:执行最近使用的which命令
可以通过 !,对任意指令进行配合。
修改vim的本质是去修改家目录下,.vimrc这个配置文件,在里边设置配置项目
从权限的角度来看,一个账户配置的vim,只能在当前账户中使用,
2.4.4设置行号
| 底行模式 | 结果 |
|---|---|
| set nu | 设置行号 |
| set nonu | 取消行号 |


三、使用Linux编译器:gcc
格式 gcc [选项] 要编译的文件 [选项] [目标文件]
生成可执行文件,默认生成的可执行文件名称为,a.out


运行可执行文件:

也可以指定生成的可执行文件名
gcc test.c -o test
3.1预处理
- 头文件展开
- 宏定义的替换
- 去注释
- 条件编译
生成.i文件
Linux中,头文件一般放在:/usr/include/这个目录中
gcc -E code.c -o code.i
没有添加 -o命令,会将生成后的 code.i文件内容全部打印出来
code.i生成
-o后面更上的文件名,表名要生成目标文件的文件名称
-E:从现在开始,进行程序的编译,一旦预处理完成,就停止
3.2编译
- 语法分析
- 词法分析
- 语义分析
- 符号汇总
将C语言编译为汇编语言,生成 .s文件
gcc -S code.c -o code.s
code.s 生成汇编语言文件
-S:开始进行程序编译,编译做完,完成汇编就停止。
3.3汇编
将汇编语言编译生成二进制文件,生成 .o文件
gcc -c code.c -o code.o
此处的二进制文件为,可重定位目标二进制文件,无法执行
-c:开始进行程序的翻译,汇编完成就停下来。
可以使用 od + 文件名 打开
没有前置完成-ES的操作直接 -c会将上述的操作执行,会直接生成 code.o的文件
gcc -c code.c -o code.o 可重定位目标文件
3.4链接
将.o文件与库文件进行链接,生成可执行文件
gcc code.o -o code
四、动静态库
在介绍动静态库之前,先原谅我叨叨几句介绍语言的发展。
4.1语言发展
计算机只认识二进制!!
- 纸带打孔方式,二进制
- 汇编语言:助记符,发明汇编语言后,发明了编译器,对汇编语言进行翻译
- 高级语言
- C语言、面向对象语言
- 可以直接将C语言翻译为二进制、历史已经有人做了将汇编语言翻译为二进制语言的操作,才不会这样做,只需要翻译为汇编就可以了
- C语言、面向对象语言
现有语言、还是先有编译器呢~
- 先有编译器,否则写的语言没有意义,第一代编译器没有出现汇编语言,使用二进制编写汇编语言编译器,然后发明了汇编语言
- 时代继续发展,使用汇编语言对二进制编写的编译器,进行重构
- 汇编语言写的软件,就可以不需要使用二进制编译器,而使用汇编语言写的编译器,这个过程称为编译器自举
- 到后来,发展到高级语言:先有C语言编译器,才发明的C语言,到后来的使用C语言编写了C语言编译器
4.2动静态库、动静态链接
作者水平有限,无法深入讲解
在Linux中可以完成代码的编译链接,离不开库的存在,在Linux中就默认存在着C/C++的库,头文件
ls /usr/include/ //查看Linux中的头文件

-
Linux中:动态库
libxxxx.so、静态库libxxxx.a。lib作为前缀,so作为后缀 -
Windows中:动态库
xxxx.dll、静态库xxxx.lib。.dll为动态库的后缀,.lib为静态库的后缀
通过ldd指令可以查看,进行链接时依赖了那些库。
ldd code 可以查看链接时依赖了什么文件
libc.so.6,C标准库,掐头去尾单剩一个C,它就是库名。
在进一步罗列库文件的信息。
ls /lib64/ld-linux-x86-64.so.2 -l

动态链接:
我是一位很喜欢上网的同学,最近刚刚以全市前3的成绩进了市一中,原本我是打算高高兴兴的进去学校,然而我傻眼了,隔壁有个学长告诉我这所市一中要求不能携带手机、电脑,我想着这可难办了,平时我学习成绩很好就是因为学习可以上网查资料,学累了可以玩游戏放松放松。此时学长说你先别急,我给你一串地址,在这学校附近有一家网吧,平时在周末咋们学校的同学都是去这个网吧上网的。
-
动态库链接过程类似于,给在学校(内存)的我(可执行程序)找学长(链接器)要了一串网吧地址(链接的地址信息),可以去上网吧(动态库),去网吧上某号机(调用库方法)。
-
将可执行文件加载到内存,开始执行代码,代码运行到上网吧这个方法后,就会去查询历史的链接信息(学长给的地址),跳转到网吧中上网(调用库函数),调用完对应的方法(某某号机),返回,库函数调用完成。这个过程称为动态链接
-
而为整个学校提供上网服务的网吧(动态库),又称为共享库
而某一天,某某老师发现,学校附近有一家网吧,学校的同学们一到周末都去网吧上网,老师想着这可不行,必须把这家网吧封了,因为它严重的影响到学生们的作风。网吧被封禁了(没有动态库),会导致所有的可执行文件运行出错
静态链接:
发现网吧被封了之后,我这可不行了,一个学期过去,我无法上网,导致我的学习成绩下滑了两名,不在是全校的top3了,回家之后我就去找老爸告状。此时老爸一听,这可不行我儿的学习成绩开始下滑了,是因为无法在学校上网导致的。
之后,老爸给学校商量,让我可以搞台电脑放在学校里给我用。我就携带电脑到学校去,这个过程称为静态链接
静态链接:将我们要的库方法,直接拷贝到我们的可执行程序中。
动态链接和静态链接的区别:
- 在Linux中每一条指令对应着一个可执行程序,而又依赖动态库,动态库丢失之后的后果可想而知
- 动态链接消耗的内存很少这样做体积小而美
通过动态链接生成的可执行程序

- 通过静态库编译号可执行程序后,就不再依赖库,但是消耗的内存比较高,浪费磁盘和内存空间
通过动态链接生成的可执行程序,可以发现静态链接消耗的内存是,动态链接的100倍左右。

实现静态链接
在Linux中,gcc默认执行的是动态链接,需要静态链接就只能手动执行。通过 file查看文件的链接信息,可以发现,code是 dynamically linked,翻译过来就是动态链接。

gcc默认不存在静态库,执行这条命令将会会报错。进行静态链接,系统中必须存在静态库
gcc code.c -o code-s -static 静态链接库
安装静态库:
sudo yum install glibc-static libstdc++-static -y
c库 c++库
通过file查看code-s的信息,可以发现链接方式是,statically linked,也就是静态链接。

补充:sudo,无法使用的情况
在普通账户中使用sudo创建了一个code.c文件,创建好后输入byte的密码,Linux提示byte不存在sudoers文件中。

ls -l /etc/sudoers
通过打印sudoers的信息发现,只有超级管理员才可以查看这个文件,没有修改的权限。

配置:
使用root账号打开这个文件,找到第100行,配置系统信任的账号。最左侧这一栏是普通账户名称,别写错了。

点击ESC切换到命令模式,然后切换到,底行模式进行保存退出,记得加感叹号强制保存退出,即使是超级用户也需要添加,Linux对这方面进行了限制。
小知识:代码裁剪
代码中可以通过条件编译完成对代码的裁剪,实现增删改。
可以通过设置裁剪的规则,完成在不同场景下生成不同版本的可执行程序。例如xshell的免费版本、收费版本,它们本质是通过条件编译完成功能的阉割。而不是写两份代码分别维护免费版本,收费版本,这样太过于麻烦
下列摘取自豆包
- WPS Office
- WPS 它有免费的个人版和付费的专业版、企业版等不同版本。个人版会裁剪掉一些高级的专业排版、多人协作中大规模团队精细管理等功能代码,着重提供常用的文字、表格、演示文稿编辑等基础功能以及一些面向个人用户的云服务、模板等功能代码。打造不同功能侧重和软件规模的版本。
相关文章:
Linux开发工具:Vim 与 gcc,打造高效编程的魔法双剑
文章目录 一、初识Vim模式 二、vim基本操作2.1基础操作2.2命令模式/正常模式2.2.1光标定位2.2.2复制粘贴、删除2.2.3撤销2.2.4替换字符2.2.5替换模式 2.3底行模式2.3.1退出vim和**保存文件**2.3.2定位文本字符串2.3.3命令2.3.4实现分屏2.3.5替换指定字符串 2.4补充指令2.4.1视图…...
cesium for unity的使用
先聊聊导入 看到这里的因该能够知道,官网以及网上绝大多数的方法都导入不进来,那么解决方法如下: 两个链接:按照顺序依次下载这两个tgz和zip,其中tgz为主要部分,zip为示例工程项目 如果您要查看示例工程项目的话&am…...
Android AOSP 架构和各层次开发内容介绍
一、系统架构总况 官方文档:架构概览 | Android Open Source Project (google.cn)https://source.android.google.cn/docs/core/architecture?hl=zh-cn 下面是Google Android 提供的最新架构层次图: 图. AOSP 的软件堆栈层次 System API 表示仅供合作伙伴和 OEM…...
Kafka 到 Kafka 数据同步
简述 Kafka 为处理实时数据提供了一个统一、高吞吐、低延迟的平台,其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。因此实现 Kafka 到 Kafka 的数据同步也成了一项重要…...
华为刷题笔记--题目索引
文章目录 更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记简单题目 更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记 该专栏题目包含两部分: 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新,订阅防丢失 简单题目 –题目分值试卷1华为OD机…...
osgEarth加载倾斜摄影测量数据
一、代码 // .cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <osgViewer/Viewer> #include <osgEarth/Notify> #include <osgEarth/EarthManipulator>...
消息推送问题梳理-团队管理
管理用户界面: 新增加用户列表:这些用有资格收到推送消户息 当删除一个医生的时候,重新添加这个人的时候 发现团队中没有这个人了 ,这个时候 需要重新添加这个人。 处理这个问题遵循的原则: 删除这个用户的时候&…...
如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online
简介 LibreOffice Online(也称为Collabora Online)是一个开源的在线办公套件,它提供了与LibreOffice桌面版相似的功能,但完全在云端运行。这意味着用户可以通过浏览器访问和编辑文档,而无需在本地计算机上安装任何软件…...
MongoDB数据备份与恢复(内含工具下载、数据处理以及常见问题解决方法)
一、工具准备 对MongoDB进行导入导出、备份恢复等操作时需要用到命令工具,我们要先检查一下MongoDB安装目录下是否有这些工具,正常情况下是没有的:),因为新版本的MongoDB安装时不包含这些工具,需要我们手动下载安装。下载成功之后…...
代码随想录第三十一天| 56. 合并区间 738.单调递增的数字
56. 合并区间 题目描述 给定一个区间的集合 intervals,请合并所有重叠的区间。 解题思路 排序区间 按照每个区间的起点 start 升序排序,便于后续合并。 合并区间 使用两个变量 start 和 right 分别记录当前区间的起点和终点。遍历排序后的区间&#x…...
C语言基本知识 2.2void 函数
在C语言中, void 是一个重要的关键字,具有多种用途,以下是详细介绍: 函数返回值类型声明 - 当函数不需要返回任何值时,可以将函数的返回值类型声明为 void 。例如: void printMessage() { printf(…...
Spring 框架中哪些接口可以创建对象
Spring 框架中哪些接口可以创建对象 在 Spring 框架中,向 IOC 容器中添加 Bean 主要有以下几种接口和方式。Spring 提供了不同的手段来实现对象的创建和管理,涵盖了不同的需求和场景。以下是几种常用的接口和方式: 1. BeanFactory 接口 Be…...
豆瓣书摘 | 爬虫 | Python
获取豆瓣书摘,存入MongoDB中。 import logging import timeimport requests from bs4 import BeautifulSoup from pymongo import MongoClientheaders {accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,…...
Oracle数据库物理存储结构管理
大家好,我是程序员小羊! 前言: 安装和配置Oracle数据库是一个涉及多个步骤的任务,通常包括环境准备、软件安装、数据库创建和基本配置等。以下是详细的安装与配置流程。 一、环境准备 1. 系统要求 操作系统:Wind…...
java——Map接口
Java的Map接口是一种键值对的数据结构,用于存储和操作键值对的集合。它是Java集合框架中的一部分,提供了一种以键值对形式组织数据的方法。 Map接口有多个实现类,常用的有HashMap、TreeMap和LinkedHashMap。每种实现类都有不同的特点和适用场…...
量子计算机全面解析:技术、应用与未来
标题:量子计算机全面解析:技术、应用与未来 一、什么是量子计算机? 量子计算机是一种利用量子力学原理(如叠加、纠缠和干涉)进行计算的新型计算设备。与传统计算机基于比特(0 和 1)的运算方式不…...
IDEA相关(包括但不限于快捷键,使用技巧)成长笔记
1.IDEA创建及命名规范 IDEA创建是:项目、模块、包、类 命名规范: 1.项目名全部小写 2.包名全部小写 3.类名首字母大写,一般都是使用驼峰式命名。 如:public class MyFirstClass{} 4.同上: 变量名、方法名首字母小…...
【再谈设计模式】适配器模式 ~接口兼容的桥梁
一、引言 在软件开发的复杂世界里,不同的组件、类或者系统往往有着各自独立的设计和接口定义。当需要将这些原本不兼容的部分整合在一起协同工作时,就像尝试将方形的榫头插入圆形的卯眼一样困难。适配器设计模式就如同一位神奇的工匠,能够巧妙…...
使用Cursor和Claude AI打造你的第一个App
大家好,使用Cursor和Claude AI打造应用程序是一个结合智能代码辅助和人工智能对话的创新过程。Cursor是一个编程辅助工具,它通过智能代码补全、聊天式AI对话和代码生成等功能,帮助开发者提高编程效率。Claude AI则是一个强大的人工智能平台&a…...
粗读Apache Paimon 的基本概念及其组成结构
文章目录 一、Paimon的基本概念(一)快照(二)分区(三)分桶(四)一致性保证 二、Paimon的组成结构(一)文件布局(二)存储结构(…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
