Табуляция и пробелы в Vim

Табуляция и пробелы в Vim

Я хочу, чтобы отступы в vim работали следующим образом: если у меня есть

▷   ▷   int function(int x,▒int y, int z) {

и я нажимаю Enter, я хочу получить следующее:

▷   ▷   int function(int x,
▷   ▷   _____________int y, int z) {

Где «▷» — это табуляция, а «_» — это пробел.

Другими словами, я хочу использовать табуляции, но если у меня есть перенос строки в месте, которое не добавляет уровень отступа, то строка без отступа должна быть выровнена по пробелу.

Это позволяет мне использовать табуляции для отступов, но сохранять форматирование на уровнях без отступов, так что форматирование сохраняется даже при изменении размера табуляции.

Пока я не нашел способа сделать это с помощью Vim. Preserveindent и copyindent — это не то, что я ищу. Они учитывают expandtab, а я хочу использовать expandtab только для отступов и пробелы для выравнивания.

решение1

СогласноВим Вики,Умные вкладкиплагин это сделает. Сам я не пробовал.

решение2

В настоящее время это не выглядит выполнимым в vim. Вы можете использовать либо табуляции, либо пробелы, но не то и другое одновременно. Неудивительно, поскольку время для пробелов над табуляциями очень чувствительно к языку. Подумайте: в python, как бы вы обработали:

x = fn(abc, 'def', {
                       ghi: jkl,
                       mno: pqr,
                   })

Должны ли вы вернуться к вкладкам в какой-то момент? Это было бы идеально, но очень контекстно-зависимо и не будет работать на разных языках. Еще один забавный пример на языке haskell:

data Something = Something { flag1 :: Bool
                           , flag2 :: Bool }
               deriving (Eq, Ord, Show)

Удачи с этим.

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

Связанный контент