一.Vim编辑器

1.Vim的六种模式

2.Vim三种常用模式的使用方式,以及三者的切换。打开Vim即默认进入普通模式,按i进入插入模式,按esc从插入模式退出普通模式,再按:进入命令行模式。

              普通模式下游标的移动

按键

说明

h

l

右(小写L)

j

k

w

移动到下一个单词

b

移动到上一个单词

普通模式进入插入模式的方式

命令         说明

i        在当前光标处进行编辑

I        在行首插入

A       在行末插入

a       在光标后插入编辑

o       在当前行后插入一个新行

O      在当前行前插入一个新行

cw    替换从光标所在位置后到一个单词结尾的字符

                命令行模式退出的方式:

命令

说明

:q!

强制退出,不保存

:q

退出

:wq!

强制保存并退出

:w <文件路径>

另存为

:saveas 文件路径

另存为

:x

保存并退出

:wq

保存并退出

普通模式下退出vim

普通模式下输入Shift+zz即可保存退出vim

3.Vim在普通模式下的删除

命令

说明

x

删除游标所在的字符

X

删除游标所在前一个字符

Delete

同x

dd

删除整行(其实是剪切,后边可以使用p粘贴)

dw

删除一个单词(不适用中文)

d$或D

删除至行尾

d^

删除至行首

dG

删除到文档结尾处

d1G

删至文档首部

4.普通模式下命令的重复执行(1)按.可执行上次命令,可以按多次。(2)数字倍命令:例如8dd,表示删除8行。

5.普通模式下游标的快速跳转(1)以行为单位跳转(2)在一行内,单词单词之间,或者字母字母之间的跳转

            1.行间跳转(ctrl+o可以回到光标上次所在位置)

命令

说明

nG(n Shift+g)

游标移动到第 n 行(如果默认没有显示行号,请先进入命令模式,输入:set nu以显示行号)

gg

游标移动到到第一行

G(Shift+g)

到最后一行

            2.行内跳转

普通模式下使用下列命令在行内按照单词为单位进行跳转

命令

说明

w

到下一个单词的开头

e

到下一个单词的结尾

b

到前一个单词的开头

ge

到前一个单词的结尾

 0或^

到行头

$

到行尾

f<字母>

向后搜索<字母>并跳转到第一个匹配的位置(非常实用)

F<字母>

向前搜索<字母>并跳转到第一个匹配的位置

t<字母>

向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)

T<字母>

向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

7.普通模式下的复制和粘贴,剪切和粘贴

  • 普通模式中使用y复制

    • 普通模式中,yy复制游标所在的整行(3yy表示复制3行)
    • 普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。
    • 普通模式中,y$ 复制至行尾。含光所在处字符。
    • 普通模式中,yw 复制一个单词。
    • 普通模式中,y2w 复制两个单词。
    • 普通模式中,yG 复制至文本末。
    • 普通模式中,y1G 复制至文本开头。
  • 普通模式中使用p粘贴
    • 普通模式中,p(小写)代表粘贴至光标后(下一行)
    • 普通模式中,P(大写)代表粘贴至光标前(上一行)

dd删除命令就是剪切,你每次dd删除文档内容后,便可以使用p来粘贴

8.普通模式下替换和撤销

命令 说明
r+<待替换字母> 将游标所在字母替换为指定字母
R 连续替换,直到按下Esc
cc 替换整行,即删除游标所在行,并进入插入模式
cw 替换一个单词,即删除一个单词,并进入插入模式
C(大写) 替换游标以后至行末
~ 反转游标所在字母大小写
u{n} 撤销一次或n次操作
U(大写) 撤销当前行的所有修改
Ctrl+r redo,即撤销undo(撤销本身)的操作

9.(普通)缩进,(命令行)shiftwidth,(命令行)文本居中靠右靠左调整    

  • 普通模式下输入>> 整行将向右缩进(适用格式化代码)
  • 普通模式下输入<< 整行向左回退
  • 普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数

在命令行模式下,set shiftwidth?可以得出现在时缩进几格,set shiftwidth=12表示自定义缩进12格

ce文本该行居中   ri文本该行居右    le居左

