我真的想不出来怎么做,除了在4个空格上进行查找替换并转换为制表符(版本0.10.2),我无法解决这个问题。我想不到有哪个编辑器/IDE没有特定的功能来完成这个任务。VS Code有吗?
我真的想不出来怎么做,除了在4个空格上进行查找替换并转换为制表符(版本0.10.2),我无法解决这个问题。我想不到有哪个编辑器/IDE没有特定的功能来完成这个任务。VS Code有吗?
自从修复了https://github.com/Microsoft/vscode/issues/1228之后,编辑器支持这个功能。只需执行以下步骤:
F1
,indentationToSpaces
或indentationToTabs
(根据您的需求),Enter
。[\t]
改为[\t]+
。 - DersCTRL
+F2
选择所有出现的制表符SPACE
键n次快进到2020/2021年,有一些扩展可以帮助我们进行这种转换。我刚需要这个功能(因此我找到了这篇文章),在搜索扩展时,我发现了以下几个:
按F1,然后在文本框中输入“将缩进转换为空格”或其他您想要的内容。
^(([^\t]*\t+)?([^\t]{4})*?[^\t]{0})\t
替换为$1
(4个尾随空格)。
2. 使用^(([^\t]*\t+)?([^\t]{4})*?[^\t]{1})\t
替换为$1
(3个尾随空格)。
3. 使用^(([^\t]*\t+)?([^\t]{4})*?[^\t]{2})\t
替换为$1
(2个尾随空格)。
4. 使用^(([^\t]*\t+)?([^\t]{4})*?[^\t]{3})\t
替换为$1
(1个尾随空格)。
在每次替换后,重复按下Ctrl+Alt+Enter,直到找不到结果为止。
^(([^\t]*\t+)?([^\t]{4})*?[^\t]{0})\t
替换为$1
(2个尾随空格)。
2. 将^(([^\t]*\t+)?([^\t]{4})*?[^\t]{1})\t
替换为$1
(1个尾随空格)。
使用 命令面板 中的 将缩进转换为制表符
或 将缩进转换为空格
命令。
默认情况下,VS Code 会尝试检测编辑器选项卡使用的缩进样式,并在按下 tab 键时匹配该行为。您可以通过将 "editor.detectIndentation": false
放入 settings.json 文件 中来禁用该行为。
如果您保留缩进类型检测功能,则可以使用命令面板中的 使用制表符进行缩进
命令来为尚未缩进的新文件设置缩进样式为制表符,或者使用 使用空格进行缩进
来设置为空格。
如果您将 editor.detectIndentation
设置为 false
,则会生效 editor.insertSpaces
设置,其默认值为 true
,这会导致 tab 键插入空格而不是实际的制表符。
另请参阅editor.tabSize
设置(制表符的可视宽度,以及在editor.insertSpaces
为true
且editor.detectIndentation
为false
时插入的空格数)。
您还可以通过在settings.json文件中将它们包装在"[<language-mode-name>]: { ... }"
块中来按语言模式配置这些设置。
您可能还对如何在VS Code中跨多个文件执行命令?感兴趣。
(重点是固定宽度 - 这不是制表符敏感的)
您可以使用查找小部件(ctrl/cmd+f):
要从制表符转换为空格,可以启用正则表达式模式 (alt+r) 并搜索 \t
,或将一个制表符粘贴到搜索字段中,然后在替换字段中输入所需的空格数,然后按下“全部替换”按钮或使用其工具提示中显示的键盘快捷键。
要从空格转换为制表符,启用正则表达式模式,并搜索 {1,N}
,其中 N
是您所需的制表位宽度,然后在替换字段中输入 \t
并替换所有。如果您想要保留独立的单个空格,请尝试在搜索输入中输入 {2,N}|((?<= {N-1}) )
。请注意,由于编辑器制表位行为的原因,这不能保留精确的视觉间距(制表符将与制表位对齐)。
要在多个文件中进行替换,请使用“搜索视图”,该视图的界面类似于查找小部件。您可以使用扩展搜索控件(使用三个点的“切换搜索详细信息”按钮)来排除/包含全局模式进行替换。
我尝试着开发一些更加灵敏的制表位,基于原生VS Code的解决方案,但是没有取得太多进展,可能还遇到了VS Code的一个bug。也许有一天我会回来继续研究这个问题,但是我认为在任何允许用户选择制表位宽度,并且使用或希望使用非前导缩进的项目中,你都不会得到理想的结果-至少在IDE中常见的制表位行为中不会。