基本概念(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。

首先准备工程代码

headermain.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)Vimvim82doc,打开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 打开终端

search pattern

filter commandsv

原文地址:https://www.cnblogs.com/feipeng8848/p/14356177.html