最近发现微软的vscode编辑器貌似做得貌似越来越好了,于是也想尝试着体验下。毕竟有时候不是随时都要用集成度比较高的IDE,过于庞大,也累赘。而传说中的。编辑器之神vim,以及神之编辑器Emacs,个人觉得不是太符合自己的操作习惯,于是这么看来vscode确实可以一试。用python和C++较多,就研究了一下windows/Ubuntu对于它们的配置。
vscode安装
windows下的安装不多说了,下载安装就行了。对于ubuntu,官网下载deb文件,如下安装即可:
sudo dpkg -i XXXXX.deb
Python
无论是ubuntu还是windows,python的编译配置都差不多。首先,要安装一个的插件,在extension中搜python,安装一下,非常的快。
由于。vscode只是个编辑器,所以编译器/解释器都是要自己先安装好的。对于python来说,就是先安装好python2.7,并配置好环境变量。对于程序文件的管理,。vscode是以文件夹来配置与管理的,可以理解为一个文件夹就是一个工作空间。我们对于不同的工作空间进行配置,就可以用来run or debug不同的程序。一个简单的python工作文件夹配置完成后,其结构如下:
TEST -
|-test.py
|-.vscode
|-launch.json
|-tasks.json
新建一个文件夹(TEST)并打开,假设我们在该目录下建立新的文件(ctrl+n),名称为test.py。vscode通过tasks.json和launch.json来配置程序的运行环境。对于python来说,首先配置tasks.json。快捷键ctrl+shift+p,打开vscode的命令,输入Tasks: Configure Task Runner,选择other,tasks.json文件会自动生成,修改其内容如下:
"version": "0.1.0",
"command": "python",
"isShellCommand": true,
"args": ["${file}"],
"showOutput": "always"
回想一下我们最纯粹的运行py文件的方式,那就是:
python test.py
所以,command就是python,args就是当前运行文件名。当然,如果存在多个py文件的情况下,为了避免运行乱了,可以直接把args指定为入口py文件。配置好tasks.json之后,快捷键ctrl+shift+b,即可运行。
进行Dubug的配置,首先ctrl+shift+d进入debug界面,点击小齿轮,会生成一个launch.json的文件。我个人觉得默认的文件配置就可以用了。现在就可以F5进入调试,可以打断点,还不错。
vscode对于raw_input()的运行与调试
正常来说,这样的配置就很OK了,但是我发现vscode在调试python的一个小问题就是,。没有办法交互式的接受用户输入,即用raw_input(“>”)的时候,就会一直卡在这里。研究了一下,只能如下将就:
- 如果只是运行,则不使用ctrl+shift+b方式,而是在vscode的termi下自己运行。
- 如果是debug,则在debug界面选择 Integrated Terminal/Console 或者 External Terminal/Console,启动内部或者外部控制台来做debug。
python2与python3切换
最近安装了miniconda的python3的环境,有时候想在vscode里面用不同版本的python进行调试。简单研究了一下,主要需要的配置如下,假设系统(例如ubuntu默认的python是python3),即终端下:
viki@c3po:~$ python --version
Python 3.6.3 :: Anaconda, Inc.
则按照上述配置后的vscode环境将会默认用该版本的python运行。但是我miniconda的python3环境是需要手动激活的:
source activation miniconda/envs/{yourconda}
因此,虽然默认会调用该版本的python3,但是相应的库却不一定会包含进来,例如numpy之类的。因此解决的办法是在task.json中直接指明command路径:
{
"version": "0.1.0",
"command": "{condaPath}/envs/carnd-term1/bin/python3",
"isShellCommand": true,
"args": ["main.py"],
"showOutput": "always"
}
如果需要切换到python2环境,task.json中将command写明为python2:
{
"version": "0.1.0",
"command": "python2",
"isShellCommand": true,
"args": ["main.py"],
"showOutput": "always"
}
这样设置以后,利用ctrl+shift+b程序就会按照对应的python版本来运行。
再说一下debug的问题,task.json管理的是运行的问题,debug情况下(即用f5调试),也需要在launch.json中,修改pythonPath为对应要用的版本:
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"python.pythonPath": "{condaPath}/envs/carnd-term1/bin/python3",
"program": "${file}",
另外在ctrl+shift+p,中搜索preference:Open User Setting,可以打开setting.json文件,可以修改其中的pythonPath,貌似是个一了百了的方法:
"python.pythonPath": "{yourpython3Path}/python3" //Python3
"python.pythonPath": "{yourpython3Path}/python2" //Python2
C++
g++
C++的配置,首先,vscode中安装c/c++的插件是必须的。接下来配置稍微复杂一点点,先说通用形式,即采用g++来编译。首先确保ubuntu和windows中都有g++。如果没有的话,ubuntu下可以通过apt-get的方式来安装,windows则可以安装cygwin或者mingw,一定要确保的是安装是勾选了gdb,否则之后没办法配置debug。可以使用如下命令来确认自己机器上是否有g++:
g++ --version
之后的步骤可以参见python的配置,vscode打开工作文件夹,建立文件。然后配置tasks.json。假设最终配置完后,我们的文件结构如下:
TEST-
|- myHead.h
|- myHead.cpp
|- main.cpp
|-.vscode-
|-tasks.json
|-launch.json
|-c_cpp_properties.json
myHead.h是一个自己写的类声明,myHead.cpp是类实现,main.cpp则是主函数的入口。正常来说用g++来编译该程序:
//windows:
g++ -g main.cpp myHead.cpp -o main.exe
//ubuntu:
g++ -g main.cpp myHead.cpp -o main.o
因此,相应的tasks.json文件,可以改为:
//windows:
"version": "0.1.0",
"command": "g++",
"isShellCommand": true,
"args": ["-g","main.cpp","myHead.cpp","-o","main.exe"],
"showOutput": "always"
//ubuntu:
"version": "0.1.0",
"command": "g++",
"isShellCommand": true,
"args": ["-g","main.cpp","myHead.cpp","-o","main.o"],
"showOutput": "always"
之后在debug界面,点击小齿轮选择。C++(GDB/LLDB),launch.json文件会自动生成,需要修改如下:
//windows:
"program": "${workspaceRoot}/main.exe"
//ubuntu:
"program": "${workspaceRoot}/main.o"
//botn win and ubuntu:
"cwd": "${workspaceRoot}"
C++程序有很多include是需要包含的,如果检测不到,会报错,这些include路径可以在c_cpp_properties.json中添加,Ctrl+Shift+p,输入C/Cpp: Edit Configurations,会自动生成c_cpp_properties.json,在其中,根据对应的操作系统添加好include的path就行了。
之后,可以使用ctrl+shift+b,编译出对应程序,按F5启动debug调试,设置断点。
MSBuild
说到C++工程,不得不提VS的工程,如果我们拿到一个是由VS创建的工程文件夹。(含有.sln文件)。怎么使用vscode来编译调试呢。g++肯定是不行了,这个时候就要使用MSBuild来配置。
同样,先打开该工程文件夹。在Ctrl+Shift+p中输入Tasks: Configure Task Runner,此时。直接选择MSbuild不要选other,来生成tasks.json,并修改其中的command为MSBuild.exe所在的路径:
"version": "0.1.0",
"command": "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/msbuild",
"args": [
// Ask msbuild to generate full paths for file names.
"/property:GenerateFullPaths=true"
],
"taskSelector": "/t:",
"showOutput": "silent",
"tasks": [
{
"taskName": "build",
// Show the output window only if unrecognized errors occur.
"showOutput": "silent",
// Use the standard MS compiler pattern to detect errors, warnings and infos
"problemMatcher": "$msCompile"
}
]
之后进入debug页面,点击小齿轮,选择debug的方式为。C++(Windows),自动生成launch.json。修改program为编译以后的exe的位置:
"program": "C:/document/vscode/C++/test/Debug/test.exe"
同样,需要在C/Cpp: Edit Configurations,设置c_cpp_properties.json中的include路径,例如:
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include"
],
"defines": [
"_DEBUG",
"UNICODE"
],
"browse": {
"path": [
//add include path here
"C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include",
"C:/Program Files (x86)/Windows Kits/8.0/Include/um"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
然后就可以运行,并调试vs工程的c++程序了。
Ok, 先这么多吧,以后再研究一下用g++的时候,怎么用make来做编译调试。毕竟文件多了,make会方便一些。