如何编辑.vimrc文件以将制表符替换为空格?

4
我正在编写一段Python脚本,将一些格式化的数据写入YAML文件。我使用制表符对文本进行格式化,但是我希望在写入YAML文件时将制表符转换为空格。这是因为我的YAML文件不接受制表符作为有效的缩进标记。
我尝试了以下方法: 第一步:转到你的主目录。
cd ~

步骤2:创建文件
vim .vimrc

步骤三:添加以下所述的配置

set smartindent

set tabstop=4

set shiftwidth=4

set expandtab

:retab

但是,这并不起作用。创建的YAML文件仍然有制表符。制表符没有转换为空格。
请建议我在我的.vimrc文件中进行哪些更改,以便将制表符转换为有效缩进的空格。
Python脚本:
template = open("/home/stack/horizon/openstack_dashboard/dashboards/mydashboard/mypanel/extracted_template.yaml","w")

networks = api.neutron.network_list_for_tenant(self.request,tenant_id,params={}) 

for n in range(0,len(networks)):
      n_name = networks[n]['name']
      print>>template,"\tprivate_net%d:"%n,"\n\t type: OS::Neutron::Net","\n\t properties:","\n\t  name:",n_name          

你使用任何可以在运行时修改选项卡设置的插件吗? - svlasov
这不是vim的问题。如果你希望初始输出包含空格而不是制表符,那么这是Python的问题。请展示给我们Python源代码。 - merlin2011
我按照@byaruhaf的建议成功地将制表符转换为空格。但问题仍然存在。转换后的制表符仍然被视为制表符,而在YAML文件中,这不是一个有效的缩进标记。 - user189942
3个回答

6

要将制表符转换为空格,请按以下顺序使用下面的命令:

:set noexpandtab
:retab!
:set expandtab
:retab!

我从观看这个vim cast得到了这个答案。 整理空格 Vim已经能够检测到yaml文件类型,因此您可以使用它来替换YAML文件中的所有TAB。在您的.vimrc文件中添加以下内容即可。
:autocmd FileType yaml execute  ':silent! %s#^\t\+#\=repeat(" ", len(submatch(0))*' . &ts . ')'

我所需要的不是打开文件后输入命令:retab!将制表符转换为空格。我需要自动化这个过程。我希望当我打开文件时,制表符已经被转换成了空格。为此,我需要编辑.vimrc文件进行永久设置,但我不知道如何操作。 - user189942
修改了答案,包括一个适用于你的vimrc的autocmd。 - byaruhaf
即使我已经添加了这些行到 .vimrc 文件中,但是制表符并没有转换成空格,这个方法对我也无效。 - user189942
将 autocmd 更改为搜索并替换 yaml 文件中的所有制表符,您可以尝试一下并告诉我是否有效。 - byaruhaf

4
如果您的主目录中没有.vimrc文件,请创建一个。编辑该文件并添加以下行:
set tabstop=4
set shiftwidth=4
set expandtab

0
要正确管理YAML文件,请编辑/etc/vim/vimrc.local.vimrc或其他VIM配置文件,并添加以下行:
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab nocindent smartindent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接