挂在Vim的操作员

时间:2009-05-10 12:55:12

标签: vim

在使用Vim中的标签缩进时,有没有办法挂起操作符?例如,如果我有代码:

class some_class
{
<tab>some_class();
<tab>~some_class();
};

我希望它看起来像这样:

class some_class
{
        some_class();
       ~some_class();
};

问题是关于空白的外观,而不是它的构成。因此,缩写和缩进规则不会这样做。

4 个答案:

答案 0 :(得分:3)

我认为如果vim可以检测到它是一个操作符,他会询问~是否会向后移动一个空格,从而“悬挂”〜some_class()的左侧。

据我所知,答案可能是可能的,但并不容易。插入模式缩写总是不完整,更复杂的解决方案......更复杂。

除非你真的需要这种行为,否则我认为这不值得。

编辑:

我想我得到你所说的。在这种情况下,我可以合理地确定你所要求的是不可能的。您无法更改vim显示由制表符缩进的文本的方式,并且恰好以您希望挂起左边距的运算符开头。这根本行不通。 Vim设置为按原样显示文本,如果不更改源代码,则无法将其更改为适合印刷样式,我怀疑您不想这样做。

答案 1 :(得分:0)

我不确定我是否理解“悬挂操作员”的概念,但似乎您希望用空格替换标签。

您可以设置expandtab和tabstop选项:

:set expandtab
:set tabstop=8

这会将您键入的任何新制表符扩展为8个空格。

要将制表符扩展应用于文件中的现有选项卡,请使用retab命令:

:retab

答案 2 :(得分:0)

您似乎必须为此编写自己的缩进文件,其示例位于$VIMRUNTIME/indent。但是像sykora说的那样,这可能是不值得的。

答案 3 :(得分:0)

我认为你想要的是“自动注册”。请参阅:help ai

'autoindent' 'ai'   boolean (default off)
            local to buffer
    Copy indent from current line when starting a new line (typing <CR>
    in Insert mode or when using the "o" or "O" command).  If you do not
    type anything on the new line except <BS> or CTRL-D and then type
    <Esc>, CTRL-O or <CR>, the indent is deleted again.  Moving the cursor
    to another line has the same effect, unless the 'I' flag is included
    in 'cpoptions'.
    When autoindent is on, formatting (with the "gq" command or when you
    reach 'textwidth' in Insert mode) uses the indentation of the first
    line.
    When 'smartindent' or 'cindent' is on the indent is changed in
    a different way.
    The 'autoindent' option is reset when the 'paste' option is set.
    {small difference from Vi: After the indent is deleted when typing
    <Esc> or <CR>, the cursor position when moving up or down is after the
    deleted indent; Vi puts the cursor somewhere in the deleted indent}.