学习记录:第一周day02笔记

发布时间 2023-03-22 21:10:40作者: 菊里菊气

vim文本编辑器:

可以直接在终端下采用纯键盘操作的一款文本编辑器(号称编辑器之神,可以升级、可以扩展)

基础用法:

1、进入vim:

输入 vim file.c 文件存在则打开,否则新建并打开

2、输入i:

进入编辑模式,编写代码

3、保存并退出

按Esc,输入ZZ保存并退出

 

vim三大模式:

正常模式:(打开文件时的默认模式)

一般用于阅读文件,或者用于快捷键对文件快速修改

编辑(插入)模式:

一般用于输入内容、编辑文件

行底(命令)模式:

一般用于对vim的临时配置、或者执行一些高级操作

模式之间的切换:

<= 按: 输入i =>

行底 正常 插入

按Esc => <= 按Esc

 

1、正常模式下常用操作:

光标移动

h左 j下 k上 l右

gg 光标跳转到第一行

G 光标跳转到最后一行

n+Enter 光标向下跳转n行

n- 光标向上跳转n行

nG 直接跳转到第n行

vim file.c n 从第n行进入文件

删除操作

dd 删除光标所在的一行代码

ndd 删除n行

x 删除一个字符

nx 删除n个字符

dw/de 删除一个连续字符串(de不删空格)

d^ 从当前光标删除到行首

d$ 从当前光标删除到行尾

dgg 从当前光标删除到第一行

dG 从当前光标删除到最后一行

复制代码:

y 复制选中的高亮文本

yy 复制光标所在的一行代码

nyy 复制n行代码

p 粘贴到当前光标(下一位置)下一行

P 粘贴到当前光标上一行

移动代码

删除的内容还存储在粘贴板上,使用p/P可以粘贴出来,从而达到移动代码的目的

xp 相当于交换两个字符

替换代码:

r 替换光标所在的一个字符(按下r后,输入要替换的字符)

cw 替换一个连续字符串(就是删除字符串后,进入插入模式)

更改类命令格式:c [number] motion

R 进入替换模式(insert键切换插入与替换)

撤销操作:

u 撤销上一次操作

Ctrl+r 取消上一次的撤销操作

其它操作:

输入%可以查找配对的括号)、]、}(要将光标移动到括号处)

 

2、插入模式常用操作

进入插入模式的方式

i 在当前光标前进入插入模式(常用)

I 光标跳转到行首进入插入模式

a 在当前光标后进入插入模式

A 光标跳转到行尾进入插入模式(常用)

o 当前行的下面插入一行空白行,再进入插入模式(常用)

O 当前行的上面插入一行空白行,再进入插入模式

插入模式下的操作

Ctrl+p/n 自动补全,变量名\函数名\宏...

Ctrl+i 相当于Tab键

Ctrl+j 相当于Enter键

Ctrl+c 相当于ESC键

vim自定义功能:

Ctrl+z 保存并退出

Ctrl+x 保存并编译并运行,且按任意键可以回到vim中

Ctrl+p 这是正常模式下的Ctrl+p,自动添加头文件和main函数

 

3、行底模式下的操作

:w 写入

:q 退出(未作修改时可以退出)

:q! 强制退出

:wq 保存并退出(:wq还会保存配置和属性,ZZ只会保存文本)

:x 保存并退出

:X 给文件加密

:set key= (将密码设为空格,相当于取消密码)

注意:必须:wq才能生效

:!cmd(命令) 在vim中执行cmd系统命令(看完结果后,按任意键可以返回vim)

:/key 查找关键字key,n下一个,N上一个,Ctrl+o回到之前的位置,Ctrl+i跳转方向相反

?代替/是逆向查找

:%s/old/new 把old关键字替换为new

:set nu 显示行号

:set nonu 取消行号

:> n行代码向右缩进一次

:< n行代码向左缩进一次

: r filename 向当前文件中插入另外的文件内容

除此之外还可以读取外部命令的输出,例如,:r !ls可以读取ls命令的输出

:w filename 将当前vim中正在编辑的文件保存到名为filename的文件中

按下v后移动光标可以选择区域,然后输入:w filename可以将选中部分内容保存在文件filename中

命令补全功能:

输入:e

按Ctrl+d键,vim会显示以e开始的命令列表

<Tab>键,vim会补全命令

注意:行底模式下对vim进行配置只能是临时有效,关闭后会失效,如果想长期有效需要对vim的配置文件(~/.vimrc)进行配置

 

如何配置vim?

1、vim ~/.vimrc 打开配置文件

2、写完之后,回到正常模式,ZZ退出

3、下次打开vim就生效了

 

