vim 缩进不保留间距

vim indention not preserving spacing

下面是我在 vim 中输入的示例文本,只有空格没有使用制表符。

dog;
dogcat
  dogcatmoose
box
  box car
woop
  woopadoop

假设我突出显示所有代码,并使用缩进 > 发生的情况如下:

    dog;
    dogcat
    dogcatmoose
    box
    box car
    woop
    woopadoop

原始间距未保留。我不想这样,我希望保留间距,所以它看起来像这样:

  dog;
  dogcat
    dogcatmoose
  box
    box car
  woop
    woopadoop

我用制表符而不是空格进行了测试。使用制表符时,缩进会保留制表符。 这是我的 vimrc。这里有一些价值导致这个问题吗?我可以添加一个值来解决问题吗?

set number
set nowrap
set linebreak
set tabstop=4
set softtabstop=4
set shiftwidth=4
set shiftround
set expandtab
set title
set mouse=a
set hlsearch
set smarttab
set autoindent
set smartindent
set background=dark
filetype indent on
set filetype=html
set smartindent
set nocompatible
filetype off
set nobackup noswapfile
set clipboard=unnamed
let &colorcolumn=join(range(81,999),",")
highlight ColorColumn ctermbg=235 guibg=#2c2d27
"Stop vm from indenting on comment out sections starting with "#"
set indentkeys-=0#

我的建议是去掉 set shiftround

似乎 set shiftround 加上 set shiftwidth=4 导致了这种行为。 shiftround 尝试将文本缩进为 4 的倍数(由 shiftwidth 设置),而您的文本缩进为 2 space。因此,当您执行 > 时,shiftround 会使所有行具有相同的 4-space 缩进。您可以使用相同的文本进行试验,但使用 4-space 缩进;您的设置将保留缩进。