很多人使用空格而不是制表符。我两个都用。制表符在行首,空格从第一个非空白字符开始。开始新文档没有问题,万一我不得不修改一个更好地适应使用格式。但有时我需要修复空格问题无论如何。
根据Search and replace,我可以只做:%s/spaces_for_tab/tab/g
。它很简单,适用于很多情况。无论如何,我只想重构行首的空格。
很多人使用空格而不是制表符。我两个都用。制表符在行首,空格从第一个非空白字符开始。开始新文档没有问题,万一我不得不修改一个更好地适应使用格式。但有时我需要修复空格问题无论如何。
根据Search and replace,我可以只做:%s/spaces_for_tab/tab/g
。它很简单,适用于很多情况。无论如何,我只想重构行首的空格。
4条答案
按热度按时间ztyzrc3y1#
这更像是一个 regex 问题。要在行首锚,请使用插入符号,例如:
或者使用Vim的内置功能:
顺便说一句,我也喜欢用制表符来缩进,用空格来对齐。不幸的是,vim doesn't handle this well(我不知道其他编辑器是怎么做的),所以我主要使用
:set expandtab
(也许可以参见:set softtabstop
)。nhhxz33t2#
我已经写了一个简单的函数。无论如何,它将只为4空格制表符工作。
你可以建议更好的解决方案,如果存在的话,我会很高兴地使用它。问题是这个func也会替换字符串中的空格。
ssgvzors3#
大卫的回答非常优雅,但它没有解决混合了制表符和空格的前导空格。例如,要转换如下行:
你必须知道制表符的位置,以确定需要多少空格来替换
<TAB>
并到达下一个制表位。我下面的解决方案,虽然没有大卫的那么简洁,但解决了这个问题。它还允许我选择使用前导空格的方式,而不依赖于&expandtab。我将感谢任何改进我的代码的建议...sigwle7e4#
如果有人感兴趣的话,我把马丁的答案改进了一下:
此函数根据
expandtab
和tabstop
设置的值执行相应的操作,并记住光标的位置。