前言
我是一名后端开发工程师,主要语言是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配置的备份,可在不同设备间同步,其他的根据插件名字基本都能明白其作用,这里就不做过多解释,各位可以根据自己的需求增删插件。
有的插件还需要安装其他额外的辅助工具,比如在打开c文件时,会自动下载clang-format等工具;打开go文件时会自动安装gotools,需要注意的是gotools安装特别慢,经常一轮安装下来总有几个装不上,不过也没有关系,多试几次总能成功。
二、各种语言开发环境
本章节主要是基础开发环境的配置,包括依赖编译工具等,具体的vscode配置会在第三章介绍。
2.1 C语言开发基础环境
2.1.1 安装Mingw-w64(仅windows需要)
编译代码、代码调试都需要用到。
下载地址:https://sourceforge.net/projects/mingw-w64/files/
选择适合自己的版本。
- i686 的是32位版,x86_64 的是64位版
- posix和win32是os接口类型
- sjlj/seh/dwarf 是异常处理方案,具体的差异可以自行百度
seh :支持64位,新,性能比较好
sjlj :支持64+32位,旧,稳定性好。
dwarf :支持32位
我选择,x86_64-posix-seh。安装好后需要配置环境变量,如:C:\mingw-w64\mingw64\bin
2.1.2 安装Clang(仅windows需要)
语法检查需要用到,编译代码时可以用mingw的gcc,也可以用clang。这里我们直接下载编译好的安装包。
https://releases.llvm.org/download.html
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-->编辑配置。
除了标准库外,项目里的其他头文件如果找不到也可以用这种方式添加。
指定头文件目录
2.1.4 编译运行与调试
1)快速编译运行
如果是单个.c文件(比如测试代码),右键点run code即可运行(依赖CodeRunner插件)。
2)使用gdb调试
涉及两个配置文件,tasks和launch。tasks可以被用来做编译,而launch用来执行编译好的文件。
首先配置tasks:
F1,输入tasks,选择配置任务
我这里配置编译运行单个文件为例,几个注意事项:
- label:这个任务的名词,一会儿在launch里配置的preLaunchTask(执行前的任务)名称要和这个一直。
- command:编译执行的命令,我这里写的gcc,也可以是其他编译时要执行的命令。
- arg:执行命令的参数,这里通过gcc的参数-o指定了编译后可执行文件的路径。
- cwd:命令的目录,这里指向mingw64的bin命令。
接着配置launch,
注意事项:
- program:指定了运行时的程序,和task对应。
- miDebuggerPath:指定gdb路径。
- preLaunchTask:指定运行前的任务,即编译任务,与前面配置的task对应。
现在可以开始调试代码了,在代码行号左边点击即可打断点,点绿色小三角或是F5开始编译、执行。
在调试控制台可以输入gdb命令,格式:-exec <command>
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
【Mac部署】
export GOPATH=/root/go_src
export GOROOT=/usr/local/go
4)重新登录session
2.2.3 设置代理
2.2.4 测试go工具
第一个go程序
在工作目录里创建hello.go
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
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资源
#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:\Windows\System32\drivers\etc\hosts文件
在最后行添加192.30.253.118 gist.github.com
注:能够正常访问gist.github.com了后面的步骤才有意义。
3.2.1 Settings Sync插件配置
1)下载vscode里下载setting sync插件
2)与github同步相关的配置
如果你曾经使用过,建议先清一下sync的配置。
vscode里按F1,Sync重置。
执行同步上传快捷键 shift+alt+u,会弹出配置界面,点击Login With Github
打开网页认证github,显示Success即通过认证,此时会在配置里自动填写令牌。
这里会自动创建访问github的令牌,并写入插件配置中(和传统方式建立的令牌不一样,在github页面上没有显示,不确定是不是临时的令牌,我有的时候会连不上)
如果你是第一次使用,会提示创建gists,跟着向导配置就可以了。成功即可忽略下面步骤。
如果没有向导,继续按下面的步骤操作。
github上点击You gists
以下信息随意写,正文内容会在同步后被覆盖
url里最后一串记就是GistId,记下来,需要在vscode里配置
回到vscode页面,点击编辑配置
将刚才复制的GistId填写上
注意右边的令牌内容,在前面指向login with github的时候,登陆成功会自动生成并填写,如果后续要更改可以在github上通过以下方式:
此时会生成一个新的令牌。
3)配置同步及其他配置
执行shift+alt+u同步,会提示强制上传,点确定。终端输出以下信息表示同步完成
我们在github上看到,原本的内容也已经被更新。这个工具提供的是同步配置、以及插件名称。不会把插件本身上传到github上。
主要就两个快捷键,上传及下载
上传: Shift + Alt + U
下载:Shift + Alt + D
配置可以在高级选项里配置
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连接
5)点击vscode插件管理,在远程安装各种插件,如:
5)为了方便最好通过ssh-key设置一下ssh免密登录。步骤略。
4.2 使用sftp插件
SFTP插件自动上传文件的方案,适用于非64位系统,或centos6等libc版本较低的系统。
在.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
这里直接贴出官方快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:\Users\jimmy\.vscode\extensions
配置保存路径:C:\Users\jimmy\AppData\Roaming\Code
7 结束语
本文章会随着后续使用不断更新,喜欢的可以关于一下我的博客。https://www.cnblogs.com/realjimmy/
请发表评论