10.普通模式下快速查找

    /字符串,回车    向下查找

   ?字符串,回车     向上查找

   n          下一个出现关键字的地方

   N          上一个出现关键字的地方

  • 普通模式下输入\*向上寻找游标所在处的单词
  • 普通模式下输入\#同上,#是向后(下)找
  • 普通模式下输入g\*同\* ,但部分符合该单词即可
  • 普通模式下输入g\#同\# ,但部分符合该单词即可

11.多文件编辑

1.使用vim编辑多个文件

编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件。另一种就是进入vim后再编辑其他的文件。 同时创建两个新文件并编辑

$ vim 1.txt 2.txt

默认进入1.txt文件的编辑界面

  • 命令行模式下输入:n编辑2.txt文件,可以加!即:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
  • 命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件

2.进入vim后打开新文件

  • 命令行模式下输入:e 3.txt 打开新文件3.txt
  • 命令行模式下输入:e# 回到前一个文件
  • 命令行模式下输入:ls可以列出以前编辑过的文档
  • 命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑
  • 命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
  • 命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件
  • 命令行模式下输入:f 显示正在编辑的文件名
  • 命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt

3.恢复文件

如果因为断电等原因造成文档没有保存,可以采用恢复方式,vim -r进入文档后,输入:ewcover 1.txt来恢复

$ vim -r 1.txt

12.可视模式

  • 在普通模式下输入v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。
  • 在普通模式下输入Shift+v(小写),进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v就可以取消选取。
  • 在普通模式下输入 Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v取消选取。
  • 在普通模式下输入d删除选取区域内容
  • 在普通模式下输入y复制选取区域内容

13.视窗操作

在命令行模式下输入:new 打开一个新的vim视窗,并进入视窗编辑一个新文件。分别在不同视窗的命令行模式下输入:q!退出多视窗编辑。

  • 命令行模式下输入:sp 1.txt 打开新的横向视窗来编辑1.txt
  • 命令行模式下输入:vsp 2.txt 打开新的纵向视窗来编辑1.txt
  • 普通模式下Ctrl-w s 将当前窗口分割成两个水平的窗口
  • 普通模式下Ctrl-w v 将当前窗口分割成两个垂直的窗口
  • 普通模式下Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
  • 普通模式下Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗
  • 普通模式下Ctrl-w j 移至下面视窗
  • 普通模式下Ctrl-w k 移至上面视窗
  • 普通模式下Ctrl-w h 移至左边视窗
  • 普通模式下Ctrl-w l 移至右边视窗
  • 普通模式下Ctrl-w J 将当前视窗移至下面
  • 普通模式下Ctrl-w K 将当前视窗移至上面
  • 普通模式下Ctrl-w H 将当前视窗移至左边
  • 普通模式下Ctrl-w L 将当前视窗移至右边
  • 普通模式下Ctrl-w - 减小视窗的高度
  • 普通模式下Ctrl-w + 增加视窗的高度

14.文档加密

    vim -x file1

15.在vim命令行模式状态下执行外部命令

在命令行模式中输入!可以执行外部的shell命令

    :!ls 用于显示当前目录的内容

    :!rm FILENAME用于删除名为 FILENAME 的文件

    :w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件

16.vim中的查看帮助

  • 普通模式下F1打开vim自己预设的帮助文档
  • 命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件

17.Vim的功能设定

1.vim的功能设定(目前不要动这个文件,不知道怎么改)

可以在编辑文件的时候进行功能设定,如命令行模式下输入:set nu(显示行数),设定值退出vim后不会保存。要永久保存配置需要修改vim配置文件。 vim的配置文件~/.vimrc,可以打开文件进行修改,不过务必小心不要影响vim正常使用

2.获取目前的设定

  • 命令行模式下输入:set或者:se显示所有修改过的配置
  • 命令行模式下输入:set all 显示所有的设定值
  • 命令行模式下输入:set option? 显示option的设定值
  • 命令行模式下输入:set nooption 取消当期设定值

3.set功能的说明

  • 命令行模式下输入:set autoindent(ai) 设置自动缩进
  • 命令行模式下输入:set autowrite(aw) 设置自动存档,默认未打开
  • 命令行模式下输入:set background=darklight,设置背景风格
  • 命令行模式下输入:set backup(bk) 设置自动备份,默认未打开
  • 命令行模式下输入: set cindent(cin) 设置C语言风格缩进

18.补充 

set nu 显示行号

:set ai 自动缩行

