代码之家  ›  专栏  ›  技术社区  ›  Charles Roper

如何修复VIM中不正确的内联javascript缩进?

  •  63
  • Charles Roper  · 技术社区  · 15 年前

    我似乎无法在vim中正确地获得内联javascript缩进。考虑以下事项:

      $(document).ready(function() {
    
      // Closing brace correctly indented
        $("input").focus(function() {
          $(this).closest("li").addClass("cur-focus");
        }); // <-- I had to manually unindent this
    
      // Closing brace incorrectly indented
        $("input").blur(function() {
          $(this).closest("li").removeClass("cur-focus");
          }); // <-- This is what it does by default. Argh!
    
      });
    

    Vim似乎坚持自动缩进第二个案例中显示的右大括号。如果我重新缩进整个文件,它也会这样做。如何让它使用第一种情况下看到的更标准的JS缩进样式自动缩进?

    9 回复  |  直到 6 年前
        1
  •  85
  •   Charles Roper    12 年前

    最全面和无缺陷的JavaScript缩进脚本是 the one by Preston Koprivica . 在建议的答案中,所谓的OOP脚本存在严重的错误,并且没有正确地缩进方括号中的代码。

        2
  •  81
  •   Community Navdeep Singh    7 年前

    使用 JavaScript Indent: Javascript indenter (HTML indent is included) 普雷斯顿·科普里维奇。谢谢你的提醒 oligofren -给他一张赞成票。

        3
  •  17
  •   Kristian Hanekamp    13 年前

    上面提到的脚本没有正确格式化jquery中经常使用的闭包语法:

    $(function() {
      // only one level of indentation, not two
    });
    

    这个脚本更适合我: http://www.vim.org/scripts/script.php?script_id=2765

        4
  •  10
  •   Cory Klein    11 年前

    这些答案大多来自2009年,坦率地说,已经过时了。

    vim-javascript Preston's script.

    如果您还没有开始使用 Vundle 然而,它似乎不受替代方案问题的影响。

        5
  •  7
  •   OldBuildingAndLoan Caffé    15 年前

    也许这些设置的组合应该在VIMRC文件中。

    syntax on 
    set syn=auto 
    set showmatch 
    filetype on 
    filetype plugin on 
    filetype indent on 
    set tabstop=4 
    set softtabstop=4 
    set shiftwidth=4 
    set expandtab
    
        6
  •  3
  •   Jonathan Leffler    13 年前

    我也有同样的问题。这是所有javascript缩进脚本中最好的一个:

    http://www.vim.org/scripts/script.php?script_id=1840

    它需要indentanything插件

    http://www.vim.org/scripts/script.php?script_id=1839

    作为额外的奖励,我编写了这个缩进脚本,它将使JavaScript块变得相当漂亮。默认情况下,它使用默认的HTML缩进器(以及在javascript块中缩进任何内容)。

    http://gist.github.com/371902

        7
  •  2
  •   Artyom    10 年前

    如果有人来这里,请注意 vim-javascript 通过 pangloss https://github.com/pangloss/vim-javascript 到目前为止帮了我,即Vim 7.4。而上述来自oligofren和charles roper的解决方案却没有。

        8
  •  0
  •   Pete    15 年前

    假设语法文件对Java脚本有很好的缩进,视觉上突出显示块和按下=。这是为Java工作的,所以我希望它能为Java脚本做一些像样的事情。结果可能还取决于tabstop、expandtab和shiftwidth的设置。

    GQ也很有用,它格式化行而不是缩进行。

        9
  •  0
  •   Flimm    6 年前

    您不必安装专门用于JavaScript的插件,您可以学习用于缩进的内置VIM选项。Vim有很多选项,还有一些缩进样式,比如 cindent , smartindent indentexpr 有自己的选择。

    检查您是否在使用 灰烬 智能缩进 缩合电泳 运行:

    :set cindent?
    :set smartindent?
    :set indentexpr?
    

    尽管有这个名字, 灰烬 不仅适用于C程序,它还可以应用于一系列具有大致相同语法的编程语言,包括JavaScript。看一看 :help C-indenting 有关这方面的文档。您可以调整设置,特别是使用像这样的行,请参见 :help 'cinoptions' :help cinoptions-values . 下面是一个配置示例:

    :au FileType js,javascript setlocal shiftwidth=2 softtabstop=2 cinoptions=j1,J1,(1s " see help cino-j cino-J cino-(