我怎样才能使vim很好地对齐三元运算符?

How can I make vim align the ternary ?: operator nicely?

本文关键字:三元 运算符 对齐 很好 vim      更新时间:2023-10-16

我喜欢像这样使用三元?:运算符来编写代码:

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

我如何配置vim,以便在键入createNewItem()后按回车缩进下一行,使光标与最后一个?在同一列,以便我可以继续键入: processInput( input ); ?

我试着看cinoptions-values设置,但我没有看到任何相关的

您至少可以通过添加括号来实现这一点:

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

这只适用于将表达式分成三行通常是这样,但我不得不承认你的格式看起来非常好可读,在表达式很短的情况下。

在过去,我发现vim邮件列表对这类邮件非常有帮助的问题。它过去是对谷歌小组封闭的,所以你可以咨询好像那里有一群人;我不确定现在的情况是什么(因为我不能在工作时访问谷歌群组)。

受到一个大致类似的问题的启发,我使用了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添加到我的.vimrc中以切换缩进插件的加载。它似乎工作得很好!