如何让 vim 很好地对齐三元 ?: 运算符?

发布于 2024-11-26 16:22:10 字数 368 浏览 1 评论 0原文

我喜欢使用三元 ?: 运算符编写代码,如下所示:

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

如何配置 vim,以便在输入 createNewItem() 后按 Return 缩进下一行,以便光标位于同一列中作为最后一个 ?,这样我就可以继续输入 : processInput( input );?

我尝试查看 cinoptions-values 设置,但没有看到任何相关内容。

I like to write code using the ternary ?: operator like this:

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

How can I configure vim so that when pressing Return after having typed createNewItem() indents the next line so that the cursor is in the same column as the last ? so that I can just continue typing : processInput( input );?

I tried looking at the cinoptions-values setting but I didn't see anything relevant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱&纷飞 2024-12-03 16:22:10

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

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

只有当您将表达式分成三行时,这才有效:I
通常会这样做,但我不得不承认你的格式看起来非常好并且
在表达式很短的情况下可读。

过去,我发现 vim 邮件列表对于这种类型非常有帮助
的问题。以前是谷歌群组的,你可以参考一下
就好像那里有一个团体;我不确定当前状态如何
(因为我无法在工作中访问 Google 群组)。

You can achieve this at least partially be adding parentheses:

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

This only works if you break the expression up into three lines: I
usually do, but I'll have to admit that your format looks very nice and
readable, in cases where the expressions are short.

In the past, I've found the vim mailing list very helpful for this sort
of question. It used to be gated to Google groups, so you could consult
it as if it were a group there; I'm not sure what the current status is
(since I can't access Google groups from work).

人│生佛魔见 2024-12-03 16:22:10

受到 大致相似的启发问题 我运用了我的 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 以切换缩进插件的加载。看起来效果已经足够好了!

Inspired by a roughly similiar question I exercised my vimscript-fu and created a little script to do this job:

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()

I saved this file as vimfiles/indent/after/cpp.vim and added filetype indent on to my .vimrc to toggle loading of indentation plugins. It seems to work good enough!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文