zoukankan      html  css  js  c++  java
  • 后端开发工程师的开发环境配置(Vscode+C/Go/Python等)

    前言

            我是一名后端开发工程师,主要语言是C、Go、Python。早年做C开发的时候都是在windows下开发,一直使用的是soure insight,尤其是时隔多年更新的4.0版本解决了中文乱码等问题,用起来更是得心应手。后来转到Mac下开发,虽然可以用wine运行windows程序,但总感觉别扭,也是时候做一些新的尝试了。

            为了家里和公司开发环境的统一,对开发工具的要求首先就是要跨平台,slickedit、clion、understand、sublime、atom我都尝试过,最终我选择了vscode。主要几个原因:支持多种语言开发;官方支持中文;插件安装方便;完全免费(公司不允许安装盗版软件);运行速度快;支持远程开发;颜值较高。萝卜白菜各有所爱,适合自己的才是最重要的。

            vscode不是IDE,需要安装各种依赖的插件和配置才能很好的工作,因此和soure insight的开箱即用,适应起来需要些时间。经过这几年的发展vscode以及很强大了,但作为C开发它还是有一些不足,例如不能像soure insight显示函数调用关系图(注,这里说的是关系图,查找函数在哪里被调用是没问题的),目前我是使用doxygen+graphviz工具作为补充工具。understand在这方面做的比较好,如果在家里看代码的话我也会配合着使用。

    本文将以windows下为例做配置说明,其他系统下类似。最后,欢迎大家讨论和转载,本文也会持续更新。转载请注明来源:https://www.cnblogs.com/realjimmy/p/12990433.html

    一、插件安装

    我用到的开发语言包括C、Go、Python、Shell、Lua、Mysql。这是我安装的所有插件,其中Remote是用于远程开发(下面会有专门的章节介绍),Setting Sync用于vscode配置的备份,可在不同设备间同步,其他的根据插件名字基本都能明白其作用,这里就不做过多解释,各位可以根据自己的需求增删插件。

    clipboard

    clipboard

    有的插件还需要安装其他额外的辅助工具,比如在打开c文件时,会自动下载clang-format等工具;打开go文件时会自动安装gotools,需要注意的是gotools安装特别慢,经常一轮安装下来总有几个装不上,不过也没有关系,多试几次总能成功。

    二、各种语言开发环境

    本章节主要是基础开发环境的配置,包括依赖编译工具等,具体的vscode配置会在第三章介绍。

    2.1 C语言开发基础环境

    2.1.1 安装Mingw-w64(仅windows需要)

    编译代码、代码调试都需要用到。

    下载地址:https://sourceforge.net/projects/mingw-w64/files/

    clipboard

    选择适合自己的版本。

    • i686 的是32位版,x86_64 的是64位版
    • posix和win32是os接口类型
    • sjlj/seh/dwarf 是异常处理方案,具体的差异可以自行百度

    seh :支持64位,新,性能比较好

    sjlj :支持64+32位,旧,稳定性好。

    dwarf :支持32位

    我选择,x86_64-posix-seh。安装好后需要配置环境变量,如:C:mingw-w64mingw64in

    2.1.2 安装Clang(仅windows需要)

    语法检查需要用到,编译代码时可以用mingw的gcc,也可以用clang。这里我们直接下载编译好的安装包。

    https://releases.llvm.org/download.html

    clipboard

    2.1.3 添加头文件目录

    我的开发环境是windows下连到linux虚拟机下开发linux程序,因此很多标准库的头文件都会有波浪线报错,需要手动指定一下。

    方法一:指定Mingw-w64里的头文件

    能够去掉波浪线,但是对于printf这类函数的参数提示有点问题。

    方法二(我使用此方法:从linux下拷贝头文件

    例:将下面两个文件夹拷贝到windows下 D:/code/vscode-include/linux-c/usr/include

    /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/

    /usr/include/

    接着我们在vscode的项目里指定头文件(换工作目录了需要重新指定),打开工程目录,打开C文件,选择win32-->编辑配置。

    除了标准库外,项目里的其他头文件如果找不到也可以用这种方式添加。

    clipboard

    clipboard

    指定头文件目录

    clipboard

    2.1.4 编译运行与调试

    1)快速编译运行

    如果是单个.c文件(比如测试代码),右键点run code即可运行(依赖CodeRunner插件)。

    clipboard

    2)使用gdb调试

    涉及两个配置文件,tasks和launch。tasks可以被用来做编译,而launch用来执行编译好的文件。

    首先配置tasks:

    F1,输入tasks,选择配置任务

    clipboard

    我这里配置编译运行单个文件为例,几个注意事项:

    • label:这个任务的名词,一会儿在launch里配置的preLaunchTask(执行前的任务)名称要和这个一直。
    • command:编译执行的命令,我这里写的gcc,也可以是其他编译时要执行的命令。
    • arg:执行命令的参数,这里通过gcc的参数-o指定了编译后可执行文件的路径。
    • cwd:命令的目录,这里指向mingw64的bin命令。

    clipboard

    接着配置launch,

    clipboard

    clipboard

    注意事项:

    • program:指定了运行时的程序,和task对应。
    • miDebuggerPath:指定gdb路径。
    • preLaunchTask:指定运行前的任务,即编译任务,与前面配置的task对应。

    clipboard

    现在可以开始调试代码了,在代码行号左边点击即可打断点,点绿色小三角或是F5开始编译、执行。

    clipboard

    在调试控制台可以输入gdb命令,格式:-exec <command>

    clipboard

    2.2 Go语言开发基础环境

    2.2.1 下载Go安装包

    根据不同操作系统自行下载

    下载地址:

    2.2.2 Go安装

    【windows下部署】

    1)安装注意路径不要有空格和中文,环境变量也会自动配置。

    2)打开cmd输入go version,查看是否安装成功

    3)配置$GOPATH和工作空间

    在系统环境变量中添加$GOPATH变量,表示工作代码空间。

    注:也可以使用go env -w 命令配置,但是如果有环境变量了则会报错。

    在$GOPATH目录下创建以下三个目录

    /src 存放源代码

    /pkg 存放编译文件

    /bin 存放执行文件

    【Linux部署】

    1)解压到/usr/local目录下

    tar zxvf go1.13.4.linux-amd64.tar.gz

    mv go /usr/local/

    2)建立保存go工作目录,将是下载组件的默认路径

    mkdir /root/go_src

    3)设置环境变量

    在root用户下执行 vim /etc/profile命令在末尾添加配置并保存

    export GOPATH=/root/go_src

    export GOROOT=/usr/local/go

    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

    【Mac部署】

    1)下载pkg安装包快速安装
    2)根据shell类型修改,我用的是zsh,因此修改~/.zshrc文件
    vi ~/.zshrc

    export GOPATH=/root/go_src

    export GOROOT=/usr/local/go

    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

    4)重新登录session

    为的是让环境变量生效,验证:
    输入go version能看到版本信息,go env能看到正确的GOPATH路径

    2.2.3 设置代理

    通过go下载第三方库非常慢,可以通过设置代理来加速。
     
    GO111MODULE设置为auto
    这里先设置为auto,待使用中问题解决了在on。可以在got get的时候手动set GO111MODULE=on GOPROXY设置为https://goproxy.cn,direct
    之所以在后面拼接一个direct,如果代理没有找到库,就在原地址里直接查询。
     
    方法一:Go 1.13 及以上(推荐)
    打开你的终端并执行
    go env -w GO111MODULE=auto
    go env -w GOPROXY=https://goproxy.cn,direct
    注:也可以设置GO111MODULE=on,强制开始gomodule功能。如果设置auto,这样会根据目录情况决定gomodule是否开启。
    其他设置代理的方法参考:https://goproxy.cn/

    2.2.4 测试go工具

    第一个go程序

    在工作目录里创建hello.go

    package main import "fmt" func main() { fmt.Printf("hello, world ") }

    1)使用go run直接运行:

    $go run ./hello.go

    2)编译后运行,可执行文件为文件夹名

    go build hello.go

    ./hello 

    2.2.5 dlv调试工具安装

    $ git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve

    或者 go get github.com/derekparker/delve/cmd/dlv

    $ cd $GOPATH/src/github.com/go-delve/delve

    $ make install

    2.3 Python开发环境搭建

    2.3.1 下载安装python

    下载地址:https://www.python.org/downloads/

    根据提示安装即可。

    2.3.2 设置国内pip资源

    国内还有很多pip镜像源,可以根据个人的网络资源自由替换index-url和trusted-host的值。这里设置阿里云作为国内pip资源

    【Linux下的配置文件】
    编辑配置文件$HOME/pip/pip.conf,添加如下内容。如果配置文件不存在直接创建即可。
    我们可以通过以下命令确认$HOME的具体路径echo $HOME
     
    【Windows下的配置文件】
    编辑配置文件%APPDATA%pippip.ini。
    可以通过以下命令确认%APPDATA%的具体路径echo %APPDATA%
     
    【Mac下的配置文件】
    mkdir ~/.pip
    vim ~/.pip/pip.conf
     
    配置文件内容:
    [global]
    index-url = http://mirrors.aliyun.com/pypi/simple
    [install]
    trusted-host=mirrors.aliyun.com
     

    #index-url使用Alibaba的镜像源trusted-host = mirrors.aliyun.com

    #trusted-host标记Alibaba的镜像源服务器为可信赖主机

    2.3.3 安装更好的交互编程工具

    pip install ipython

    3 vscode配置

    3.1 我的配置文件参考

    直接贴出我的配置,部分没有注释的,可以看vscode给出的解释。

    {
        //---------------【GO相关配置】-------------------
        "go.gopath": "D:/code/go",
        "go.goroot": "c:/go",
        "go.formatTool": "goimports", //可选格式化工具,看大家都选这个
        "go.useLanguageServer": true, //不开的话跳转很慢
        "go.lintOnSave": "off", //在保存代码时自动检查代码可以优化的地方,并给出建议
        "go.toolsGopath": "D://code/go", //第三方插件安装位置
        "go.testOnSave": false, //保存时执行go test
        "go.testFlags": [ //-v参数能保证执行go test时有输出
            "-v"
        ],
        //--------------【python相关配置】--------------
        //treu使用IntelliSense引擎,false使用Microsoft Python Analysis Engine
        "python.jediEnabled": true,
        "python.pythonPath": "C:/Users/jimmy/AppData/Local/Programs/Python/Python38/python.exe",
        "python.autoComplete.extraPaths": [
            //设置python的第三方库路径
            "C:/Users/jimmy/AppData/Local/Programs/Python/Python38/Lib/site-packages",
        ],
        "python.autoComplete.addBrackets": true, //自动补全函数带括号
        "python.formatting.provider": "yapf", //格式化引擎
        //--------------【C相关配置】------------------------
        "C_Cpp.updateChannel": "Default", //自动更新插件,设置Insiders为自动更新内部版本
        //c代码格式化方案
        "C_Cpp.clang_format_fallbackStyle": "{BasedOnStyle: LLVM, IndentWidth: 4, ColumnLimit: 0}",
        //---------------【配置文件同步】---------------------
        "sync.gist": "xxxx",//根据实际情况配置,这里不用手动配置,通过界面配置后会自动填写到这里
        "sync.quietSync": false,
        "sync.syncExtensions": true,
        //----------------【调试相关】--------------------
        //code-runner是否在终端中运行,但这回生成一个临时文件,可以在executorMap里删除(但删除文件有风险)
        "code-runner.runInTerminal": false,
        "code-runner.executorMap": {
            "c": "cd $dir && gcc $fileName -o D:/tmpFile/$fileNameWithoutExt && D:/tmpFile/$fileNameWithoutExt",
        },
        "debug.onTaskErrors": "abort", //控制在运行预启动任务后遇到错误时做法,abort退出
        //----------------【远程开发的目标设备】--------------------
        "remote.SSH.remotePlatform": {
            "192.168.25.129": "linux"
        },
        //----------------【保存文件时自动在文件首行添加注释】--------------------
        "fileheader.customMade": {
            "Author": "realjimmy", // 作者
            "LastEditTime": "Do not edit", // 文件最后编辑时间,保持不要修改,会自动替换
            "Blog": "https://www.cnblogs.com/realjimmy/",
            "Describe": "", // 描述信息
        },
        //----------------【path路径自动填充】--------------------
        "path-intellisense.extensionOnImport": true,
        //----------------【高亮插件配置】--------------------
        "highlightwords.colors": [
            {
                "dark": "yellow",
                "light": "yellow"
            },
            {
                "dark": "Cyan"
            },
            {
                "dark": "Pink"
            },
            {
                "dark": "LightGreen"
            },
            {
                "dark": "LightSteelBlue"
            },
            {
                "dark": "MediumOrchid"
            },
            {
                "dark": "cornflowerblue"
            },
            {
                "dark": "DarkOrange"
            },
        ],
        "highlightwords.box": {
            //实验结果:false全部填充,true仅填充外框
            "dark": false
        },
        //--------------------【shell格式化工具配置】--------------------
        "shellformat.path": "c:/Users/jimmy/.vscode/extensions/foxundermoon.shell-format-7.0.1/bin/shfmt_v3.1.0_windows_amd64.exe",
        //---------------【vscode其他配置】---------------------
        "editor.parameterHints.enabled": false, //输入时函数参数提示
        "editor.formatOnType": false, //输入一行时格式化代码
        "editor.formatOnPaste": false, //黏贴时格式化代码
        "editor.formatOnSave": true, //保存时格式化开关
        "editor.renderControlCharacters": true,
        "editor.rulers": [ //编辑器显示标尺
            80
        ],
        "editor.quickSuggestionsDelay": 1, //控制显示快速建议前的等待时间 (毫秒)
        "editor.snippetSuggestions": "top", //代码片段建议比如if时的代码片段建议,放在top
        "editor.fontSize": 18,
        "editor.renderWhitespace": "selection", //空白字符的显示方式
        "editor.renderLineHighlight": "all", //当前行高亮方式
        "editor.tokenColorCustomizations": {
            // "comments": {
            // // 设置字体样式加粗bold下划线underline斜体italic等
            // "fontStyle": "",
            // // 设置字体颜色
            // "foreground": "#4caee2"
            // }, // 注释
            //"keywords": "#0a0", // 关键字
            //"variables": "#f00", // 变量名
            //"strings": "#18170fbd", // 字符串
            //"functions": "#5b99fcc9", // 函数名
            "numbers": "#ff819c", // 数字
            "functions": {
                // 设置函数的字体样式 加粗 下划线 斜体等
                "fontStyle": "bold",
            },
        },
        "editor.suggestSelection": "first",
        "editor.hover.delay": 300, // 控制鼠标放在代码上悬停提示前的等待时间 (毫秒)
        "terminal.integrated.shell.windows": "C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe", //默认终端
        "window.zoomLevel": -1,
        "http.proxySupport": "off",
        // "terminal.integrated.fontFamily": "Menlo for Powerline",
        "terminal.integrated.rendererType": "dom",
        "explorer.confirmDragAndDrop": false,
        "workbench.colorCustomizations": {
            //选中文本的颜色
            "editor.selectionBackground": "#33609e",
            //当前相同文本高亮的颜色
            // "editor.selectionHighlightBackground": "#0d7c21",
            //鼠标所在行的颜色
            // "editor.lineHighlightBackground": "#00000000",
            "editor.lineHighlightBorder": "#033d4a",
        },
        "workbench.settings.useSplitJSON": true, //json配置时使用拆分json编辑器来显示默认配置
        "workbench.editor.revealIfOpen": true,
        "emmet.triggerExpansionOnTab": true,
        "git.path": "C:/Program Files/Git/bin/git.exe",
        "git.autofetch": false,
        "extensions.autoUpdate": true, //自动更新插件
    }
    

     

    3.2 配置备份和同步Settings-sync

    vscode配置可谓是核心中的核心,如果日积月累的配置丢了是真的会哭,另外如果你有多台设备可以方便在不同设备间同步配置。

    3.2.1 前期准备

    原理是自动上传到github的gist里。因此需要用到github账号,

    1)注册github.com账号

    2)测试gist.github.com地址是否能访问,若没有FanQiang可以通过配置host指向gist.github.com来解决

    例如windows下:

    打开C:WindowsSystem32driversetchosts文件

    在最后行添加192.30.253.118 gist.github.com

    注:能够正常访问gist.github.com了后面的步骤才有意义。

    3.2.1 Settings Sync插件配置

    1)下载vscode里下载setting sync插件

    clipboard

    2)与github同步相关的配置

    如果你曾经使用过,建议先清一下sync的配置。

    vscode里按F1,Sync重置。

    clipboard

    执行同步上传快捷键 shift+alt+u,会弹出配置界面,点击Login With Github

    打开网页认证github,显示Success即通过认证,此时会在配置里自动填写令牌。

    clipboard

    这里会自动创建访问github的令牌,并写入插件配置中(和传统方式建立的令牌不一样,在github页面上没有显示,不确定是不是临时的令牌,我有的时候会连不上)

    clipboard

    如果你是第一次使用,会提示创建gists,跟着向导配置就可以了。成功即可忽略下面步骤。

    如果没有向导,继续按下面的步骤操作。

    github上点击You gists

    clipboard

    clipboard

    以下信息随意写,正文内容会在同步后被覆盖

    clipboard

    url里最后一串记就是GistId,记下来,需要在vscode里配置

    clipboard

    回到vscode页面,点击编辑配置

    clipboard

    将刚才复制的GistId填写上

    clipboard

    注意右边的令牌内容,在前面指向login with github的时候,登陆成功会自动生成并填写,如果后续要更改可以在github上通过以下方式:

    clipboard              clipboard

    clipboard

    clipboard

    此时会生成一个新的令牌。

    3)配置同步及其他配置

    执行shift+alt+u同步,会提示强制上传,点确定。终端输出以下信息表示同步完成

    clipboard

    我们在github上看到,原本的内容也已经被更新。这个工具提供的是同步配置、以及插件名称。不会把插件本身上传到github上。

    clipboard

    主要就两个快捷键,上传及下载

    上传: Shift + Alt + U

    下载:Shift + Alt + D

    配置可以在高级选项里配置

    clipboard

    clipboard

    4 远程开发方案

    当你的代码不在本机,比如远端设备或虚拟机,用vim看代码不是所有人都适应,那还有哪些解决方案呢?在此之前我的方案是:1)在远端设备执行mount命令,将本机目录挂载到远端 2)在本机使用samba将远端目录挂载到本机。

    本章节将提供另外两个由vscode支持的远程开发解决方案。

    4.1 remote-ssh插件

    最方便的远程开发方案,但目前只支持64位系统,对libc版本也有要求,centos7下测试没问题,centos6就报libc版本不对。

    环境:vscode在windows,服务器在linux

    1)安装remote-ssh插件

    2)目标主机上安装git2.0以上(可选)

    先用git --version查看版本,如果低于2.0,先卸载旧版

    yum remove git

    添加新源后安装新版

    yum install -y https://centos7.iuscommunity.org/ius-release.rpm yum install -y git2u

    3)将文件watches限制增加到最大值,这个跟vscode打开文件个数限制有关。

    sudo vim /etc/sysctl.conf

    增加一行放

    fs.inotify.max_user_watches=524288

    保存,最后在控制台执行

    sudo sysctl -p

    即可正常使用。

    4)vscode连接

    clipboard

    5)点击vscode插件管理,在远程安装各种插件,如:

    clipboard

    5)为了方便最好通过ssh-key设置一下ssh免密登录。步骤略。

    4.2 使用sftp插件

    SFTP插件自动上传文件的方案,适用于非64位系统,或centos6等libc版本较低的系统。

    clipboard

    在.vscode文件夹下的sftp.json文件中配置对应的信息,对应参数如下

    name:你可以随便起,建议纯英文。

    host:你服务器端的Ip地址。

    protocol:默认填写sftp即可。

    port:默认填写22。

    username:服务器端的用户名。

    remotePath:服务器端存放本地代码和数据的路径。

    password:服务器端的登录密码。

    uploadOnSave:默认true。

    syncMode:默认update

    watcher:files可以默认为"/*",意思是监控当前文件夹下的所有文件,autoUpload,autoDelete也都默认为true,这样你在新增或删除任何东西的时候,本地和服务端都会实时保持同步

    ignore:方式制定忽略同步的文件,比如一些很大的数据文件其实不需要被同步。

    完成配置,在本地进行更改后点击ctrl+s进行保存,刷新服务端对应的代码文件,你会发现也被更新了。

    5 快捷键说明

    官方快捷键介绍:

    https://code.visualstudio.com/docs/getstarted/keybindings

    clipboard

    这里直接贴出官方快PDF文档:

    https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf

    https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf

    https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf

    6 恢复默认配置

    有的时候vscode出现问题,卸载重装发现配置没有改变,你可能想要完整的恢复全新配置(包括插件),可以删除一下路径里的内容

    插件存放目录:C:Usersjimmy.vscodeextensions

    配置保存路径:C:UsersjimmyAppDataRoamingCode

    7 结束语

    本文章会随着后续使用不断更新,喜欢的可以关于一下我的博客。https://www.cnblogs.com/realjimmy/

  • 相关阅读:
    Qt编写安防视频监控系统1-通道切换
    Qt编写数据可视化大屏界面电子看板12-数据库采集
    Serv-U
    CLAAS KGaA mbH
    法国雷诺
    Bulma
    react技术栈
    小程序开发
    上海hande
    30个极大提高开发效率的VSCode插件
  • 原文地址:https://www.cnblogs.com/realjimmy/p/12990433.html
Copyright © 2011-2022 走看看