:set ts=4 设置一个 TAB 键等于几个空格

移动光标

[[ 转到上一个位于第一列的"{"

]] 转到下一个位于第一列的"{"

{ 转到上一个空行

} 转到下一个空行

gd 转到当前光标所指的局部变量的定义

二.gcc编译器

1.gcc 支持编译的一些源文件后缀名

后缀

源文件

.c

C语言源文件

.C .cc .cxx

C++源文件

.m

Object-C源文件

.i

经过预处理后的C源文件

.ii

经过预处理后的C++源文件

.s .S

汇编语言源文件

.h

预处理文件(头文件)

.o

目标文件

.a

存档文件

gcc 编译程序的流程

预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp

编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl

汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as

链 接:gcc hello.o –o hello ;gcc -o 调用ld

编译过程比较难记,我们简化一下,前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”,这样记忆起来就容易多了

注意:

  1. Linux的可执行文件,只需向其分配x(可执行)权限即可 sudo chmod u+x excutefile
  2. 作为Linux程序员,我们可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)

2.体验:用gcc编译一个经典的hello

先使用Gvim编辑C语言代码,保存为hello.c

gcc 文件名 -o 名字(随便取的代替前者的名字,因为前者是C语言源文件)  编译

./名字(刚刚随便取的名字)  执行

3.gcc的细分三步

$ gcc -E hello.c -o hello.i

首先gcc会调用预处理程序cpp,展开在源程序中定义的宏(上例:#include <stdio.h>)

hello.i这是一个经过预处理器处理之后的C源文件

gcc的-E参数可以让gcc在预处理结束后停止编译过程。

$ gcc -c hello.i -o hello.o

第二步,将hello.i编译为目标代码,gcc默认将.i文件看成是预处理后的C语言源代码,因此它会直接跳过预处理,开始编译过程。

o文件它已经是二进制文件了

Tips:

  1. 请记住,gcc预处理源文件的时候(第一步),不会进行语法错误的检查
  2. 语法检查会在第二步进行,比如花括号不匹配、行末尾没有分号、关键字错误......

gcc hello.o -o hello

第三步,gcc连接器将目标文件链接为一个可执行文件,一个大致的编译流程结束

4.有函数调用的gcc

现在很多软件都是采用的模块化开发,通常一个程序都是有很多个源文件组成,相应的就形成了多个编译单元。gcc能够很好的处理这些编译单元,最终形成一个可执行程序

三.调试器gdb

1.gdb的功能

  1. 启动程序,可以按照用户自定义的要求随心所欲的运行程序。
  2. 可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。
  3. 当程序停住时,可以检查此时程序中所发生的事。
  4. 动态地改变程序的执行环境。

启动gdb的方法有以下几种:

  1. gdb <program> program也就是执行文件,一般在当前目录下。
  2. gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
  3. gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。 gdb启动时,可以加上一些gdb的启动开关,详细的开关可以用gdb -help查看。下面只列举一些比较常用的参数: -symbols <file> -s <file> 从指定文件中读取符号表。 -se file 从指定文件中读取符号表信息,并把它用在可执行文件中。 -core <file> -c <file> 调试时core dump的core文件。 -directory <directory> -d <directory> 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

先使用gcc -g gdb.h -o testgdb生成可使用gdb调试的testgdb文件

gdb testgdb 开启gdb调试器

(gdb) l      键入 l命令相当于list命令,从第一行开始列出源码:

(gdb) break 16 <-------------------- 设置断点,在源程序第16行处。

(gdb) break func <-------------------- 设置断点,在函数func()入口处。

(gdb) info break <-------------------- 查看断点信息。

(gdb) r <--------------------- 运行程序,run命令简写

(gdb) n <--------------------- 单条语句执行,next命令简写。

(gdb) c     <--------------------- 继续运行程序,continue命令简写。

(gdb) p I    <--------------------- 打印变量i的值,print命令简写。

(gdb) bt     <--------------------- 查看函数堆栈。

(gdb) finish <--------------------- 退出函数。

(gdb) q     <--------------------- 退出gdb。

gdb programm(启动GDB)

b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)

run 开始运行程序

bt 打印函数调用堆栈

p 查看变量值

c 从当前断点继续运行到下一个断点

n 单步运行

s 单步运行

