微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使vim缩进C预处理器指令与其他语句相同

基本信息

(注意:请仔细阅读,因为我花了一些时间来组织它,确保我处理了我遇到的每个问题,为什么一个提出的解决方案对我来说无效.)

我在vim中使用cind来自动缩进.大部分时间都很好用.然而,cindent在涉及C预处理器指令(以哈希(‘#’)开头的语句)中有三件坏事(在我看来).

如果它是相关的,我使用标签缩进,我的.vimrc包含文件类型缩进.

坏事1

一旦我键入预处理器指令,vim将其放在第1列(它完全不缩小).例如,以下是vim在我键入时对代码的作用:

int main(void)
{
    while(1) {
        /* normal things */
#ifdef DEBUG
        printDebugInfo();
#endif
        /* normal things */
    }
}

但是,我希望它像这样:

int main(void)
{
    while(1) {
        /* normal things */
        #ifdef DEBUG
        printDebugInfo();
        #endif
        /* normal things */
    }
}

换句话说,我喜欢vim像预处理指令一样处理任何其他C/C++语句.

坏事2

当我使用== on(或[movement] = across)一行与预处理器指令时,vim将其放回第1列.(这与Bad Thing 1一致但仍然是一个问题)

坏事3

如果(因为坏事1或2或使用<)预处理器指令在列1中结束,那么它就会“卡在”,不受>>影响.增加缩进的唯一方法是I< Tab>或i< Ctrl-t&gt ;.然后它变成“未卡住”,我可以用<或>. 失败的解决方One solution建议在我的.vimrc中设置cinkeys- = 0#.这修复了坏东西1 – 3,但添加一个新的:

坏事4(只有cinkeys- = 0#)

列1中的预处理器指令不受==或[movement] =的影响,意味着我仍然无法自动修复其缩进,直到手动缩进>>或通过插入制表符.

有没有办法解决坏事1 – 3没有介绍坏事4?我可以强制vim像普通的C语句一样处理以’#’开头的行吗?

(或者我只是以有害的方式使用#ifdefs,这是vim的方式告诉我停止吗?)

我不想修补vim和/或重新编译,但如果我必须,我会.

Vim documentation年起,

Vim puts a line in column 1 if:

  • It starts with ‘#’ (preprocessor directives),if ‘cinkeys’ contains ‘#’.
  • It starts with a label (a keyword followed by ‘:’,other than “case” and “default”) and ‘cinoptions’ does not contain an ‘L’ entry with a
    positive value.
  • Any combination of indentations causes the line to have less than 0 indentation.

所以,从cinkeys中删除0#应该覆盖该认行为. (这个想法在足够的地方出现on the interwebs.)

set cinkeys=0{,0},0),:,!^F,o,O,e

随着对Cinkeys的改变,这是我得到的,正是你要找的:

int main(void)
{
    while(1) {
        /* normal things */
        #ifdef DEBUG
        printDebugInfo();
        #endif
        /* normal things */
    }
}

原文地址:https://www.jb51.cc/vim/386416.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