如何将前导空格转换为制表符?

Mar*_*lík 5 vim

许多人使用空格而不是标签.我用它们两个.行的开头和第一个非空白字符的空格.启动新文档没有问题,如果我需要修改一个更好的适应使用格式.有时我仍然需要修复空间问题.

根据搜索和替换我可以做到:%s/spaces_for_tab/tab/g.它很简单,适用于很多情况.无论如何,我想只在行的开头重构空格.

Jo *_* So 5

这更像是一个正则表达式问题.要锚定在行的开头,请使用插入符号,例如

s/^        /\t/
Run Code Online (Sandbox Code Playgroud)

或者使用vim的内置功能:

:set tabstop=4  "four spaces will make up for one tab
:set noexpandtab  "tell vim to keep tabs instead of inserting spaces
:retab            "let vim handle your case
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我也更喜欢缩进标签和对齐空间.不幸的是,vim不能很好地处理这个问题(我不知道其他编辑器做了什么),所以我主要使用:set expandtab(也许看看:set softtabstop).


Mar*_*lík 2

我为它写了一个简单的函数。不管怎样,它只适用于 4 个空格的制表符。

fu! Fixspaces()
        while search('^\t* \{4}') != 0
                execute ':%s/^\t*\zs \{4}/\t/g'
        endwhile
endfu
Run Code Online (Sandbox Code Playgroud)

您可以提出更好的解决方案(如果存在),我会很乐意使用它。问题是这个函数也替换了字符串中的空格。