Висячие операторы в Vim - PullRequest
3 голосов
/ 10 мая 2009

Есть ли способ иметь операторы зависания при отступе с вкладками в Vim? Например, если у меня есть код:

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

Я хочу, чтобы это выглядело так:

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

Вопрос касается появления пробела, а не его состава. Таким образом, сокращения и правила отступов не подойдут.

Ответы [ 4 ]

3 голосов
/ 10 мая 2009

Я думаю, что он спрашивает, будет ли ~ двигаться назад на одну позицию, если vim может обнаружить, что это оператор, тем самым "повесив" ~ слева от some_class().

Насколько я знаю, ответ может быть возможным, но не будет легким. Аббревиатуры в режиме вставки всегда неоднозначны, а более сложные решения ... намного сложнее.

Если вам действительно не нужно такое поведение, я не думаю, что оно того стоит.

EDIT:

Я думаю, я понимаю, что вы говорите. В этом случае я могу с достаточной уверенностью сказать, что то, что вы спрашиваете, невозможно. Вы не можете изменить то, как vim отображает текст с отступом от вкладок и, как правило, начинается с оператора, который вы хотите свисать с левого поля. Это просто не будет работать. Vim настроен на отображение текста как есть, вы не можете изменить его в соответствии с типографским стилем без изменения исходного кода, что, я сомневаюсь, вам захочется.

0 голосов
/ 10 мая 2009

Я думаю, что вы хотите, называется "autoindent". Смотрите: 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}.
0 голосов
/ 10 мая 2009

Похоже, вам нужно написать собственный файл отступа, примеры которого приведены в $VIMRUNTIME/indent. Но, как говорит Сикора, это, вероятно, не стоит усилий.

0 голосов
/ 10 мая 2009

Я не уверен, что понимаю понятие «оператор повешения», но, похоже, вы хотели бы заменить свои вкладки пробелами.

Вы можете установить параметры вкладки и расширения:

:set expandtab
:set tabstop=8

Это расширит все введенные вами символы табуляции на 8 пробелов.

Чтобы применить расширение вкладки к существующим вкладкам в вашем файле, используйте команду retab:

:retab
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...