Answers:
您可以使用该:retab命令。从
:help :retab
<Tab>使用给定的新tabstop值,用新的空白字符串替换所有包含a的空白序列。如果您未指定新的制表位大小或为零,则Vim使用当前值'tabstop'。[...]'expandtab'启用后,Vim用适当数量的空格替换所有制表符。
请注意,该命令接受一个范围,因此您可以进行视觉选择,然后仅:retab选择行。
您可以:retab按照所述使用,但是,这会将所有选项卡更改为空格,而不仅仅是行首的选项卡
所以这(⇥一个制表符):
if :; do
⇥echo "⇥hello"
end
更改为(␣空格字符在哪里):
if :; do
␣␣echo "␣␣hello"
end
在某些情况下,这可能会产生意想不到的副作用,而将空格更改为制表符时,这甚至成为更大的问题!
因此,我在行的开头编写了一个仅更改制表符/空格的小函数:
" :retab changes *everything*, not just start of lines
fun! Retab(expandtab)
let l:spaces = repeat(' ', &tabstop)
" Replace tabs with spaces
if a:expandtab
silent! execute '%substitute#^\%(' . l:spaces . '\)\+#\=repeat("\t", len(submatch(0)) / &tabstop)#e'
" Replace spaces with tabs
else
silent! execute '%substitute#^\%(\t\)\+#\=repeat("' . l:spaces . '", len(submatch(0)))#e'
endif
endfun
在此版本中,您必须expandtab在函数调用中手动指定(即:call Retab(1),将制表符更改为空格),但您也可以像对其一样进行修改,以采用&expandtab(即已使用&tabstop)的当前值:retab。(我碰巧更喜欢手动指定它)。
a的if a:expandtab意思吗?
set expandtab在.vimrc中,则autocmd BufWritePre * :call Retab(&expandtab)-缩进将更改为制表符,而不是空格。
Vim提供了使用给定的新tabstop(例如)值!retab将所有序列替换为<Tab>新的空白字符串的命令:set tabstop=2,但是字符串内的所有制表符都可以修改(例如,在C程序中,应\t避免使用此命令)!
因此,也可以使用以下命令将所有选项卡更改为空格:
:%s/\t/ /g
或@Shahbaz建议:
:%s/^\t\+/ g
因此,仅缩进中使用的制表符被转换。
说明:
%代表整个缓冲区/文件(:help :%)s代表替代品(:help sub-replace-special)\t,或^I代表标签 -每个选项卡使用所需数量的空格g -代表全局,它将转换同一行中出现的多个制表符然后校正整个文件的压痕,您可以尝试:gg=G。检查:重新缩进严重缩进的代码以获取更多详细信息。
要默认使用空格而不是制表符,您需要在.vimrc文件中添加以下设置:
set tabstop=2 " (ts) width (in spaces) that a <tab> is displayed as
set expandtab " (et) expand tabs to spaces (use :retab to redo entire file)
set shiftwidth=2 " (sw) width (in spaces) used in each step of autoindent (aswell as << and >>)
替代解决方案是使用 tidy
有关:
%s/^\t\+/ g以便仅转换缩进中使用的制表符。同样,gg=G对于像python这样的语言可能会造成灾难性的后果。
尝试使用:
expand -t 4 input_filename output_filename
expand是用于将制表符转换为空格的命令行工具,您可以从Shell或使用来运行它们:!expand。
expand啊
:%!expand -t 4在vim内部进行操作。更好的是,您还可以使用当前的偏移宽度选项::exe '%!expand -t ' . &shiftwidth
为了完整=起见,在您指定制表符替换为空格之后,也可以用于修复缩进。在普通模式下,您可以通过键入来进行操作:set expandtab。然后=可以以两种方式使用:
=将修复所选代码块的缩进。gg=G将修复整个文件,gg将光标移至文件的开头,然后=应用,然后G将光标移至文件的末尾。参考:链接
:h vim-faq并搜索/tab characters。难记的标签是:h faq-14.16。