网站程序定制开发流程,苏州工业园区教育网,iis wordpress rewrite,做现货黄金看什么网站文章目录 一、初识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视图… 文章目录 一、初识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编译器gcc3.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.sh2.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批量化删除、批量化插入等等
shitfi进入插入模式
视图模式 h j k l选择注释的区域 shifti // Esc批量化注释
视图模式 gg shiftg shifti // Esc全注释
视图模式 h j k l选择注释的区域 d批量化删除
成功进入视图模式 批量化注释
通过hjkl或者ggG选择待注释的区域 Shift i进入插入模式输入 //进行注释 Esc退出 批量化删除在视图模式中使用hjkl或者ggG控制待删除的区域 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 test3.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.scode.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语言编译器
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.6C标准库掐头去尾单剩一个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 它有免费的个人版和付费的专业版、企业版等不同版本。个人版会裁剪掉一些高级的专业排版、多人协作中大规模团队精细管理等功能代码着重提供常用的文字、表格、演示文稿编辑等基础功能以及一些面向个人用户的云服务、模板等功能代码。打造不同功能侧重和软件规模的版本。