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 可以继续输入指令。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NFC 智能门锁全栈解决方案:移动端、服务器、Web 管理平台

目录 一、系统整体架构 二、移动端 APP 开发 2.1 开发环境与基础准备 2.2 主要功能模块 2.3 示例代码(Android/Kotlin 简化示例) 三、后台服务开发 3.1 环境准备 3.2 主要功能 3.3 示例代码(Node.js Express 简化示例) …

系统与网络安全------网络应用基础(5)

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 虚拟化 虚拟化技术原理概述虚拟化虚拟化实现条件常见的虚拟化软件产品 VMware应用实战安装VMware Workstation创建新虚拟机虚拟机的硬件配置调整 虚拟化高级应用虚拟机备份虚拟机快照 虚拟化技术 原理概述 虚…

Postman 下载文件指南:如何请求 Excel/PDF 文件?

在 Postman 中进行 Excel/PDF 文件的请求下载和导出,以下是简明的步骤,帮助你轻松完成任务。首先,我们将从新建接口开始,逐步引导你完成整个过程。 Postman 请求下载/导出 excel/pdf 文件教程

华为HCIE学习指南,如何更好的学习HCIE?

新盟教育 专注华为认证培训十余年 为你提供认证一线资讯! 在竞争激烈的ICT行业,华为HCIE认证犹如一颗璀璨的明珠,散发着耀眼的光芒。它不仅是对个人技术能力的高度认可,更是开启高薪职业大门的钥匙。然而,华为HCIE学习…

贪心算法——c#

贪心算法通俗解释 贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优,而是通过局部最优的累积来逼近最终解。优点是简单高效,缺点是可能无法得到全局最优解。 一句话秒懂 自动售货机找零钱:用最少数量的…

架构思维:如何设计一个支持海量数据存储的高扩展性架构_数据分片、存储、复制与一致性的原理性问题

文章目录 PRE引言1. 数据分片策略Hash取模分片一致性Hash分片Range分片分片设计原理核心设计模块分片规则定义动态分片调整路由与负载均衡 应对热点的关键技术多级分片(Hierarchical Sharding)副本分散策略缓存层配合 典型应用场景优缺点分析 2. 应对热点…

Jenkins最新版,配置Gitee私人令牌和Gitee凭证

jenkins 配置Gitee私人令牌和凭证 jenkins 版本:Jenkins 2.492.2 Gitee配置 Jenkins配置gitee插件,需要先申请gitee私钥。 安装gitee插件 申请Gitee私人令牌,后面还需要添加凭证。 测试链接,并保存 配置凭证

ORACLE RAC ASM双存储架构下存储部分LUN异常的处理

早上接到用户电话,出现有表空间不足的告警,事实上此环境经常巡检并且有告警系统,一开始就带着有所疑惑的心理,结果同事在扩大表空间时,遇到报错 ORA-15401/ORA-17505,提示ASM空间满了: ALERT日志&#xff1…

Windows下docker使用教程

docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的,后面的内容其实不变 …

9.4分漏洞!Next.js Middleware鉴权绕过漏洞安全风险通告

今日,亚信安全CERT监控到安全社区研究人员发布安全通告,Next.js 存在一个授权绕过漏洞,编号为 CVE-2025-29927。攻击者可能通过发送精心构造的 x-middleware-subrequest 请求头绕过中间件安全控制,从而在未授权的情况下访问受保护…

代码随想录算法训练营Day12 | Leetcode 226翻转二叉树、101对称二叉树、104二叉树的最大深度、111二叉树的最小深度

代码随想录算法训练营Day12 | Leetcode 226翻转二叉树、101对称二叉树、104二叉树的最大深度、111二叉树的最小深度 一、翻转二叉树 相关题目:Leetcode226 文档讲解:Leetcode226 视频讲解:Leetcode226 1. Leetcode226.翻转二叉树 给你一棵二…

3.26学习总结 做题

先初始化n1时,输出的图案。 观察可以得到,n每加1,则在原先图案的左下方和右下方重新打印一遍原先的图案,可以分为两步。 1.复制原先图案打印在其正下方和右下方,并将原先图案清空。 2.在现在图案的上方中间打印原先…

Linux学习笔记(应用篇二)

基于I.MX6ULL.MINI开发板 开发板与电脑相互通信电脑与开发板互传文件 开发板与电脑相互通信 用网线将电脑与开发板连接 本人使用的是Ubuntu系统,不是虚拟机 一般来说刚开始电脑和开发板是ping不通的 首先查看电脑的 IP WinR,cmd调出终端 我使用的是…

【gradio】从零搭建知识库问答系统-Gradio+Ollama+Qwen2.5实现全流程

从零搭建大模型问答系统-GradioOllamaQwen2.5实现全流程(一) 前言一、界面设计(计划)二、模块设计1.登录模块2.注册模块3. 主界面模块4. 历史记录模块 三、相应的接口(前后端交互)四、实现前端界面的设计co…

中间件漏洞-Tomcat篇

一:CVE-2017-12615 1.搭建服务 cd /www/wwwroot/vulhub-master/tomcat/CVE-2017-12615 docker-compose up -d 2.打开网页 3.在哥斯拉中生成jsp木马并保存为2.jpg 对当前页面进行抓包,修改提交方式为PUT并复制木马 4.在网页中访问我们生成的木马&#…

PHP eval 长度限制绕过与 Webshell 获取

在 PHP 代码中&#xff0c;如果 eval($param); 存在且长度受限&#xff0c;并且过滤了 eval 和 assert&#xff0c;仍然可以通过多种方法绕过限制&#xff0c;获取 Webshell。 源码 <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($param,…

31天Python入门——第15天:日志记录

你好&#xff0c;我是安然无虞。 文章目录 日志记录python的日志记录模块创建日志处理程序并配置输出格式将日志内容输出到控制台将日志写入到文件 logging更简单的一种使用方式 日志记录 日志记录是一种重要的应用程序开发和维护技术, 它用于记录应用程序运行时的关键信息和…

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪&#xff0c;和常见的“小巧玲珑”的行车记录仪不同&#xff0c;一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…

机器学习——KNN数据均一化

在KNN&#xff08;K-近邻&#xff09;算法中&#xff0c;数据均一化&#xff08;归一化&#xff09;是预处理的关键步骤&#xff0c;用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点&#xff1a; 质押 一 、主要思想 1. 最值归一化&#…

Element UI实现表格全选、半选

制作如图所示的表格全选、半选&#xff1a; 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…