我从互联网上复制了一些有2个空格缩进的代码,我想把它改成4个空格的缩进.我想知道是否有一个简短的vim例程来完成任务而不必编写vim脚本?以下是我目前使用HTML文件执行此操作的方法:
简而言之 qa0vt<yp<esc>jq
宏无法显示空白行或不以"<"开头的行.我不知道如何将此解决方案扩展到非HTML文件.
Daa*_*ker 162
更改缩进的一般方法是更改tabstop:
将文件粘贴到空缓冲区中,然后:
:set ts=2 sts=2 noet
:retab!
Run Code Online (Sandbox Code Playgroud)
这会将每2个空格更改为一个TAB字符,然后:
:set ts=4 sts=4 et
:retab
Run Code Online (Sandbox Code Playgroud)
这会将每个TAB更改为4个空格.
这种方法的优点是你也可以反过来使用它,例如转换为4到2个空格.
per*_*eal 55
用:set shiftwidth=4
和可能是可能的gg=G
.
spr*_*pro 27
我所做的与esneider和cforbish的方法非常相似,但输入的速度要快一些:
:%s/^\s*/&&
Run Code Online (Sandbox Code Playgroud)
简单地用前导空格替换前导空格(空格或制表符)(&
用匹配的表达式替换).
小智 8
这是一个非常古老的问题,但是所有答案都是......错误......Vim 有一个非常简单的方法来重新缩进整个文件。我是在编写自己的函数来执行此操作后才了解到这一点的,所以我也处于同样的无知状态;)
类型
gg=G
Run Code Online (Sandbox Code Playgroud)
这是假设你将制表符设置为你喜欢的,(所以对于OP来说它是ts=4)
我从http://vim.wikia.com/wiki/Fix_indentation了解到这一点,其中提到
在正常模式下,输入 gg=G 将重新缩进整个文件。这是一个特例;= 是一个运算符。就像 d 或 y 一样,它将作用于您使用光标移动命令移动的任何文本。在这种情况下, gg 将光标定位在第一行,然后 =G 从当前光标位置重新缩进到缓冲区末尾。