VSCODE 使用命名空间声明创建新 C# class 的代码片段
VSCODE snippet for creating new C# class with namespace declaration
目前我们只能创建新的 file
或 folder
。而且每次创建class声明都要写命名空间,非常烦人。
但是是否可以创建新的 C# class 文件并在其中自动生成适当的命名空间?或者那里有一些片段?
这目前是不可能的。您无法在 Visual Studio 代码的片段声明文件中检索当前文件名、目录或其他信息。
您可以创建一个片段,让您输入命名空间和 class 名称。但我想这对你帮助不大。尽管如此,它看起来像这样:
"Namespace and class": {
"prefix": "namespaceAndClass",
"body": [
"namespace ",
"{",
" class ",
" {",
"",
" }",
"}"
],
"description": "Create a namespace block with a class"
}
如果您真的想要一个根据文件路径填写正确命名空间和class名称的片段,您可以查看OmniSharp project.这可以让您了解如何改进 csharp-o 扩展,以便提供正确的数据作为插件内的建议。
但我认为这是一个比你自己输入 namespace 和 class 更大的任务。
This extension 提供上下文菜单按钮来添加新的 class,这将自动填充命名空间。
Visual Studio 自上次回答以来,代码发生了一些变化。它现在在片段中提供变量 TM_DIRECTORY
,但这是一个绝对路径。我已提交 an enhancement request 以提供可以转换为名称空间的相对路径。但老实说,我认为上面的扩展程序满足了我的需求(上下文菜单是一个加号)
使用 vscode 的当前变量和正则表达式系统的中度脏解决方案如下:
假设您的所有项目都在 /your/projects/directory/
所以项目 #1 在 /your/projects/directory/Project1/
项目 #2 在 /your/projects/directory/Project2/
等等
以下代码片段将为所有子目录创建命名空间实现:
Linux/MacOS
"Namespace declaration":
{
"prefix": "name",
"description": "Creates a new namespace declaration.",
"body":
[
"namespace ${TM_DIRECTORY/^\/your\/projects\/directory(\/([^\/]+))(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?/${3:+.}${5:+.}${7:+.}${9:+.}${11:+.}${13:+.}${15:+.}${17:+.}${19:+.}/gi}",
"{",
"}"
]
}
Windows
"Namespace declaration":
{
"prefix": "name",
"description": "Creates a new namespace declaration.",
"body":
[
"namespace ${TM_DIRECTORY/^c:\\your\\projects\\directory(\\([^\\]+))(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?/${3:+.}${5:+.}${7:+.}${9:+.}${11:+.}${13:+.}${15:+.}${17:+.}${19:+.}/gi}",
"{",
"}"
]
}
说明
- 该代码段与您的基本目录和最多十个子目录相匹配(第一个目录是必需的
(\/([^\/]+))
,而所有其他九个目录都是可选的 (\/([^\/]+))?
)
- 然后使用第一个匹配的目录创建命名空间指令
- 对于每个成功的附加子目录匹配,插入一个点
.
(${3:+.}
) 与该组的子匹配 (
);对于不成功的组,不插入点并且子匹配为空
尽情享受吧:)
我发现这些扩展提供了创建 C# class 上下文菜单选项:
使用这个,首先它集中在命名空间的末尾添加任何附加部分。然后它集中在 class.
里面
"Namespace and Class": {
"prefix": "nc",
"body": [
"namespace $WORKSPACE_NAME\n{\n\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t\n\t}\n}"
],
"description": "Generates namespace and class name"
}
发现此线程正在寻找相同的答案。
我没有找到任何现有的片段建议来生成正确的命名空间。
经过一些试验和错误后,我得到的最接近的,使用“variables" and "placeholder transformation”,是:
"Namespace and Class": {
"prefix": "nclass",
"body": [
"namespace ${RELATIVE_FILEPATH/[\\]|\w+\.cs$/./g}",
"{",
"\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t[=10=]\n\t}",
"}"
],
"description": "Generates namespace and class name"
}
这将从工作区中的文件夹结构生成命名空间,并使用文件名class命名。
但是这有一个问题,因为它会在命名空间末尾留下两个尾随 ..
。
但是光标将停在那里,因此可以使用 Ctrl + Backspace
快速删除它们,然后再次使用 tab
跳转到 class.
的正文内部
目前我们只能创建新的 file
或 folder
。而且每次创建class声明都要写命名空间,非常烦人。
但是是否可以创建新的 C# class 文件并在其中自动生成适当的命名空间?或者那里有一些片段?
这目前是不可能的。您无法在 Visual Studio 代码的片段声明文件中检索当前文件名、目录或其他信息。
您可以创建一个片段,让您输入命名空间和 class 名称。但我想这对你帮助不大。尽管如此,它看起来像这样:
"Namespace and class": {
"prefix": "namespaceAndClass",
"body": [
"namespace ",
"{",
" class ",
" {",
"",
" }",
"}"
],
"description": "Create a namespace block with a class"
}
如果您真的想要一个根据文件路径填写正确命名空间和class名称的片段,您可以查看OmniSharp project.这可以让您了解如何改进 csharp-o 扩展,以便提供正确的数据作为插件内的建议。 但我认为这是一个比你自己输入 namespace 和 class 更大的任务。
This extension 提供上下文菜单按钮来添加新的 class,这将自动填充命名空间。
Visual Studio 自上次回答以来,代码发生了一些变化。它现在在片段中提供变量 TM_DIRECTORY
,但这是一个绝对路径。我已提交 an enhancement request 以提供可以转换为名称空间的相对路径。但老实说,我认为上面的扩展程序满足了我的需求(上下文菜单是一个加号)
使用 vscode 的当前变量和正则表达式系统的中度脏解决方案如下:
假设您的所有项目都在 /your/projects/directory/
所以项目 #1 在 /your/projects/directory/Project1/
项目 #2 在 /your/projects/directory/Project2/
等等
以下代码片段将为所有子目录创建命名空间实现:
Linux/MacOS
"Namespace declaration":
{
"prefix": "name",
"description": "Creates a new namespace declaration.",
"body":
[
"namespace ${TM_DIRECTORY/^\/your\/projects\/directory(\/([^\/]+))(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?(\/([^\/]+))?/${3:+.}${5:+.}${7:+.}${9:+.}${11:+.}${13:+.}${15:+.}${17:+.}${19:+.}/gi}",
"{",
"}"
]
}
Windows
"Namespace declaration":
{
"prefix": "name",
"description": "Creates a new namespace declaration.",
"body":
[
"namespace ${TM_DIRECTORY/^c:\\your\\projects\\directory(\\([^\\]+))(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?(\\([^\\]+))?/${3:+.}${5:+.}${7:+.}${9:+.}${11:+.}${13:+.}${15:+.}${17:+.}${19:+.}/gi}",
"{",
"}"
]
}
说明
- 该代码段与您的基本目录和最多十个子目录相匹配(第一个目录是必需的
(\/([^\/]+))
,而所有其他九个目录都是可选的(\/([^\/]+))?
) - 然后使用第一个匹配的目录创建命名空间指令
- 对于每个成功的附加子目录匹配,插入一个点
.
(${3:+.}
) 与该组的子匹配 ();对于不成功的组,不插入点并且子匹配为空
尽情享受吧:)
我发现这些扩展提供了创建 C# class 上下文菜单选项:
使用这个,首先它集中在命名空间的末尾添加任何附加部分。然后它集中在 class.
里面"Namespace and Class": {
"prefix": "nc",
"body": [
"namespace $WORKSPACE_NAME\n{\n\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t\n\t}\n}"
],
"description": "Generates namespace and class name"
}
发现此线程正在寻找相同的答案。
我没有找到任何现有的片段建议来生成正确的命名空间。
经过一些试验和错误后,我得到的最接近的,使用“variables" and "placeholder transformation”,是:
"Namespace and Class": {
"prefix": "nclass",
"body": [
"namespace ${RELATIVE_FILEPATH/[\\]|\w+\.cs$/./g}",
"{",
"\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t[=10=]\n\t}",
"}"
],
"description": "Generates namespace and class name"
}
这将从工作区中的文件夹结构生成命名空间,并使用文件名class命名。
但是这有一个问题,因为它会在命名空间末尾留下两个尾随 ..
。
但是光标将停在那里,因此可以使用 Ctrl + Backspace
快速删除它们,然后再次使用 tab
跳转到 class.