用vim中的空格替换卡舌

用vim中的空格替换卡舌,vim,vi,Vim,Vi,我想在gVim中将制表符转换为空格。我在我的\u vimrc中添加了以下行: set tabstop=2 它可以在两个空格处停止,但看起来仍然像是插入了一个制表键(之后我尝试使用h键来计算空格) 我不知道该怎么做才能使gVim将选项卡转换为空格?试试看 set expandtab 用于软标签 要修复预先存在的选项卡,请执行以下操作: :%s/\t/ /g 我使用了两个空格,因为您已经将tabstop设置为2个空格。IIRC,类似于: set tabstop=2 shiftwidth=2

我想在gVim中将制表符转换为空格。我在我的
\u vimrc
中添加了以下行:

set tabstop=2
它可以在两个空格处停止,但看起来仍然像是插入了一个制表键(之后我尝试使用h键来计算空格)

我不知道该怎么做才能使gVim将选项卡转换为空格?

试试看

set expandtab
用于软标签

要修复预先存在的选项卡,请执行以下操作:

:%s/\t/  /g
我使用了两个空格,因为您已经将tabstop设置为2个空格。

IIRC,类似于:

set tabstop=2 shiftwidth=2 expandtab
我们应该做到这一点。如果您已经有了选项卡,那么接下来使用一个漂亮的全局RE将它们替换为双空格

如果已经有要替换的选项卡

:retab

根据其他答案打开expandtab后,根据新设置转换现有文件的非常方便的方法是:

:retab

它将工作在当前缓冲区。

如果要保持<代码> \t>代码>等于8个空格,则考虑设置:

   set softtabstop=2 tabstop=8 shiftwidth=2

这将为每个
按钮提供两个空格,但代码中的实际
\t
仍将被视为8个字符。

将以下行添加到.vimrc

set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>
设置扩展选项卡
设置tabstop=4
设置shiftwidth=4
地图:retab:wq!
在vim中打开一个文件并按F2键
制表符将转换为4个空格,文件将自动保存。

本文提供了一个优秀的vimrc脚本,用于处理制表符+空格,并在它们之间进行转换

提供了以下命令:

Space2Tab仅以缩进形式将空格转换为制表符

Tab2Space将制表符转换为空格,仅缩进

RetabIndent执行Space2Tab(如果设置了“expandtab”),或Tab2Space(否则)

每个命令都接受一个参数,该参数指定选项卡列中的空格数。默认情况下,使用“tabstop”设置

资料来源:

“返回缩进(行首的所有空格),从
如果what=1,则从制表符到空格,否则从空格到制表符。
“转换为选项卡时,结果没有多余的空格。
函数!缩进(缩进,什么,列)
设spccol=重复(“”,a:cols)
让结果=替换(a:缩进,spccol,'\t',g')
让结果=替换(结果,'\+\ze\t',''g')
如果a:what==1
让结果=替换(结果,'\t',spccol,'g')
恩迪夫
返回结果
端功能
“转换用于缩进的空白(在第一个非空白之前)。
“what=0(将空格转换为制表符)或1(将制表符转换为空格)。
cols=每个选项卡上有列数的字符串,或为空以使用“tabstop”。
光标位置已恢复,但光标将处于不同的位置
“行缩进中的字符数更改时的列。
功能!缩进转换(第1行、第2行、什么、列)
让savepos=getpos('.'))
让cols=空(a:cols)&答:科尔斯
执行一个命令:第1行。“,”。a:第二行。”s/^\s\+/\=缩进(子匹配(0),a:what,cols)/e'
调用histdel('搜索',-1)
调用setpos('.',savepos)
端功能
命令-纳格斯=-范围=%Space2Tab调用IndentConvert(、0、)
命令-纳格斯=-范围=%Tab2Space调用IndentConvert(、1、)
命令-纳格斯=-范围=%RetabIndent调用IndentConvert(,&et,)

这比我第一次搜索解决方案时这里的答案帮了我更多的忙。

第一次搜索文件中的选项卡:/^I :设置展开选项卡 :retab


将起作用。

gg=G
将重新删除整个文件,并删除我从同事那里获得的文件中的大部分(如果不是全部的话)选项卡

这对我很有用:

您可以看到第一次执行此操作的选项卡:

:set list
然后,要更换选项卡,请执行以下操作:

:set expandtab
然后

现在,所有选项卡都已替换为空格 然后,您可以返回正常查看,如下所示:

:set nolist

expand
是一个unix实用程序,用于将制表符转换为空格。如果您不想在vim中设置任何内容,可以使用vim中的shell命令:

:!% expand -t8

这让它对我有用:

:set tabstop=2 shiftwidth=2 expandtab | retab


哦,那就是“%!expand-t2”,或者你可以使用:retabwhat,如果我想用空格保存它呢?现在,当我:wq并再次打开该文件时,我将返回到tabs@Gorkem将这些命令放入您的.vimrc中,以便vim在每个会话中使用这些设置。这意味着,修复将在只需要一个空格的位置插入两个空格。您可以按照Nick的建议进行替换,而不必进行替换-即重新设置。这将根据tabstop中设置的空格数重新标记所有现有选项卡。绝妙提示!Vim向我显示了一个完全识别的文件,而cat(linux cmd)显示了不规则的识别。我只是在Vim
set ts=4
中将2个空格改为4;我使用ts=4,并且理解为什么人们(比如Linux内核团队)使用ts=8(他们不使用expandtab-我使用)。有没有办法在vim内部将空格转换为制表符?@cwd将空格替换为制表符(
^I
,它来自
Ctrl-v
,然后
制表符
)可以工作,例如,如果您当前的制表符为4个空格:
:%s/^I/g
谢谢您提到的
softtabstop
,我想这是一个杀手级功能。但是我们如何才能让retab ask确认每次出现的制表符?作为Vim,它也可以在视觉上选定的区域工作:)谢谢您教我一个新东西。在看到您的评论之前,我已经使用了多年乏味的
:%s/\t//g
。您甚至可以对命令行上打开的所有文件执行
:args retab | w
操作,例如,
vim*.txt
。有人知道哪个版本的vim有:retab吗?我的7.3.322没有。第一部分,你能解释一下它会用空格代替标签吗?太棒了!你能解释一下gg=G是做什么的吗?这正是我想要的。我在sublime上有html,当我在vim中粘贴它时,它被疯狂地缩进。现在看起来很干净。@jes516
gg
将光标移动到缓冲区的开头<代码>=:!% expand -t8
:set tabstop=2 shiftwidth=2 expandtab | retab