文章目录
VSCode由于插件众多,支持的语言也非常多,是越来越好用,越来越火。有一款插件叫Code Runner支持VSCode下一键运行各种语言,非常好用,但笔者在使用过程中遇到一些问题,需要修改配置才能正常使用,这里作一个记录:
一、Go语言
1. 使用Code Runner运行
Go语言的包管理是以目录界限的,一个目录中只允许一个包,但允许有多个文件共属这个包。比如Go目录下有两个文件:main.go和util.go,它们的内容如下:
main.go
package main
func main() {
println("你好,世界!")
gotest()
}
util.go
package main
func gotest() {
println("调用gotest")
}
我们在main.go文件中点右键运行Run Code会出现找不到函数定义的错误:
这是因为Code Runner默认的运行命令是:go run 加当前文件,如上图。由于main.go使用了util中的函数,但util.go并未自动载入。我们可以在终端中试试把util.go加上。
正常输出了,这种方法适合文件数量比较少的情况,而且Code Runner不方便直接指定文件名。
还有一种方法就直接使用当前目录:.
修改CodeRunner的配置:
把go的配置改为:
cd $dir && go run .
现在运行Code Runner就正常了。
也许我们的项目不在${GOPATH}目录下,而是任意一个目录,项目中有多个包(多个子目录),Code Runner也能够正常运行,只要在代码中import了,比如项目中有一个test包,import方式为加上"./"路径,如:
2. 关于提示
在编码过程中也许不会出现我们希望的提示,可以在设置中勾中“Autocomplete Unimported Packages”
二、Python语言
1.使用Code Runner运行
Python目前的两大版本Python2与Python3都还在维护,一些系统还默认安装的是Python2,但Python2很快就会结束支持了,所以建议大家都还是使用Python3,同时Python3对UTF8的支持也比较好一些,比如下面的代码:
def main():
print("你好,世界!")
if __name__ == "__main__":
main()
在笔者的Mac中直接使用Code Runner运行的话会出现错误:
那里因为系统默认的Python是Python2。
按Go语言中的方式修改Code Runner配置,改为python3,前提是安装了Python3
python3 -u
如果还是不能正常输出中文,可以添加环境变量:
- Mac下如果是使用的bash则在用户目录的.bash_profile中添加
export PYTHONIOENCODING=utf-8
如果是使用的zsh,则使用:
vi ~/.zshrc
在其中添加上面的变量。
- Linux中一般使用的是Bash,跟Mac下的Bash添加方法一样
- Windows
在“控制面板”/“系统”/“高级系统设置”/“环境变量”中添加,可以添加用户变量也可以添加系统变量。
2.格式化
在VSCode中编写Python时,使用格式化功能,需要安装Autopep8。该工具默认在格式化时会将Tab缩进改为空格。但是有时我们更希望使用Tab缩进而不是空格,可以在VSCode中设置:
如上图,添加:
--ignore=W191,E101,E111
三、C/C++
1. 代码格式化
在设置中如图设置,注意Clang_format_path需要填写完整路径,格式化风格可以使用多种风格,看各人习惯或者各公司情况设置。
如果有什么问题格式化失败,VSCode会在右下角给出提示:
此时可以在输出窗口选择C/C++查看问题。
2. Code Runner编译运行问题
- Windows使用Clang的问题
Code Runner默认使用gcc编译C程序,g++编译c++程序,如果是希望使用Clang进行编译,只需要将settings.json中的"code-runner.executorMap"中c/c++的配置命令改为clang/clang++即可。
但是在Windows下还有点问题,就是使用Clang生成的文件没.exe后缀。无法正常执行。需要在如图所示添加后缀.exe
- 多文件问题
如果项目中main函数所在目录有多个C/C++文件,也可以使用Code Runner一键编译运行,只需要把前面的C/C++中的$fileName改为通配符即可。
"c": "cd $dir && clang *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && clang++ *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
注意:
如果想C/C++混合使用,可以尝试再改为:
"c": "cd $dir && clang *.c *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && clang++ *.c *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
- 如果main函数所在文件是一个c文件,引用了C++文件函数,可能会出现链接问题
- 而如果main函数所在文件是一个C++文件,引用C文件函数,则会出现一个警告,强制把C文件作为C++文件来处理。
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]