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