注意:vimtutor是vim提供的一个学习手册

 

 

 

 

 

C语言简介

BCPL->New B->C->UNIX->Minix->Linux->gcc

C语言诞生于1971-1973年,美国贝尔实验室,肯.汤姆逊和丹尼斯.里奇

C语言是专门为了编写操作系统而诞生的语言,天生适合对硬件编程,以运行速度快而著称,而且C语言非常适合编写数据结构和算法

C语言出现的太早,所以有很多缺陷,因为没有想到普通人也可以编程(所以没有改),但是很多前辈总结避免这些缺陷或陷阱的经验

《C语言三剑客》==>《C陷阱与缺陷》《C与指针》《C语言程序设计(第二版)》

C语言的语法非常自由,自由意味着危险,自由源自自律

C89语法标准,旧的系统中的默认标准

C99语法标准,对C语言的扩展和增强 -std=gnu99

C11语法标准,全新的升级

 

 

 

C语言第一个程序

 #include<stdio.h>
 程序员所编写的代码都不是标准的C代码,需要一段程序翻译成标准C代码,负责翻译的程序叫预处理器,翻译过程叫预处理,被翻译的语句叫做预处理指令,以#开头的语句都是预处理指令
     翻译有很多种方法:
  #include 的功能是把一个头文件导入(拷贝)到当前位置
    #include <xxx.h>
    从系统指定的路径下查找头文件
    #include "xxx.h"
    先从当前工作路径查找,如果找不到再从系统指定的路径查找并加载
 stdio.h
     头文件:以.h结尾,里面存储的是一些辅助性的代码,绝大多数都是函数的声明
     源文件:以.c结尾,里面存储的是实际的功能性代码
  C语言标准委员会为C语言以函数形式提供的一些基础功能,这些函数都被封装在libc.so,然后通过很多的头文件对不同功能的标准库函数进行了说明stdio.h就是其中之一,常用:stdlib.h string.h
 int main()
     C语言中函数是管理代码的最小单元,一个函数就是一个功能的实现
     main函数是程序执行的入口,有且只有一个
     int是一种数据类型,表示main函数的执行结果是一个整数值
     return的作用:
    1、返回一个执行结果给函数调用者
    正数 出现异常(别人导致,不是程序本身)
    0  一切正常
    负数 出现错误(程序本身出错)
    2、提前结束函数
    main函数遇到return语句程序结束
     main函数是由操作系统调用的,所它的返回值给了操作系统,反映了程序是如何结束的
 {
     printf("Hello World\n");
     return 0;
 }
 printf/scanf 是标准库的输入输出函数,一般用于调试代码 printf("--------\n")
 转义字符:键盘上有一些不好直接表示的符号,通过一些特殊字符搭配来表示,这种字符搭配称为转移字符
  \n 换行
     \t 制表符,相当于Tab
     \a 铃响
     \b 光标后退一个字符
    printf("\b \b")退格效果
     \r 光标回到行首
     %% 显示一个%
    \\ 显示一个\
 注意:C语言是以分号(英文输入法)作为一行代码的结束标志,使用大括号来划分代码
 

编译器:

负责把人能看懂的文本文件,翻译成计算机能看得懂的二进制文件,由预处理器、编译器、链接器组成

gcc编译器是GNU社区为了编译Linux内核代码而开发的一款免费的编译器,默认语法标准是C99或者C89

常用的编译参数

-E 只显示预处理的结果

-S 生成汇编文件

-c 只编译,不链接

-o 指定编译结果的名字

-I 指定头文件的加载路径 -I path

-l 指定要使用的代码库 -lm导入数学库

-Wall 尽可能多地产生警告信息

-Werror 把警告当作错误处理

-std 设置编译语法标准 -std=gnu99/89

 

C代码如何从源文件变成可执行文件的过程

源文件到可执行文件

1、预处理:把源文件翻译成预处理文件

gcc -E xxx.c 显示预处理结果到终端,不会生成任何文件

gcc -E xxx.c -o xxx.i 把预处理的结果存储到xxx.i预处理文件中

2、编译:把预处理文件翻译成汇编文件

gcc -S xxx.i 生成以.s结尾的汇编文件

3、汇编:把汇编文件翻译成二进制的目标文件

gcc -c xxx.s 生成以.o结尾的目标文件

4、链接:把若干个目标文件合并到一个可执行文件

gcc a.o b.o c.o ... 生成a.out可执行文件

 

 

C语言中的文件类型:

.c 源文件

.h 头文件

.h.gch 头文件的编译结果文件,会被优先使用

.i 预处理文件

.s 汇编文件

.o 目标文件

.so 共享库文件

.a 静态库文件