【命令行魔法:掌握Linux基础工具开发的独门技艺】(一):https://developer.aliyun.com/article/1425528
复制
- 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
- 「#yw」:复制#个字到缓冲区
- 「yy」:复制光标所在行到缓冲区。
- 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
- 「#p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
- 「yy + p」:复制当前行并在当前行的下一行进行粘贴。
- 「n + yy + p」表示拷贝yy复制光标所在行的6行文字,并在下一行粘贴。
大小写快速切换
- 「shift + `」:大小写快速切换
替换
- 「r」:替换光标所在处的字符。
- 「shifit + r = R」:切换到替换模式,替换光标所到之处的字符,直到按下「ESC」键为止。
撤销上一次操作
- 「u」:如果您误执行一个命令,可以马上按下
- 「u」,回到上一个操作。按多次“u”可以执行多次恢复。
- 「ctrl + r」: 撤销的恢复
更改
- 「cw」:更改光标所在处的字到字尾处
- 「c#w」:例如,「c3w」表示更改3个字
跳至指定的行
- 「ctrl」+「g」列出光标所在行的行号。
- 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
- 「shift + 3 = #」:高亮要查找的多次使用的函数名(批量选中),「n」:下一个要查找的函数名
4. vim末行模式命令集操作
在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。
列出行号
- 「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。
- 「set nonu」: 输入「set nonu」后,会取消文件中的每一行前面的行号。
- 「vim test.c +5」:让vim在打开的时候光标设置到第5行
跳到文件中的某一行
- 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。
查找字符
- 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。
- 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。
- 问题:/ 和 ?查找有和区别?操作实验一下
保存文件
- 「w」: 在冒号输入字母「w」就可以将文件保存起来,如果无法写入,可以在「w」后跟一个「!」强制写入。
- 「!command」:指令执行完后,输入q,再输入enter即可再次进入vim
离开vim
- 「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
- 「wq」/「shift zz = ZZ(在命令模式下使用)」 :一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
- 「ctrl + ww」:多窗口光标切换
- 「vs filename」:对比文件光标在那一个界面,我们就正在编辑哪一个界面,底行也是这样。
- 「vim filename + n」:启动vim设置光标的位置在第n行
- 「ctrl + v」:切换为视图模式,按下「j」选择区域,再输入「shift + i = I」切换为插入模式,然后在输入「//」,按入「esc」即可批量化注释。
- 「ctrl + v」:切换为视图模式,按下「j」选择区域,在输入d,即可批量化取消注释。
5. 简单vim配置
配置文件的位置
- 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
- 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下, 通常已经存在一个.vimrc文件,如果不存在,则创建之。
- 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~
- 打开自己目录下的.vimrc文件,执行 vim .vimrc
常用配置选项,用来测试
- 设置语法高亮: syntax on
- 显示行号: set nu
- 设置自动缩进:set autoindent 和 set cindent
- 设置统一缩进为4:set softtabstop=4 和 set shiftwidth=4
inoremap ( ()<ESC>i "设置(自动补全 inoremap [ []<ESC>i "设置[自动补全 inoremap { {}<ESC>i "设置{自动补全 inoremap < <><ESC>i "设置<自动补全 inoremap ' ''<ESC>i "设置'自动补全 inoremap " ""<ESC>i "设置"自动补全 set nu "设置显示行号 set tabstop=2 "设置tab健的长度为2 set ruler "设置标尺 set ai "设置文本高亮 set autoindent "设置自动缩进(与上一行的缩进相同)
使用插件
要配置好看的vim,原生的配置可能功能不全,可以选择安装插件来完善配置,保证用户是你要配置的用户,接下来:
在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 "不推荐" 直接在 root 下执行):curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh,需要按照提示输入 root 密码. 您的 root 密码不会被上传, 请放心输入.
然后在bash命令行窗口输入:source ~/.bashrc就可以使用配置好的vim了。
参考资料
Vim从入门到牛逼(vim from zero to hero)
历史问题:当我们用sudo进行指令提权为什么还是不能执行?
我们可以想一下,我们上面对指令进行sudo提权,是输入自己的密码,输入自己的密码就可以执行root的指令,这样就会有很大的风险。所以我们在创建用户的时候默认在./etc/sudoers/下没有添加到白名单中,我们可以先切换root的身份,并进入root的家目录下
然后我们vim打开./etc/sudoers/文件,我们发现文件时空白的,并且文件不可被允许操作
这是因为此时我们的文件只对root是可读的,对于其他用户是没有任何权限的,并且root用户也只有对该文件的可读,所以我们上面才要切换为root账号。
在光标处下添加当前用户
随后我们进行wq保存并退出,发现并不行,这是因为我们的root对于这个文件也只有读权限,并没有写权限。
所以我们就可以通过w!进行强制写入和q!强制退出就可以了,然后我们再执行sudo进行指令提权
3.Linux编译器-gcc/g++使用
C语言使用gcc(推荐)/g++编译,C++只能使用g++编译。
1. 背景知识
- 1. 预处理(进行宏替换)
- 2. 编译(生成汇编)
- 3. 汇编(生成机器可识别代码)
- 4. 连接(生成可执行文件或库文件)
2. gcc如何完成
格式 gcc [选项] 要编译的文件 [选项] [目标文件]
我们先来写一段代码,方便后续的观察
预处理(进行宏替换)
- 预处理功能主要包括头文件展开,宏替换,条件编译,去注释等。
- 所谓的头文件展开,本质就是在预处理的时候,将头文件的内容拷贝至源文件。
- 预处理指令是以#号开头的代码行。
- 对于条件编译,可通过给编译器传递不同的宏值,来进行对代码的的动态裁剪!
- 实例:gcc code.c -o code.exe -D0 VERSION=1
- 实例: gcc –E code.c –o code.i
- 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程,并把预处理的结果打印在
- 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
编译(生成汇编)- 计算机只认识二进制 - C语言->汇编语言
- 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查 无误后,gcc 把代码翻译成汇编语言。
- 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
- 实例: gcc –S code.i –o code.s
汇编(生成机器可识别代码)汇编语言->可重定位二进制文件:不能被执行的
- 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
- 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
- 实例: gcc –c code.s –o code.o
【命令行魔法:掌握Linux基础工具开发的独门技艺】(三):https://developer.aliyun.com/article/1425542