Как я могу заставить vim выравнивать троичный оператор? - PullRequest
9 голосов
/ 27 июля 2011

Мне нравится писать код с использованием троичного оператора?: Как это:

std::string result = input.empty() ? createNewItem()
                                   : processInput( input );

Как я могу настроить vim так, чтобы при нажатии Return после ввода createNewItem() отступал в следующей строке, чтобы курсорнаходится в том же столбце, что и последний ?, так что я могу просто продолжать набирать : processInput( input );?

Я попытался просмотреть настройку cinoptions-values, но не увидел ничего релевантного.

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Вдохновленный примерно похожим вопросом Я применил свой vimscript-fu и создал небольшой скрипт для этой работы:

if (!exists("*CppIndentDepth"))
    function CppIndentDepth()
        let lineno = v:lnum
        let lastQuestionMark = match(getline(lineno-1), "?[^?]*")
        if lastQuestionMark != -1
            return lastQuestionMark
        endif
        return cindent(lineno)
    endfunction
endif

set indentexpr=CppIndentDepth()

Я сохранил этот файл как vimfiles/indent/after/cpp.vim и добавилfiletype indent on to my .vimrc для переключения загрузки плагинов отступов.Кажется, это работает достаточно хорошо!

1 голос
/ 27 июля 2011

Вы можете достичь этого хотя бы частично, добавив скобки:

std::string result = (input.empty()
                      ? createNewItem()
                      : processInput( input ));

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

В прошлом я нашел список рассылки vim очень полезным для такого рода вопрос. Раньше он был закрыт для групп Google, чтобы вы могли проконсультироваться как будто там была группа; Я не уверен, что текущий статус (так как я не могу получить доступ к группам Google с работы).

...