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

  • 相关阅读:
    hdu 5112 A Curious Matt (水题)
    hdu 5464 Clarke and problem(dp)
    (2)线程优先级、线程安全
    (1)进程与线程
    并发与并行
    (5) 守护线程与线程阻塞
    java线程中断2
    sleep()和wait()的区别
    java线程中断
    java创建线程的三种方式及其对比
  • 原文地址:https://www.cnblogs.com/feipeng8848/p/14356177.html
Copyright © 2020-2023  润新知