Vim: постоянный отступ

У меня есть set smartindent в моем файле конфигурации Vim, но есть один аспект автоматической вставки вкладок в Vim, который я хотел бы изменить. Скажем, например, что я начинаю вводить цикл for:

1. for (auto& foo : bar) {
2.

После того, как я нажму «Ввод», Vim любезно вставит табуляцию в начале строки 2 именно так, как я этого хочу. Но если понять, что мне нужно перейти куда-то еще в файле, чтобы что-то изменить, а затем вернуться к строке 2, вкладки больше нет. Нажимать табуляцию пару раз время от времени не имеет большого значения, поскольку, когда я пишу сложный алгоритм с большим количеством отступов, необходимость несколько раз нажимать клавишу табуляции может раздражать.

Что было бы лучшим решением, чтобы заставить Vim фактически записывать вкладку в текущий буфер при выполнении автоматического отступа, вместо того, чтобы давать мне возможность вставить вкладку только при нажатии возврата из предыдущей строки?

Спасибо за вашу помощь!


person void-pointer    schedule 01.04.2012    source источник
comment
Это обсуждалось много раз во многих местах. Проверьте этот вопрос, он может вам помочь.   -  person sidyll    schedule 01.04.2012
comment
Проблема с хаком, предложенным принятым ответом, заключается в том, что когда я набираю «}», отступ автоматически не сдвигается влево на одну единицу. Кроме того, использование cc или S в пустой строке, в которой исчезает отступ, по-прежнему помещает меня в самое начало строки.   -  person void-pointer    schedule 02.04.2012
comment
Есть большая вероятность, что вы получите лучшие результаты, используя filetype indent on, а не smartindent. cc и S должны работать в этом случае. Из справочного канала #vim на freenode: Вы имеете в виду тупой индент? Если серьезно, то «smartindent» — это устаревший вариант C-подобного синтаксиса. Он был заменен на «cindent», и установка «cindent» также имеет приоритет над «smartindent». Vim имеет встроенную поддержку отступов для многих языков, и настройка «smartindent» (или «cindent», если на то пошло) в вашем .vimrc может помешать этому. Используйте «отступ плагина типа файла» и будьте счастливы.   -  person Randy Morris    schedule 02.04.2012


Ответы (1)


Это похоже на намеренно разработанное поведение. Когда пользователь отпрыгивает, а затем возвращается на старое место (Line 2), original tabs теряется. Вместо перехода к строке 2 пользователь может перейти к Line 1 и нажать o, пользователь получит новую строку 2 с автоматическим отступом. В то же время пользователь может использовать все возможности Vim для map или даже vimscript нового способа сохранить old tabs. При этом я восхищаюсь дизайном Vi/Vim.

Короче говоря, когда вы вернетесь к Line: 1., нажмите o. появляется New indented Line 2..

person Andrew_1510    schedule 07.04.2012