多个 commands/tasks 和 Visual Studio 代码
Multiple commands/tasks with Visual Studio Code
我有一个本地文件夹,用作多个小示例和玩具代码片段的便签本。我在这个目录中存储了大量 python、C++、shell 脚本等。
我正在使用 Visual Studio 代码(在 OS X 上)并正在研究 its tasks 到 run/compile 代码片段,而无需切换到终端。
例如,我发现 this following task 将 运行 python 放在当前打开的文件上。
// A task runner that runs a python program
{
"version": "0.1.0",
"command": "/usr/bin/python",
"args": ["${file}"]
}
无论我当前正在编辑的文件类型如何,此任务都将使用 python 作为任务 运行ner。
如何根据文件类型(或在多个命令之间select)将任务执行到运行一个命令? IE。如果我正在编辑 C++ 文件,它将 运行 clang++.
- 如果我不能根据文件类型做;除了这个还有其他选择吗?
- 另一种选择是;是否支持多个命令?
您可以直接编写 运行 自定义脚本文件而不是 python
等。在脚本文件中,您将提取文件扩展名以调用 python
、clang
或任何 compiler/translator 所需的内容。
因此您的任务文件将如下所示;
// A task runner that runs a program
{
"version": "0.1.0",
"command": "${workspaceRoot}\runProgram.sh",
"args": ["${file}"]
}
最近对 tasks.json
的更改似乎为列出的每个任务提供了一个命令。请参阅 https://code.visualstudio.com/docs/editor/tasks,这引起了很多讨论。
这个答案最初是针对更复杂的解决方案,但被接受的答案中提供的简单 shell 运行ner 任务格式证明更有用。看看下面现在的样子。
这里的限制是 VS Code 仅限于给定工作区的单个高级构建 task/command。允许多个子任务,但它们仅限于使用顶级“命令”,但可以提供不同的“参数”。这非常适合使用类似于 make、ant 或 msbuild 的构建系统的环境。例如;
{
"version": "0.1.0",
"command": "make", // command must appear here
"tasks" : [
{
"taskName": "clean",
"suppressTaskName": false, // false by default
//"command": "somethingelse", // not valid here
"args": ["${file}"] // if required
},
{
"taskName": "install"
// ...
}
]
}
有两种选择;
让自定义脚本尝试 运行 仅给定 task.json.
中的参数 compile/execution
-- the shell file would be a simple
"$@" # run what I get
-- the tasks.json
"args": ["clang++", "-std=c++14", "-O2", "${file}"]
让可执行文件达到 运行 (./a.out
) 需要更多的努力。简单地将它作为参数添加是行不通的,如果它存在,则需要 shell 脚本来执行它。
Shell 输出到自定义脚本的切换和执行,给定文件扩展名和文件名。事实证明,这更易于实施,并在 shell 脚本中提供了更多控制。
{
"version": "0.1.0",
"isShellCommand": true,
"taskName": "generic build",
"showOutput": "always",
"args": ["${fileExtname}", "${file}"]
"command": "./.vscode/compileme.sh", // expected in the "local settings" folder
//"command": "~/compileme.sh", // if in HOME folder
}
和 shell 脚本,compileme.sh;
#!/bin/sh
# basic error checking not shown...
echo "compilation being executed with the arguments;"
echo "$@"
filetype=
file=
if [ $filetype = ".cpp" -o $filetype = ".cxx" ] ; then
clang++ -std=c++14 -Wall -Wextra -pedantic -pthread $file && ./a.out
elif [ $filetype = ".c" ]
then
clang -std=c11 -Wall -Wextra -pedantic -pthread $file && ./a.out
elif [ $filetype = ".sh" ]
then
$file
elif [ $filetype = ".py" ]
then
python $file
else
echo "file type not supported..."
exit 1
fi
鉴于上面列出的选项,第二个选项更可取。此实现适用于 OS X,但可以根据需要轻松移植到 Linux 和 Windows。我会密切关注这一点,并尝试跟踪对 VS Code 构建任务的更改,基于文件的构建或对多个命令的支持可能是一个受欢迎的补充。
我的 tasks.json 支持一些 运行 用户,以及打印消息作为提醒的默认构建。它使用 shell 作为 运行ner,现在看起来像...
{
"version": "0.1.0",
"isShellCommand": true,
"taskName": "GenericBuild",
"showOutput": "always",
"command": "sh",
"suppressTaskName": false,
"args": ["-c"],
"tasks": [
{
"taskName": "no build",
"suppressTaskName": true,
"isBuildCommand": true,
"args": [
"echo There is no default build task, run a task by name..."
]
},
{
"taskName": "cpp",
"suppressTaskName": true,
"args": [
"clang++ -std=c++14 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"
]
},
{
"taskName": "shell",
"suppressTaskName": true,
"args": [
"\"${file}\""
]
},
{
"taskName": "python",
"suppressTaskName": true,
"args": [
"python \"${file}\""
]
},
{
"taskName": "c",
"suppressTaskName": true,
"args": [
"clang -std=c11 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"
]
}
]
}
您始终可以使用 bash 作为您的任务 运行 然后分配任意终端命令作为您的任务。
{
"version": "0.1.0",
"command": "bash",
"isShellCommand": true,
"showOutput": "always",
"args": [
"-c"
],
"tasks": [
{
"taskName": "My First Command",
"suppressTaskName": true,
"isBuildCommand": true,
"args": ["echo cmd1"]
},
{
"taskName": "My Command Requiring .bash_profile",
"suppressTaskName": true,
"args": ["source ~/.bash_profile && echo cmd2"]
},
{
"taskName": "My Python task",
"suppressTaskName": true,
"args": ["/usr/bin/python ${file}"]
}
]
}
关于这里发生的事情的几点说明:
- 对所有任务使用bash
-c
,将其放入args
命令列表,这样我们就可以运行任意命令。 echo
语句只是示例,但可以是任何可从您的 bash 终端执行的语句。
args
数组将包含要传递给 bash -c
的单个字符串(单独的项目将被视为 bash 命令的多个参数,而不是与-c
arg).
suppressTaskName
用于将 taskName
排除在外
- 第二个命令显示了如何加载
~/.bash_profile
如果您需要它提供的任何东西,例如别名、环境变量等等
- 第三个命令显示了如何使用您提到的 Python 命令
这不会为您提供任何类型的文件扩展名检测,但您至少可以使用 cmd+p 然后键入 "task " 获取您的任务列表。您始终可以通过 cmd+shift[=51 将 2 个最常用的命令标记为 isBuildCommand
和 isTestCommand
到 运行 =]+b 或 cmd+shift+t分别。
This answer 有一些有用的信息,可能对您也有用。
我制作了这个脚本。
它要求您在您的环境中安装 python IDLE。
这将在您每次 运行 您的任务 (CTRL+Shift+B) 时打开 IDLE 和 运行 您的 python 文件。
{
"version": "0.1.0",
"command": "/usr/bin/idle",
"isShellCommand": false,
"showOutput": "never",
"args": ["-r","${file}"]
}
您可以使用复合任务来 运行 多个命令
https://code.visualstudio.com/docs/editor/tasks#_compound-tasks
最简单的方法是在 shell:
中添加由 ;
(或 &&
)分隔的它们
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "test",
"type": "shell",
"command": "cd ~/dev/xxxx;source ~/dev/yyyy;ls",
}
]
}
我有一个本地文件夹,用作多个小示例和玩具代码片段的便签本。我在这个目录中存储了大量 python、C++、shell 脚本等。
我正在使用 Visual Studio 代码(在 OS X 上)并正在研究 its tasks 到 run/compile 代码片段,而无需切换到终端。
例如,我发现 this following task 将 运行 python 放在当前打开的文件上。
// A task runner that runs a python program
{
"version": "0.1.0",
"command": "/usr/bin/python",
"args": ["${file}"]
}
无论我当前正在编辑的文件类型如何,此任务都将使用 python 作为任务 运行ner。
如何根据文件类型(或在多个命令之间select)将任务执行到运行一个命令? IE。如果我正在编辑 C++ 文件,它将 运行 clang++.
- 如果我不能根据文件类型做;除了这个还有其他选择吗?
- 另一种选择是;是否支持多个命令?
您可以直接编写 运行 自定义脚本文件而不是 python
等。在脚本文件中,您将提取文件扩展名以调用 python
、clang
或任何 compiler/translator 所需的内容。
因此您的任务文件将如下所示;
// A task runner that runs a program
{
"version": "0.1.0",
"command": "${workspaceRoot}\runProgram.sh",
"args": ["${file}"]
}
最近对 tasks.json
的更改似乎为列出的每个任务提供了一个命令。请参阅 https://code.visualstudio.com/docs/editor/tasks,这引起了很多讨论。
这个答案最初是针对更复杂的解决方案,但被接受的答案中提供的简单 shell 运行ner 任务格式证明更有用。看看下面现在的样子。
这里的限制是 VS Code 仅限于给定工作区的单个高级构建 task/command。允许多个子任务,但它们仅限于使用顶级“命令”,但可以提供不同的“参数”。这非常适合使用类似于 make、ant 或 msbuild 的构建系统的环境。例如;
{
"version": "0.1.0",
"command": "make", // command must appear here
"tasks" : [
{
"taskName": "clean",
"suppressTaskName": false, // false by default
//"command": "somethingelse", // not valid here
"args": ["${file}"] // if required
},
{
"taskName": "install"
// ...
}
]
}
有两种选择;
让自定义脚本尝试 运行 仅给定 task.json.
中的参数 compile/execution-- the shell file would be a simple "$@" # run what I get -- the tasks.json "args": ["clang++", "-std=c++14", "-O2", "${file}"]
让可执行文件达到 运行 (./a.out
) 需要更多的努力。简单地将它作为参数添加是行不通的,如果它存在,则需要 shell 脚本来执行它。
Shell 输出到自定义脚本的切换和执行,给定文件扩展名和文件名。事实证明,这更易于实施,并在 shell 脚本中提供了更多控制。
{ "version": "0.1.0", "isShellCommand": true, "taskName": "generic build", "showOutput": "always", "args": ["${fileExtname}", "${file}"] "command": "./.vscode/compileme.sh", // expected in the "local settings" folder //"command": "~/compileme.sh", // if in HOME folder }
和 shell 脚本,compileme.sh;
#!/bin/sh
# basic error checking not shown...
echo "compilation being executed with the arguments;"
echo "$@"
filetype=
file=
if [ $filetype = ".cpp" -o $filetype = ".cxx" ] ; then
clang++ -std=c++14 -Wall -Wextra -pedantic -pthread $file && ./a.out
elif [ $filetype = ".c" ]
then
clang -std=c11 -Wall -Wextra -pedantic -pthread $file && ./a.out
elif [ $filetype = ".sh" ]
then
$file
elif [ $filetype = ".py" ]
then
python $file
else
echo "file type not supported..."
exit 1
fi
鉴于上面列出的选项,第二个选项更可取。此实现适用于 OS X,但可以根据需要轻松移植到 Linux 和 Windows。我会密切关注这一点,并尝试跟踪对 VS Code 构建任务的更改,基于文件的构建或对多个命令的支持可能是一个受欢迎的补充。
我的 tasks.json 支持一些 运行 用户,以及打印消息作为提醒的默认构建。它使用 shell 作为 运行ner,现在看起来像...
{
"version": "0.1.0",
"isShellCommand": true,
"taskName": "GenericBuild",
"showOutput": "always",
"command": "sh",
"suppressTaskName": false,
"args": ["-c"],
"tasks": [
{
"taskName": "no build",
"suppressTaskName": true,
"isBuildCommand": true,
"args": [
"echo There is no default build task, run a task by name..."
]
},
{
"taskName": "cpp",
"suppressTaskName": true,
"args": [
"clang++ -std=c++14 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"
]
},
{
"taskName": "shell",
"suppressTaskName": true,
"args": [
"\"${file}\""
]
},
{
"taskName": "python",
"suppressTaskName": true,
"args": [
"python \"${file}\""
]
},
{
"taskName": "c",
"suppressTaskName": true,
"args": [
"clang -std=c11 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"
]
}
]
}
您始终可以使用 bash 作为您的任务 运行 然后分配任意终端命令作为您的任务。
{
"version": "0.1.0",
"command": "bash",
"isShellCommand": true,
"showOutput": "always",
"args": [
"-c"
],
"tasks": [
{
"taskName": "My First Command",
"suppressTaskName": true,
"isBuildCommand": true,
"args": ["echo cmd1"]
},
{
"taskName": "My Command Requiring .bash_profile",
"suppressTaskName": true,
"args": ["source ~/.bash_profile && echo cmd2"]
},
{
"taskName": "My Python task",
"suppressTaskName": true,
"args": ["/usr/bin/python ${file}"]
}
]
}
关于这里发生的事情的几点说明:
- 对所有任务使用bash
-c
,将其放入args
命令列表,这样我们就可以运行任意命令。echo
语句只是示例,但可以是任何可从您的 bash 终端执行的语句。 args
数组将包含要传递给bash -c
的单个字符串(单独的项目将被视为 bash 命令的多个参数,而不是与-c
arg).suppressTaskName
用于将taskName
排除在外- 第二个命令显示了如何加载
~/.bash_profile
如果您需要它提供的任何东西,例如别名、环境变量等等 - 第三个命令显示了如何使用您提到的 Python 命令
这不会为您提供任何类型的文件扩展名检测,但您至少可以使用 cmd+p 然后键入 "task " 获取您的任务列表。您始终可以通过 cmd+shift[=51 将 2 个最常用的命令标记为 isBuildCommand
和 isTestCommand
到 运行 =]+b 或 cmd+shift+t分别。
This answer 有一些有用的信息,可能对您也有用。
我制作了这个脚本。
它要求您在您的环境中安装 python IDLE。 这将在您每次 运行 您的任务 (CTRL+Shift+B) 时打开 IDLE 和 运行 您的 python 文件。
{
"version": "0.1.0",
"command": "/usr/bin/idle",
"isShellCommand": false,
"showOutput": "never",
"args": ["-r","${file}"]
}
您可以使用复合任务来 运行 多个命令 https://code.visualstudio.com/docs/editor/tasks#_compound-tasks
最简单的方法是在 shell:
中添加由;
(或 &&
)分隔的它们
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "test",
"type": "shell",
"command": "cd ~/dev/xxxx;source ~/dev/yyyy;ls",
}
]
}