如何插入 4 个空格宽的制表符并将它们删除两个空格?
How can I insert tabs 4 spaces-wide and delete them by two spaces?
我喜欢 C++ 中的这种缩进:
- 缩进是 4 个空格宽,
- 除了
private
/public
/protected
说明符,它们仅缩进 2,并且不会改变后续行的缩进。
示例:
class A {
int x;
public:
int y;
}
int func() {
return 1;
}
所以我想
- Tab 插入缩进空格 4 x 4,
- Backspace 删除缩进空格 2 x 2,
- shift 命令 < 和 > 应该仍然以 4 个空格为基础。
澄清一下,我现在不会也不会使用真正的制表符。只有空格。
虽然问题可能更多是关于 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
我喜欢 C++ 中的这种缩进:
- 缩进是 4 个空格宽,
- 除了
private
/public
/protected
说明符,它们仅缩进 2,并且不会改变后续行的缩进。
示例:
class A {
int x;
public:
int y;
}
int func() {
return 1;
}
所以我想
- Tab 插入缩进空格 4 x 4,
- Backspace 删除缩进空格 2 x 2,
- shift 命令 < 和 > 应该仍然以 4 个空格为基础。
澄清一下,我现在不会也不会使用真正的制表符。只有空格。
虽然问题可能更多是关于 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