文章目录

VSCode由于插件众多,支持的语言也非常多,是越来越好用,越来越火。有一款插件叫Code Runner支持VSCode下一键运行各种语言,非常好用,但笔者在使用过程中遇到一些问题,需要修改配置才能正常使用,这里作一个记录:

一、Go语言

1. 使用Code Runner运行

Go语言的包管理是以目录界限的,一个目录中只允许一个包,但允许有多个文件共属这个包。比如Go目录下有两个文件:main.go和util.go,它们的内容如下: main.go

1package main
2
3func main() {
4	println("你好,世界!")
5	gotest()
6}

util.go

1package main
2
3func gotest() {
4	println("调用gotest")
5}

我们在main.go文件中点右键运行Run Code会出现找不到函数定义的错误:

这是因为Code Runner默认的运行命令是:go run 加当前文件,如上图。由于main.go使用了util中的函数,但util.go并未自动载入。我们可以在终端中试试把util.go加上。

正常输出了,这种方法适合文件数量比较少的情况,而且Code Runner不方便直接指定文件名。 还有一种方法就直接使用当前目录:.

修改CodeRunner的配置:

把go的配置改为:

1cd $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的支持也比较好一些,比如下面的代码:

1def main():
2	print("你好,世界!")
3	
4if __name__ == "__main__":
5	main()

在笔者的Mac中直接使用Code Runner运行的话会出现错误:

那里因为系统默认的Python是Python2。 按Go语言中的方式修改Code Runner配置,改为python3,前提是安装了Python3

1python3 -u

如果还是不能正常输出中文,可以添加环境变量:

  • Mac下如果是使用的bash则在用户目录的.bash_profile中添加
1export PYTHONIOENCODING=utf-8 

如果是使用的zsh,则使用:

1vi ~/.zshrc

在其中添加上面的变量。

  • Linux中一般使用的是Bash,跟Mac下的Bash添加方法一样
  • Windows 在“控制面板”/“系统”/“高级系统设置”/“环境变量”中添加,可以添加用户变量也可以添加系统变量。

2.格式化

在VSCode中编写Python时,使用格式化功能,需要安装Autopep8。该工具默认在格式化时会将Tab缩进改为空格。但是有时我们更希望使用Tab缩进而不是空格,可以在VSCode中设置:

如上图,添加:

1--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改为通配符即可。

1"c": "cd $dir && clang *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
2"cpp": "cd $dir && clang++ *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

注意: 如果想C/C++混合使用,可以尝试再改为:

1"c": "cd $dir && clang *.c *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
2"cpp": "cd $dir && clang++ *.c *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
  • 如果main函数所在文件是一个c文件,引用了C++文件函数,可能会出现链接问题
  • 而如果main函数所在文件是一个C++文件,引用C文件函数,则会出现一个警告,强制把C文件作为C++文件来处理。
1clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]