【问题标题】:How can I select a part of TM_DIRECTORY variable?如何选择 TM_DIRECTORY 变量的一部分?
【发布时间】:2019-07-31 07:37:22
【问题描述】:

我想在 VScode sn-p 上选择 TM_DIRECTORY 变量的一部分。我的意思是我想在 code-sn-p 文件中选择 d:\Projects\Hakhsin\hakhsin\tests\Setup 中的 Tests\Setup。看看这个:

// On snippet file
"PHP Class": {
        "scope": "",
        "prefix": ["phpClass"],
        "body": [
            "<?php\n\nnamespace ${TM_DIRECTORY/(?<=(?:[\w:\\]hakhsin\\)).+(?=\\)//};\n\nclass ${TM_FILENAME_BASE} {\n\t$2\n}"
        ],
        "description": "New PHP Class"
    },

我想得到这个结果:


namespace Tests\Setup;

class StorageFactory {

}

但我得到了这个结果:

<?php

namespace d:\Projects\Hakhsin\hakhsin\tests\Setup;

class StorageFactory {

}

【问题讨论】:

    标签: visual-studio-code vscode-settings vscode-snippets


    【解决方案1】:

    看来您不能在 sn-p 转换中使用其他变量中的变量。

    你可以试试这个比你的更“动态”但并不完美的代码:

    "${TM_DIRECTORY/([^\\\\]*\\\\){4}(.*)/${2:/capitalize}/}",
    

    {4} 即如果目录结构中有 4 个段位于所需部分之前,例如 d:\Projects\Hakhsin\hakhsin\tests\Setup 这些段是 d:\Projects\Hakhsin\hakhsin\。如果这个段数是已知的并且比我展示的 sn-p 稳定。

    我怀疑这些段的数量在一个项目中会有所不同,但在项目之间可能会很好 - 如果是这样,您只需要更改每个项目的 {x} 项即可。

    【讨论】:

      【解决方案2】:

      我解决了,但它不是动态的。

      namespace ${TM_DIRECTORY/(.*hakhsin\\\\)(.*)/${2:/capitalize}/};
      

      有没有更好的方法?像这样的:

      namespace ${TM_DIRECTORY/(.*${WORKSPACE_NAME}\\\\)(.*)/${2:/capitalize}/};
      

      这是结果:

      <?php
      
      namespace Tests\Setup;
      
      class StorageFactory {
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多