quit 退出GDB

  • display 跟踪变量值的改变
  • until 跳出循环
  • finish 跳出函数
  • help 帮助

四.文件管理器Makefile

1.Makefile的作用:

一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作(因为makefile就像一个shell脚本一样,可以执行操作系统的命令)。

makefile带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。make是一个命令工具,是一个及时makefile中命令的工具程序。

make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。

2.Makefile的使用:

首先vim Makefile

Makefile的内容,一般写法:

test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......

例:

test: prog.o code.o

(这里是按tab键)        gcc prog.o code.o -o test

prog.o: prog.c code.h

gcc -c prog.c -o prog.o

code.o: code.c code.h

gcc -c code.c -o code.o

clean:

rm -f *.o test

$ make

执行./test查看结果

make clean就会去执行rm -f *.o test这条命令,完成 clean 操作。

3.带宏的Makefile

Makefile还可以定义和使用宏(也称做变量),从而使其更加自动化,更加灵活,在Makefile中定义宏的格式为:

macroname = macrotext

使用宏的格式为:

$(macroname)

问题:

1.在实验时使用>>也并没有看出来它可以格式化代码,只看到向右移动了很多格。

转载于:https://www.cnblogs.com/angelahxy/p/4839577.html

信息安全系统设计基础第三周学习总结—20135227黄晓妍相关推荐

  1. 信息安全系统设计基础第六周学习总结—20135227黄晓妍

    第四章 ISA 指令集体系统结构:一个处理器支持的指令和指令的字节级编码. 不同的处理器家族有不同的ISA. Y86 本章定义的一个简单的指令集.包括各种状态元素.指令和它们的编码.一组编程规范和异常 ...

  2. 信息安全系统设计基础第三周学习总结

    信息的表示和处理 一.gcc 编译 使用C99特性时 gcc -std=c99 xxx.c 实验楼环境为64位,编译为32位机器码: gcc -m32 xxx.c 二. 教材导读 三种数字: 无符号( ...

  3. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  4. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  5. 20135203齐岳 信息安全系统设计基础第十三周学习总结

    20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...

  6. # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结

    20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...

  7. 20135219洪韶武——信息安全系统设计基础第五周学习总结

    信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时  一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...

  8. 20145227《信息安全系统设计基础》第一周学习总结

    20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...

  9. 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...

最新文章

  1. 带你3分钟学Python变量和数据类型
  2. soalris小記...
  3. NeHe教程Qt实现——lesson06
  4. 有kotlin中的Android项目编译出现 Unresolved reference: R
  5. ubuntu 安装 Sublime Text 2
  6. WebApi 接口参数不再困惑:传参详解
  7. ups计算软件_浅析UPS与蓄电池与逆变器的区别
  8. virtual box中安装Mac OS后设置分辨率
  9. 官宣,C罗回归曼联,签约两年,豪华阵容曝光
  10. linux命令mysql启动,linux中mysql启动服务命令
  11. 基于ShardingSphere的Encrypt-JDBC数据脱敏实战
  12. C++的O2、O3到底是个什么鬼
  13. 完美解决浏览器主页被hao123劫持,打开浏览器时自动进入hao123主页怎么办
  14. 深入浅出学算法008-韩信点兵
  15. 苹果笔的代替笔有哪些?Ipad好用电容笔测评
  16. SpringBoot学习笔记【基础】
  17. 贵州支教之第三天(11月9日)
  18. 【精选实践】爱奇艺实用数据库选型树:不同场景如何快速选择数据库?
  19. MOS管自锁保护电路功能的制作方法-KIA MOS管
  20. oracle10503事件,library cache: mutex X等待事件, blocker session on cpu

热门文章

  1. 极限学习机和支持向量机_极限学习机I
  2. 如果给你机会,阿里巴巴的中层职位和马云的专属司机,你怎么选?
  3. PV PVC - 每天5分钟玩转 Docker 容器技术(150)
  4. 基础004_V7-DSP Slice
  5. 揭穿现金贷的真实面目
  6. “全裸”:看向京的雕塑艺术展
  7. PIC32单片机harmony开发环境 - i2c例程和代码分析
  8. java js引擎,Java8 Nashorn JavaScript引擎
  9. LeetCode 240. 搜索二维矩阵
  10. 《Neural Networks for Machine Learning》学习一