Vim: используйте табуляции для отступов, пробелы для выравнивания с исходными файлами C

Кто-нибудь настроил ее vim таким образом, что в качестве символов отступа используются жесткие вкладки, но используются пробелы для выравнивания? У меня проблема в том, что при запуске строки продолжения, как в

if (condition1 && (anotherlongcondition || /* <-- Here I insert a newline */
|-------|-------   whatever  /* some additional alignment added automatically */

, затем cin (что для меня обязательно) добавляет некоторое выравнивание именно так, как я предпочитаю позиционно, но это выравнивание создается с использованием как можно большего количества жестких вкладок и заполнения остальных пробелами (как я пытался визуализировать).

Короче говоря, cin не делает различий между отступами и выравниванием. Мне бы очень хотелось, чтобы все добавленное выравнивание в приведенном выше примере было пробелами. Таким образом, выравнивание будет сохранено правильно при временном переключении ts.

Чтобы еще раз прояснить, я хотел бы иметь возможность написать следующий код, никогда не нажимая <TAB> или <SPACE> перед первым непустым символом в любой строке (и не выполняя никакого ручного сдвига или чего-то еще):

void foo(int bar)
{
|-------somestatement;
|-------if (somecondition && (someothercondition ||
|-------                      whatevercomesnext))
|-------|-------dosomething;
}

Я уже опробовал ctab.vim, но он фокусируется на редактировании выровненной строки с плавными табуляторами, что кажется мне глупым, потому что ручное выравнивание — это задача, которая обеспечивает одноэтапное уточнение, а не шаг табуляции по ширине уточнение. Я не изменил способ, которым cin использует смешанные табуляции и пробелы для выравнивания.

Мне не удалось найти встроенный способ сделать это. Может, все-таки есть? Во всяком случае, я сомневаюсь, что есть плагин, который делает это. Хотя я, по общему признанию, сам не использую vim-скрипты и, возможно, у меня недостаточно опыта, я должен сказать, что большинство плагинов, которые я пробовал, только испортили конфигурацию моего редактора...


person Jo So    schedule 13.12.2011    source источник
comment
Я сам использую ctab.vim (версия 2.6), и, похоже, он делает то, чего вы хотите достичь, т. Е. При вводе приведенного выше фрагмента кода мне не нужно вводить символы табуляции или пробела, чтобы правильно отформатировать его.   -  person ekoeppen    schedule 15.01.2013


Ответы (2)


В дополнение к вашему :set cino=(1, вас также могут заинтересовать опции «preserveindent» и «copyindent», если вы еще не сталкивались с ними. Они не решают вашу проблему полностью, но в какой-то степени помогают. к помощи.

person 1983    schedule 13.12.2011
comment
Да, я сталкивался с ними. Но как жаль, что есть еще столько правил, которые все вычисляют отступы и отступы со смешанными табами/пробелами... - person Jo So; 14.12.2011

Хорошо, извините за вопрос. Наконец-то я нашел хороший материал для него.

http://vim.1045645.n5.nabble.com/Indent-with-tabs-align-with-spaces-td1183279.html

Подводя итог, в настоящее время vim недостаточно гибок, чтобы это можно было сделать комфортно.

Мой обходной путь в настоящее время использует :set cinoptions=(1, который добавляет только одну единицу выравнивания при запуске строки продолжения. Таким образом, я могу быть уверен, что добавленное выравнивание является пробелом (по крайней мере, если я не :set ts=1), и добавляю нужное количество пробелов вручную. Это все еще нормально с точки зрения скорости и кажется мне наименее отвлекающим поведением!

person Jo So    schedule 13.12.2011