在 Visual Studio 中编写条件片段?

问题描述 投票:0回答:2

我正在尝试创建一些 Visual Studio 片段来减少我的工作量。

我使用快捷方式

transpos
创建了一个片段,让我只需四个选项卡即可更改 Unity 变换位置:

但是有时,您只需要更新 X 位置。有时您只需要更新 X 和 Y,但保持 Z 不变。

Var
关键字

填写0

我知道理论上我可以创建当前代码片段的克隆,将其快捷方式更改为

transposX
,手动编辑代码,使其保持
y
z
不变,但我必须对所有 7 个代码段执行此操作变体。

是否有可能让这一切发生在一个条件

transpos
片段中?我的想法是,您选择转位片段,然后它会以一种或另一种方式询问您是否想要哪种变体(
x
y
z
xy
xz
yz
xyz
)。

我觉得这比编写 7 个不同的片段并将它们全部导入更容易编码。

这是我当前的代码片段:

<Snippet>
  <Code Language="CSharp">
    <![CDATA[$transformName$.position = new Vector3($transformName$.position.x + $varX$, $transformName$.position.y + $varY$, $transformName$.position.z + $varZ$);]]>
  </Code>
  <Declarations>
    <Literal>
      <ID>transformName</ID>
      <ToolTip>Variable name of the transform.</ToolTip>
      <Default>transform</Default>
    </Literal>
    <Literal>
      <ID>varX</ID>
      <ToolTip>Position X.</ToolTip>
      <Default>Var</Default>
    </Literal>
    <Literal>
      <ID>varY</ID>
      <ToolTip>Position Y.</ToolTip>
      <Default>Var</Default>
    </Literal>
    <Literal>
      <ID>varZ</ID>
      <ToolTip>Position Z.</ToolTip>
      <Default>Var</Default>
    </Literal>
  </Declarations>
</Snippet>
visual-studio code-snippets
2个回答
1
投票

您只需将每个 x,y,z Literal 的默认值更改为 0。

然后,如有必要,您只需按 Tab 键 3 次或输入一个变量而不是 0。

此外,值得一提的是,“new”关键字与垃圾收集相关,最佳实践是将数据缓存在临时变量中,修改它,然后将原始变量设置为该变量。 正如这里所做的:

    <Snippet>
      <Declarations>
        <Literal>
          <ID>varPos</ID>
          <ToolTip>Variable name of the position.</ToolTip>
          <Default>position</Default>
        </Literal>
        <Literal>
          <ID>varT</ID>
          <ToolTip>Variable name of the transform.</ToolTip>
          <Default>transform</Default>
        </Literal>
        <Literal>
          <ID>varX</ID>
          <ToolTip>x position.</ToolTip>
          <Default>0</Default>
        </Literal>
        <Literal>
          <ID>varY</ID>
          <ToolTip>y position.</ToolTip>
          <Default>0</Default>
        </Literal>
        <Literal>
          <ID>varZ</ID>
          <ToolTip>z position.</ToolTip>
          <Default>0</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[Vector3 $varPos$ = $varT$.position; position.x += $varX$; position.y += $varY$; position.z += $varZ$; $varT$.position = $varPos$;$end$]]>
      </Code>
    </Snippet>

0
投票

无法使代码片段成为有条件的,但正如前面的答案中提到的,您可以更新默认值。这是我在需要多个片段的情况下使用的策略。

  1. 确定最少的片段数量,以覆盖您正在处理的内容。我尽量保持最小值不超过 4。

  2. 不要填写代码中出现的值,而是按逻辑优先顺序在每个变量的主区域上方添加注释行。然后,每个遗嘱都会显示可以按顺序接受或更改的默认值;快速通过。让生活比跳来跳去填补替换更容易。

这是一个,最初跨越多行,我在注释中添加了所有默认值。填写,相对于默认值来说很容易:

   -- Create $schema$.$table$.$column$ To $targetSchema$.$targetTable$ FK

      alter table [$schema$].[$table$]  ...
  1. 使代码片段在不同的编辑器中保持打开状态,以根据需要调整默认值。 VS 在每次使用时重新加载代码片段,因此可以方便地更改频繁的值。

  2. 为特定场景创建 Visual Studio 替换正则表达式。我已经学习了正则表达式和 Visual Studio 的正则表达式版本以及某些情况(例如一个行项目),可以使用替换正则表达式(例如交换值)

    Aval1 = Aval2

\s([\w+])[\s=)([^\s;]+)

更换

$2 = $1;  

结果

Aval2 = Aval1;

括号中的所有内容都是匹配的。每场比赛都有一个替换号码。上面将匹配 1 替换为匹配 2。不匹配的内容将被丢弃。

  1. 在您的代码片段中更新默认值以满足特定需求(请参阅#3)。
  2. 10 年前,Visual Studio 内置了一个宏编辑器,但后来被删除了。 ())。我使用 Notepad++ 和 Ultra edit 宏编辑器来动态创建宏来执行特定的重复性操作。

这确实是我过去 25 年的工作方式。事实上,您正在做代码片段,这可能使您领先于 75% 的 Visual Studio 用户。欢迎来到俱乐部。

© www.soinside.com 2019 - 2024. All rights reserved.