Vim是否可以在文件中保留四个空格的同时显示两个空格进行缩进?

Vim是否可以在文件中保留四个空格的同时显示两个空格进行缩进?,vim,indentation,Vim,Indentation,我想做其他人的项目,他用4个空格来缩进。我使用2,我的屏幕不够大,无法轻松地使用4个空格进行编辑 我可以将Vim配置为显示2个缩进空格,但将4写入文件吗?如果他使用真空格而不是制表符(听起来像),则不可以,在有4个空格的地方,Vim不能显示2个空格。但是,您可以告诉vim以下命令用制表符替换所有4个空格的组,然后将它们显示为2个空格 :set tabstop=4 ! display a tab as 4 columns :set shiftwidth=4 :set noexpandtab :gg

我想做其他人的项目,他用4个空格来缩进。我使用2,我的屏幕不够大,无法轻松地使用4个空格进行编辑


我可以将Vim配置为显示2个缩进空格,但将4写入文件吗?

如果他使用真空格而不是制表符(听起来像),则不可以,在有4个空格的地方,Vim不能显示2个空格。但是,您可以告诉vim以下命令用制表符替换所有4个空格的组,然后将它们显示为2个空格

:set tabstop=4 ! display a tab as 4 columns
:set shiftwidth=4
:set noexpandtab
:gg=G   ! convert the whole file to tabs
:set tabstop=2 !display a tab as 2 columns
:set shiftwidth=2
当你准备好提交你的作品时

:set tabstop=4
:set shiftwidth=4
:set expandtab
:%retab

应该把它换回来

该帮助提供了不同选项卡宽度的类似用例的示例,请参见
:help retab example

将其调整为减半/加倍空间:

:autocmd BufReadPost,BufWritePost  * %substitute/^\( \+\)\1/\1/e
:autocmd BufWritePre               * %substitute/^ \+/&&/e
这与所问的正好相反

是的,你可以!如果你有“隐藏”选项,你可以试试这个

:syntax match spaces /  / conceal cchar= "Don't forget the space after cchar!
:set concealcursor=nvi
:set conceallevel=1
以下是这些命令的作用:

  • 将2个空格的替换字符设置为1个空格
  • 在正常、可视和插入模式下,隐藏光标下的文本
  • 启用用一个字符隐藏文本
您仍然需要将
选项卡停止
软选项卡停止
移位宽度
设置为
4
,但它看起来和感觉上都像是
2
!但是,当您编写文件时,它实际上是
4

如果要关闭隐藏功能,可以执行以下两种操作之一:

  • 删除隐藏规则
    :语法清除空格
  • 允许在光标下展开隐藏文本
    :设置隐藏光标=

  • 太好了!它是在所有文件上运行,还是仅在当前文件上运行?在所有文件上都运行
    *
    。请参阅
    :帮助autocmd patterns
    ,了解如何影响它。是否有相反的方法?将2个空格设置为4个空格?@Uri请参见。注意,我还没有试过。