基本概念(5)——文本编辑器
文本编辑器用来编写代码编译流程一般是
- coding,任意文本编辑器即可,哪怕是windows记事本
- build,使用编译器(或者build 工具make、cmake等)编译成可执行文件
- debug,需要编译的时候带有调试信息
编程常用的文本编辑器有vscode、sublime、vim、emacs等等,这些是独立的文本编辑器,核心作用就是文本编辑,还有一种是ide自带的文本编辑器,比如vs、qt creator都有。
vscode
vscode作为文本编辑器针对编程,有两个扩展的功能(个人认为比较核心的),一是“任务”,二是“启动器”
tasks
相当于脚本,例如编写完代码,如果手动执行编译过程会很繁琐,写成脚本(例如sh文件)那么用脚本执行就会方便,vs code自己有一种语法让我们方便的执行外部命令
tasks.json文件就相当于.sh或.bat文件
1、比如我们可以创建一个task名叫cmake,然后启动cmake task的时候让他调用cmake去生成ninja.build或者Makefile
2、再定义一个task叫make,去执行make Makefile
或者可以把这两个task合成一个就叫build。
首先准备工程代码
header\main.h:
int a = 100;
CMakeLists.txt:
cmake_minimum_required (VERSION 3.0)
INCLUDE_DIRECTORIES(./header)
project (main)
INCLUDE_DIRECTORIES(./header)
add_executable(M main.cpp)
main.cpp
#include <iostream>
#include "main.h"
int main(){
std::cout << "4554" << std::endl;
std::cout << a << std::endl;
return 0;
}
vscode需要安装的插件有:cmake、c/c++
然后ctrl shift p创建一个任务
{
"version": "2.0.0",
"tasks": [
{
"label": "cmake",
"type": "shell",
"command": "cmake -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Debug",
"group": "build",
"problemMatcher": []
},
{
"label": "ninja",
"type": "shell",
"command": "ninja -C .\\build",
"group": "build",
"dependsOrder": "sequence",
"dependsOn": [
"cmake"
],
"problemMatcher": []
},
{
"label": "run",
"type": "shell",
"command": ".\\build\\M.exe",
"group": "build"
}
]
}
第一个任务是cmake,组build
第二个任务是ninja,组也是build
第二个任务中,这部分胆码代表执行之前需要先执行cmake任务
"dependsOrder": "sequence",
"dependsOn": ["cmake"],
第三个任务是执行exe文件
ctrl shift p
运行任务
选择 ninja
两个任务被执行,得到编译后的exe
launch
启动器,就是调用一个exe运行
比如调试
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"preLaunchTask": "ninja", //运行之前先执行ninja 这个task(由于ninja又需要cmake task,所以执行顺序是cmake task、ninja task、launch,其实就是先编译后调用exe)
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/M.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
}
]
}
C/C++插件
cmake
功能上图都标出来了
IntelliSense功能可以ctrl shift p,输入configuration:
然后就会得到一个.vscode文件夹和一个配置文件
编辑配置也可在UI界面,更友好
cmake插件
第一个插件用于语法高亮 代码提示功能
第二个可以帮我build,比如下面的设置
每当去保存一下CMakeLists.txt文件的时候,都会cmake执行一次的,相当于简化了自定义一个task
使用cmake tools插件,只要保存一下CMakeLists.txt文件,就会执行cmake,然后task可以只执行ninja -C build
或者cmake --build build
就可以编译生成了
其他插件
在我另一文章中有 https://www.cnblogs.com/feipeng8848/p/12548678.html
关于vscode的vim插件快捷键问题,有些快捷键比如crtl f,在vscode中非常实用,但是vim插件装上之后就会截胡所有快捷键,可以在这里设置:
vim
vim自带帮助文档,Windows系统的帮助文件在C:\Program Files (x86)\Vim\vim82\doc
,打开vim输入:h也可以查看 help.txt
中文翻译版本
https://github.com/yianwillis/vimcdoc
https://yianwillis.github.io/vimcdoc/doc/help.html
一些配置可以看这个 https://www.cnblogs.com/feipeng8848/p/11142146.html
vim有三个模式:normal、insert、Ex(命令)
normal模式
normal模式的操作逻辑是:{operator} + {motion},可以加数字,例如
operator
operator(操作符)只有这几个,可以在vim中通过 :h operator
查看
motion
motion(动作)其实就是可操作对象,可以是直接对象
比如w代表一个单词,也可以是一个能够确定操作对象的表达式(类似于编程里的函数)
是一个操作+直接对象来的到motion,比如fw
假设有字符串
移动
hjkl,wbe(ge)
HLM,大写,当前屏幕的高处、低处、中间:
zz,移动光标之后光标可能在最底下一行,zz之后光标所在的行就会在屏幕最中央
zt,最顶上
zb,最底下
这几个命令可以配合HML等滚屏
/向后查找
?向前查找
vim寄存器
寄存器的操作模式是:{寄存器}
+{option}
"0yy "0 表示使用寄存器0,yy表示复制一行
vap"0y vap选中,"0寄存器,y复制
"0p "0表示使用寄存器0,p表示粘贴
visual 操作
1、小写v:字符选择
2、shift+v(大写V):行选择
3、ctrl+v:矩形选择 ,windows版本是ctrl-q
选中之后可以执行操作
4、选中之后,按下小写o能切换选取的活动端
ggVG ——选择全文
V——选择一行
5V——向下选择5行(包括当前行)
删除函数体
使用va{并不能完整的删除函数,有两种方案:
1、光标在函数体内:v{o}d
原理如下
v enter visual mode
{ move to first brace in function (may have to press more than once)
o exchange cursor from top to bottom of selection
} extend selection to bottom of function
d delete selected text
2、先找到函数开头,然后执行:v}d
快捷键
编辑模式
i I o O a A c等可以进入编辑模式
在vim中可以使用 :h ins-special-keys 查看所有插入模式下的快捷键
<C-Left/Right><S-Left/Right>都可以在编辑模式下跳跃单词(Ctrl+left,Shift+left)
<C-p>单词猜想,输入模式下,打到一半的单词可以按下ctrl+p提示
<C-a> 输入上次在插入模式下输入的内容
<C-o> 切换到“插入-普通”模式,意思就是切换回普通模式,执行一次操作后自动切换回插入模式
<C-w> 删除前一个单词,输错的时候非常好用。
<C-h> 删除前一个字符
<C-u> 删除到行首
<C-r> 粘贴寄存器中的内容,例如 <C-r>0 粘贴寄存器0中的内容, <C-r>+ 粘贴系统粘贴板(寄存器+)中的内容
这个快捷键同样可以适用于 Ex命令模式,例如在文本中y了一个单词,执行 :/<C-r>0 就可以查询这个单词
表达式寄存器(等于号=)的使用,比如 <C-r>=5*5<CR> 这个命令会直接插入5乘以5的结果
<C-j> 下方插入新行,类似普通模式下的o
<C-m> 同上
<C-y> 复制上一行的一个字符
<C-x><C-e> 按下ctrl x,然后按下ctrl e,下翻一行,接着一直按ctrl e,一直下翻。control x详单与进入了插入模式里的scroll
<C-x><C-y>上翻一行
<C-x><C-u>下翻半屏
<C-x><C-d>上翻半屏
Command-line
命令行模式(mode)包括如下几个模块(pattern):Ex commands、search patterns和filter commands
手册原文:
Ex commands
冒号之后进入Ex模式,比如保存并关闭命令:wq<CR>
<CR>
是指回车键
Ex模式的基本公式是(以copy命令为例子) :[range]copy{address}
比如有如下代码,我要把60-64行的代码复制到45行下方,可以执行命令 :60,64t45
t是copy的同义词,co也是
如果在可视化模式下选中了一部分文字,然后按下:
进入Ex模式,那么模式会自动填充:'<,'>
这代表选中区域。
:'<,'>t45
就代表把选中区域复制到45行下方
Ex模式下,支持当前目录的概念(类似Linux),cd、pwd命令是可用的
:ls 查看当前buffer中已经打开的文件(:buffers也可以)
:buffer n 打开bufer中序号代表的文件
:e filename.txt 打开一个新的文件到buffer中
:bn 切换到n代表的文件到当前显示屏
:terminal 打开终端