我如何 select TM_DIRECTORY 变量的一部分?

How can I select a part of TM_DIRECTORY variable?

我想 select VScode 代码段上 TM_DIRECTORY 变量的一部分。我的意思是我想要 select Tests\Setup 代码片段文件中的 d:\Projects\Hakhsin\hakhsin\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\n}"
        ],
        "description": "New PHP Class"
    },

我想得到这个结果:


namespace Tests\Setup;

class StorageFactory {

}

但我得到了这个结果:

<?php

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

class StorageFactory {

}

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

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

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

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

这是结果:

<?php

namespace Tests\Setup;

class StorageFactory {

}

您似乎无法在片段转换中使用其他变量内部的变量。

您可以试试这个比您的代码更 "dynamic" 但不完美的代码:

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

里面的{4}是如果你在目录结构中你想要的部分之前有4个段,比如d:\Projects\Hakhsin\hakhsin\tests\Setup段是d:\Projects\Hakhsin\hakhsin\。如果该段数已知且稳定,则比我显示的代码段效果更好。

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