Vim配置:如何仅在保存时扩展制表符?

3

我喜欢使用制表符,而不是空格来进行缩进。

但是在保存文件时,我希望将制表符转换为4个空格的组。(因为文件可能会被打开和编辑在其他环境中)当然,如果我再次打开该文件,则应将这些生成的空格转换回制表符。(假设原始文本中没有连续4个空格)

2个回答

2
在你的.vimrc文件中:
set noexpandtab
set tabstop=4
set shiftwidth=4
fun MyRetab()
    set expandtab
    retab
    set noexpandtab
endfun
au FileWritePre *.YOURFILEEXTENSION call MyRetab()

但是我不知道你所说的"如果我再次打开文件,那些空格仍然应该被识别为制表符"是什么意思。

如果您在文件中写入空格而不是制表符,则很难撤消。 编辑:请参阅super retab wiki页面以撤消它!

注意如果您的源字符串内容中有制表符,则这也将替换该字符!


我的意思是,如果我重新打开文件,从制表符生成的空格应该在编辑区域中恢复为制表符。 - Determinant
谢谢!那就是我原本问题的确切答案。但是我更喜欢Prince Goulash提出的更安全的方式。 - Determinant

1
除了Zsolt Botykai的答案之外,您可以尝试使用retab!,它会尝试在适当的位置将空格替换为制表符。当我刚刚尝试时,这似乎效果很好,但我得到了一些错误的制表符。我想这取决于您假设没有其他4个空格序列而不是扩展制表符的好坏。 然而...这一切似乎都是一个冒险。根据我的经验,当有编码标准时,从一开始就遵守它们总是最容易的。以这种方式“修复”文件只会带来麻烦。
我认为Vim在仅使用空格的情况下模拟类似制表符的行为做得很好。您尝试过使用smarttabexpandtab吗?

你提出的组合正是我所需要的! - Determinant

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