vim的一般操作(分屏操作) 和 Makefile 和 gdb
目录
一. vim的基本概念
二. vim基础操作
2.1 插入模式 aio
2.2 [插入模式]切换至[正常模式] Esc
2.3[正常模式]切换至[末行模式] shift + ;
2.4 替换模式 Shift + R
2.5 视图(可视)模式 (可以快速 删除//注释 或者 增加//注释) ctrl + v
三:一些基础指令操作:
3.1 移动光标
3.2删除文字
3.3 复制
3.4 替换
3.5 更改
3.6 vim末行模式常用命令
3.7 双屏幕 test.c 和 test.h 同时写入小技巧
3.7.1 方法一 使用垂直或水平分割
3.7.2方法2:使用标签页
3.7.3 方法3:使用窗口切换快捷键
四. gcc 和 g++
五. Makefile
六. gdb的一般操作
6.1开始调试(是对可执行文件的调试)
一. vim的基本概念
vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插入模式(Insert mode) 和 底行模式(last line mode),各模式的功能区分如下:
1.1 命令模式 ( 正常 / 普通 模式):控制屏幕光标的移动,字符、字或行的删除
1.2 插入模式 只有在插入模式下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
1.3 末行模式 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,“ shift + : ”即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes
二. vim基础操作
2.1 插入模式 aio
输入a :光标会移动到当前字符的后面,并进入[插入模式]。
输入i :光标会停留在当前字符的前面,并进入[插入模式]。
输入o :会在当前行的下方插入一个新行,并进入[插入模式]。
2.2 [插入模式]切换至[正常模式] Esc
目前处于[插入模式],可以按一下「ESC」键转到 [正常模式] 。
2.3[正常模式]切换至[末行模式] shift + ;
「shift+;」,其实就是输入「:」,就可以进入末行模式。
w(保存当前文件)
wq(输入「wq」,存盘并退出vim)
q!(输入q!,不存盘强制退出vim)
2.4 替换模式 Shift + R
按下Shift + R(即 R) 进入替换模式,在此模式下,你输入的每个字符都会替换光标处的字符,按 Esc 退出替换模式。
2.5 视图(可视)模式 (可以快速 删除//注释 或者 增加//注释) ctrl + v
删除操作:(例子是删除// 注释):
1.按下Ctrl +v 进入块选择模式。
2.用 j(向下) 或 k (向上) 或 h(左)或 L(右)移动光标,选中所有行的/部分(甚至包括后面的注释内容)。
3.按下 d 或 x 直接删除选中的块区域。
插入操作(例子是加入// 注释):
1. 进入块选择模式:按下 Ctrl + v。
2. 选择行范围:按 j(向下)或 k(向上)选择要注释的多行。
3. 如果注释需要对齐,可以按 l(向右)选中多列(例如选中行首的空白区域)。
4. 插入注释符号:按 Shift + i(大写 I)进入插入模式。
5 .输入 //(或 // 带空格)。
6. 按 Esc 退出插入模式,所有选中行的行首会自动添加 //。

三:一些基础指令操作:
3.1 移动光标
vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、
「k」、「L」,分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
按「」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#」:光标移到该行的第#个位置,如:5l,56l
按[gg]:进入到文本开始
按[shift+g]:进入文本末端
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctr」+「f」:屏幕往“前”移动一页
按「ctr」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页
3.2删除文字
「x」:每按一次,删除光标所在位置的一个字符
「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「dd」:删除光标所在行
「#dd」:从光标所在行开始删除#行
3.3 复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“有关的复制命令都必须
与“p”配合才能完成复制与粘贴功能。
3.4 替换
「r」:替换光标所在处的字符。
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
撤销上一次操作:
「u」:如果您误执行一个命令,可以马上按下」,回到上一个操作。按多次“u”可以执行
多次回复。
「ctrl+ r」:撤销的恢复
3.5 更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
跳至指定的行:
「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
3.6 vim末行模式常用命令
「shift + :」冒号即可进入末行模式。
列出行号:「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。
跳到文件中的某一行:「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字#15,就会跳到的第15行。
3.7 双屏幕 test.c 和 test.h 同时写入小技巧
3.7.1 方法一 使用垂直或水平分割


3.7.2方法2:使用标签页

3.7.3 方法3:使用窗口切换快捷键

四. gcc 和 g++
gcc编译选项
格式:gcс [选项] 要编译的文件 [选项] [目标文件]
比如:
预处理:
![]()
编译:
![]()
汇编:
![]()
连接:
![]()
ESc 后缀 对应文件 iso 后缀
五. Makefile
首先我们需要touch 一个Makefile

下面是Makefile 的例子:

make 就可以运行程序,比如:

像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行(也就是make),不过,我们可以显示要make执行。即命令—“make clean”,以此来清除所有的目标文件,以便重编译。

.PHONY 解释:一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是能被执行的。
六. gdb的一般操作
首先我们最好安装cgdb
• 推荐安装cgdb:
• Ubuntu: sudo apt-get install -y cgdb
• Centos: sudo yum install -y cgdb
程序的发布方式有两种,debug模式和release模式,Linux gcc/g++ 出来的二进制程序,默认是release模式。
要使用gdb调试,必须在源代码生成二进制程序的时候,加上一g选项,如果没有添加,程序无法被编译
比如下面的debug的文件:

6.1开始调试(是对可执行文件的调试)
比如:

命令列表 重要的用红色圈起来(可以自己去尝试,我就不试了):
| 命令 | 作用 | 样例 |
| list/l | 显示源代码,从上次位置开始,每次列出10行 | list/l 10 |
list/l 函数名 | 列出指定函数的源代码 | l main |
| list/l 文件名:行号 | 列出指定文件的源代码 | list/l test.c:1 |
| r/run | 从程序开始连续执行 | r |
| n/next | 单步执行,不进入函数内部 | n |
| s/step | 单步执行,进入函数内部 | step |
| break/b 行号(类似list的用法) | 在指定行号设置断点 | b 10 break test.c:10 |
| b 函数名 | 在函数开头设置断点 | b main |
| info b/break | 查看当前所有断点的信息 | info b |
| finish | 执行到当前函数返回,然后停止 | finish |
| set var | 修改变量的值 | set var i=10 |
| continue/c | 从当前位置开始连续执行程序 | continue |
| delete breakpoints | 删除所有断点 | delete breakpoints |
| d n | 删除序号为n的断点 | d 1 |
| disable breakpoints | 禁用所有断点 | disable breakpoints |
| enable breakpoints | 启用所有断点 | enable breakpoints |
| display 变量 | 跟踪显示指定变量的值(每次停止时) | display x |
| undisplay 变量 | 取消对指定编号的变量的跟踪显示 | undisplay x |
| backtrace/bt | 查看当前执行栈的各级函数调用及参数 | bt |
| info/i locals | 查看当前栈帧的局部变量值 | info/i locals |
| until 行号 | 执行到指定行号 | until 20 |
| quit/q | 退出GDB调试器 | q |
提示:假如我们不小心按到 Esc到 末行模式 ,按 i 可以继续输入指令。
相关文章:
vim的一般操作(分屏操作) 和 Makefile 和 gdb
目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图(可视)模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…...
生成器的应用 async与await实现
生成器配合使用函数 yield 将暂停执行代码,同时把函数返回值传递出去 function s(){console.log(ss); } function * f(){/*当 next() 调用时从头开始执行直到yield 开始检查后面的表达式现在是一个函数,那么首先执行函数当函数执行完毕,有返回值下面相当于 yield undefined*/…...
Apache Shiro 统一化实现多端登录(PC端移动端)
Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、密码学和会话管理等功能。它被广泛用于保护各种类型的应用程序,包括Web应用、桌面应用、RESTful服务、移动端应用和大型企业级应用。 需求背景 在当今数字化浪潮的推动下ÿ…...
NAT—地址转换(实战篇)
一、实验拓扑: 二、实验需求: 1.实现内网主机访问外网 2.实现外网客户端能够访问内网服务器 三、实验思路 1.配置NAT地址池实现内网地址转换成公网地址,实现内网主机能够访问外网。 2.配置NAT Sever实现公网地址映射内网服务器地址&…...
用HTML和CSS生成炫光动画卡片
这个效果结合了渐变、旋转和悬浮效果的炫酷动画示例,使用HTML和CSS实现。 一、效果 二、实现 代码如下: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&quo…...
Vue 3 + Composition API + Vite + Pinia + Element Plus 构建项目的完整指南
以下是使用 Vue 3 + Composition API + Vite + Pinia + Element Plus 构建项目的完整指南,包含 TypeScript 支持配置: 1. 创建项目 使用 Vite 初始化项目 npm create vite@latest my-vue-app -- --template vue-ts如果不需要 TypeScript,使用 --template vue 进入项目目录…...
FPGA_YOLO(三)
上一篇讲的是完全映射,也就是block中的所包含的所有的卷积以及归一,池化卷积 举例总共6个等都在pl侧进行处理(写一个top 顶层 里面conv 1 bn1 relu1 pool1 conv1*1 conv 2 bn2 relu2 pool2 conv1*1 ....总共6个 ),…...
使用 SQL CTE(公共表表达式)优化数据查询的实践
目录 一、背景 二、什么是 CTE? 三、CTE 的基本结构 四、示例分析 五、CTE 的作用 六、优势分析 一、背景 在数据分析和数据库管理中,SQL 查询的效率和可读性是至关重要的。随着数据量的不断增加,复杂的查询变得越来越难以管理和理解。…...
旅游CMS选型:WordPress、Joomla与Drupal对比
内容概要 在旅游行业数字化转型进程中,内容管理系统(CMS)的选择直接影响网站运营效率与用户体验。WordPress、Joomla和Drupal作为全球主流的开源CMS平台,其功能特性与行业适配性存在显著差异。本文将从旅游企业核心需求出发&…...
全面适配iOS 18.4!通付盾加固产品全面升级,护航App安全上架
引言: 苹果官方新规落地! 自2025年4月24日起,所有提交至App Store Connect的应用必须使用Xcode 16或更高版本构建,否则将面临审核驳回风险!Beta版iOS 18.4、iPadOS 18.4现已推出,通付盾iOS加固产品率先完成…...
bash 和 pip 是两种完全不同用途的命令,分别用于[系统终端操作]和[Python 包管理]
bash 和 pip 是两种完全不同用途的命令,分别用于 系统终端操作 和 Python 包管理。以下是它们的核心区别、用法及常见场景对比: 1. 本质区别 特性bashpip类型Shell 命令解释器(一种脚本语言)Python 包管理工具作用执行系统命令、…...
SQL 通用表表达式(CTE )
目录 概念:CTE: Common table Expression CTE 语法 CTE Demo 概念:CTE: Common table Expression 通用表表达式(CTE)是SQL中用于简化复杂查询的工具,第一次上线于SQL Server 2005。 CTE提供…...
一台电脑最多能接几个硬盘?
在使用电脑时,硬盘空间不够是许多用户都会遇到的问题。无论是摄影师、剪辑师等需要大量存储空间的专业人士,还是游戏玩家、数据备份爱好者,都可能希望通过增加硬盘来扩展存储容量。然而,一台电脑究竟最多能接多少个硬盘࿱…...
MATLAB中iscell函数用法
目录 语法 说明 示例 确定数组是否为元胞数组 iscell函数的功能是确定输入是否为元胞数组。 语法 tf iscell(A) 说明 如果 A 是元胞数组,则 tf iscell(A) 返回 1 (true)。否则,将返回 0 (false)。 示例 确定数组是否为元胞数组 创建一个元胞数…...
【玩转全栈】---- Django 基于 Websocket 实现群聊(解决channel连接不了)
学习视频: 14-11 群聊(一)_哔哩哔哩_bilibili 目录 Websocket 连接不了? 收发数据 断开连接 完整代码 聊天室的实现 聊天室一 聊天室二 settings 配置 consumer 配置 多聊天室 Websocket 连接不了? 基于这篇博客&…...
如何快速解决django报错:cx_Oracle.DatabaseError: ORA-00942: table or view does not exist
我们在使用django连接oracle进行编程时,使用model进行表映射对接oracle数据时,默认表名组成结构为:应用名_类名(如:OracleModel_test),故即使我们库中存在表test,运行查询时候&#…...
Selenium之简介
Selenium简介 首先,让我们看看官网是怎么定义的 Selenium是一个支持web浏览器自动化的一系列工具和库的综合项目,提供了扩展来模拟用户和浏览器的交互,用于扩展浏览器分配的分发服务器;用于W3C WebDriver规范的基础架构 其实&a…...
pip 安装某个包之后,Jupyter Lab仍旧显示包冲突;例如:Numba needs NumPy 2.1 or less. Got NumPy 2.2.
异常提示 Numba needs NumPy 2.1 or less. Got NumPy 2.2. --------------------------------------------------------------------------- ImportError Traceback (most recent call last) Cell In[8], line 53 import pywt4 import matplot…...
本地安装git
下载git 通过官网 下载 :Git - Downloading Package 若此页面无法直达,请删掉download/win尝试 2.双击运行安装 选择安装目录: 选择配置,默认不动 git安装目录名 默认即可 Git 的默认编辑器,建议使用默认的 Vim 编辑器…...
小程序内表格合并功能实现—行合并
功能介绍:支付宝小程序手写表格实现行内合并,依据动态数据自动计算每次需求合并的值,本次记录行内合并,如果列内合并,同理即可实现 前端技术:grid布局 display:grid 先看实现效果: axml&…...
SSE协议介绍和python实现
概述: SSE(Server-Sent Events)协议是一种允许服务器向客户端实时推送更新的技术,基于HTTP协议,常用于实时数据推送特点: 单向通信:服务器向客户端推送数据,客户端无法发送数据。基…...
甘肃旅游服务平台+论文源码视频演示
4 系统设计 4.1系统概要设计 甘肃旅游服务平台并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的小程序结构&am…...
Spring Boot 3虚拟线程的使用
在Spring Boot非Web应用中,使用虚拟线程时程序提前终止的问题及解决方案,可以通过以下步骤深入理解和验证: 问题根源分析 JVM退出机制 Java中,当所有非守护线程结束时,JVM会立即退出。即使存在正在运行的守护线程&…...
3、pytest实现参数化
在 pytest 中,参数化(parametrization)是一种强大的功能,可以让你用不同的输入数据重复执行同一个测试函数。这种功能非常有用,可以帮助你显著减少重复代码并提高测试覆盖率。 参数化的主要作用是: 测试多…...
【解决】Linux命令报错:Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64
报错命令 yum install zabbix-web-mysql-scl zabbix-apache-conf-scl centos使用scl切换软件版本时提示Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 报错原因 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址&#x…...
WebRTC中音视频服务质量QoS之FEC+NACK调用流程
WebRTC中音视频服务质量QoS之FECNACK调用流程 WebRTC中音视频服务质量QoS之FECNACK调用流程 WebRTC中音视频服务质量QoS之FECNACK调用流程前言一、WebRTC中FEC基础原理1. FEC基础操作 异或操作XOR2、 FEC中 行向和纵向 计算3、 WebRTC中 媒体包分组和生成FEC的包数① kFecRateT…...
神经网络知识点整理
目录 一、深度学习基础与流程 二、神经网络基础组件 三、卷积神经网络(CNN)编辑 四、循环神经网络(RNN)与LSTM 五、优化技巧与调参 六、应用场景与前沿编辑 七、总结与展望编辑 一、深度学习基础与流程 机器学习流…...
远程办公新体验:用触屏手机流畅操作电脑桌面
在数字化浪潮的推动下,远程办公已从“应急选项”转变为职场常态。无论是居家隔离、差旅途中,还是咖啡厅临时办公,高效连接公司电脑的需求从未如此迫切。然而,传统的远程控制软件常因操作复杂、画面卡顿或功能限制而影响效率。如今…...
【面试八股】:常见的锁策略
常见的锁策略 synchronized (标准库的锁不够你用了)锁策略和 Java 不强相关,其他语言涉及到锁,也有这样的锁策略。 1. 悲观锁,乐观锁(描述的加锁时遇到的场景) 悲观锁:预测接下来…...
【python】OpenCV—Hand Detection
文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、参考6、其它手部检测和手势识别的方案 更多有趣的代码示例,可参考【Programming】 1、功能描述 基于 opencv-python 和 mediapipe 进行手部检测 2、代码实现 导入必要的库函数 import cv2 import media…...
