许多人使用空格而不是标签。我用它们两个。行的开头和第一个非空白字符的空格。启动新文档没有问题,如果我需要修改一个更好的适应使用格式。有时我仍然需要解决空间问题。
根据Search and replace我可以做:%s/spaces_for_tab/tab/g
。它很简单,适用于很多情况。无论如何,我想只在行的开头重构空格。
答案 0 :(得分:5)
这更多是正则表达式问题。要锚定在行的开头,请使用插入符号,例如
s/^ /\t/
或者使用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
顺便说一下,我也更喜欢缩进的标签和对齐的空格。不幸的是,vim doesn't handle this well(我不知道其他编辑会做什么),所以我主要使用:set expandtab
(可能会看到:set softtabstop
)。
答案 1 :(得分:2)
我为它编写了一个简单的函数。无论如何它只适用于4空格标签。
fu! Fixspaces()
while search('^\t* \{4}') != 0
execute ':%s/^\t*\zs \{4}/\t/g'
endwhile
endfu
你可以建议更好的解决方案,如果存在的话,我将愉快地使用它。 问题是这个func也替换了字符串中的空格。
答案 2 :(得分:-1)
如果有人感兴趣的话,我接受了马丁的回答并对其进行了改进:
function Fixspaces()
let ts = &tabstop
let pos = getpos('.')
if &expandtab
while search('^ *\t') != 0
silent execute ':%s/^ *\zs\t/'.repeat(' ', ts).'/g'
endwhile
echo 'Changed tabs to spaces'
else
while search('^\t* \{'.ts.'}') != 0
silent execute ':%s/^\t*\zs \{'.ts.'}/\t/g'
endwhile
echo 'Changed spaces to tabs'
endif
call setpos('.', pos)
endfunction
此函数根据expandtab
和tabstop
设置的值执行相应的操作,并记住光标所在的位置。