如何插入 4 个空格宽的制表符并将它们删除两个空格?

How can I insert tabs 4 spaces-wide and delete them by two spaces?

我喜欢 C++ 中的这种缩进:

示例:

class A {
    int x;
  public:
    int y;
}
int func() {
    return 1;
}

所以我想

澄清一下,我现在不会也不会使用真正的制表符。只有空格。

虽然问题可能更多是关于 C++ 格式化工具,但是,无论如何,这就是您在 Vim 中可以做到的:

Tab to insert indentation spaces 4 by 4

shift commands < and > should still act of a 4 spaces basis

" < and > move to the next 'multiple of four' cursor position
set shiftwidth=4 shiftround
" newly inserted tabs follow shiftwidth
set expandtab softtabstop=-1

Backspace to delete indentation spaces 2 by 2

inoremap <expr><BS> search('^\s\+\%#', 'bn', line('.')) ? printf('<C-O>%dX', shiftwidth() / 2) : '<BS>'

也就是说,如果光标前面只有空格,则按一次退格键会删除 shiftwidth() / 2 个字符。否则它只是一个退格键。

这可以在使用 cindent 时通过 cino-g 选项来完成。例如,在 .vimrc

中添加这一行
:set cinoptions=g2

另请阅读以下帮助主题以了解有关 C/C++ 缩进的更多信息:

:h C-indenting
:h 'cinoptions'
:h cinoptions-values
:h cino-g