我的文件名是
some-fancy-ui.component.html
我想使用 vscode 片段将其转换为
SOME_FANCY_UI
所以基本上
目前我有
'${TM_FILENAME/(. )(-)(. )/${1:/upcase}${2:/_}${3:/upcase}/g}'
这给了我这个
'设置-打印机-服务器-LIST.COMPONENT.HTML'
文档没有解释如何将替换与其对正则表达式组的转换结合使用。
我在 VSCode 中尝试制作片段并了解一些新的正则表达式替换语法。
我想要做的是根据文件名填充模板的部分内容。我可以去掉不需要的扩展名,但我不能在下一个变量中大写相同的值。
我有这两行:
"@Controller('/${1:${TM_FILENAME_BASE/(.*)\\.controller/$1/}}')",
"export class ${1/(.*)/${1:/capitalize}/}Controller {",
第一个剥离文件名并将值捕获为模板的 $1。在第二行中,我尝试使用 $1 中的值并通过大写过滤器运行它。
我试过的任何东西都不起作用,尽管用头敲击键盘感觉很好。
有没有人破解这个坚果?
查看用户定义片段的vscode 文档,似乎使用正则表达式转换,您可以执行 if/else 条件。
但是,我似乎找不到任何这样的例子,而且我正在努力理解仅基于 BNF 的正确语法。
有人可以解释一下这个语法吗?
例如,
假设我有一个这样的片段:
"body": [
"let color = '${1|white,black|}';",
"let hex = '${???}';"
]
Run Code Online (Sandbox Code Playgroud)
如果color==white,我想要十六进制输出#fff,否则如果黑色#000。
我使用的是 VS Code 版本:1.40.0。
为了加快我的开发速度,我需要设置自己的键绑定以在代码中输入特定文本(“ {|print_x} ”)。我设法做到了这一点,但如果我粘贴文本后类型光标立即跳到“ { ”之后,那就更好了。
所以:{ 这里输入光标 |print_x}。
keybindings.json中的代码:
{
"key": "shift+alt+y",
"command": "type",
"args": { "text": "{|print_x}", },
"when": "editorTextFocus"
}
Run Code Online (Sandbox Code Playgroud)
我认为使用这样的数组可能会起作用,但不幸的是文本参数需要是字符串。
"args": { "text": [ "{" , "|print_x}" ], }
Run Code Online (Sandbox Code Playgroud)
有办法做到吗?如果是这样,我将非常感激。
keymapping key-bindings cursor-position visual-studio-code vscode-snippets
为了在未来赢得一些时间,我正在尝试为 VsCode 创建一些片段。
有上下文。我有一个tmp.hpp我想要的文件
#ifndef TMP_HPP_
#define TMP_HPP
#endif
Run Code Online (Sandbox Code Playgroud)
我的问题是,我希望能够TMP按我想要的方式进行修改。为此,我希望它成为默认值最后,如果我决定修改TMP,WHATEVER我想强制WHATEVER为大写。
更准确地说,我希望 my${1}具有默认值:${TM_FILE_BASE}并且我也希望${1}和/或 my${TM_FILE_BASE}是${/upper}
这是我目前得到的:
"Creates a ifndef": {
"prefix": "ifndef",
"body": [
"#ifndef ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
" #define ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}_HPP_",
"",
"#endif"
],
"description": "Creates a basic ifndef"
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我只想保留第一个点之前的单词:
user.entity.ts
Run Code Online (Sandbox Code Playgroud)
当前代码:
${TM_FILENAME_BASE/([^.]+)/${1:/upcase}/}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这只是转换了第一部分,而不是把它分开:
USER.entity
Run Code Online (Sandbox Code Playgroud) 我发现自己经常想用console.log(...). 例如,如果我有以下代码:
let myVar = "Hello";
myVar.slice(1,3);| // '|' means where the cursor is after typing in the last line
Run Code Online (Sandbox Code Playgroud)
从那里我想将该行包装在 a 中,console.log这样它就变成:
let myVar = "Hello";
console.log(myVar.slice(1,3));
Run Code Online (Sandbox Code Playgroud)
我可以在 VS Code 中创建一个快捷方式来执行此操作吗?我有一个扩展应该可以做到这一点,但 80% 的情况下它会出错(例如将 放在 the)后面;,所以我只想执行一个总是正确的快捷命令,而不必安装扩展程序。我该怎么做?