如何修复Vim中不正确的内联Javascript缩进?

时间:2009-03-06 20:13:34

标签: javascript vim

我似乎无法在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 个答案:

答案 0 :(得分:85)

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

答案 1 :(得分:82)

使用Preston Koprivica的JavaScript Indent: Javascript indenter (HTML indent is included)。感谢oligofren的单挑 - 给他一个投票。

答案 2 :(得分:17)

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

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

这个脚本对我来说效果更好:http://www.vim.org/scripts/script.php?script_id=2765

答案 3 :(得分:10)

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

vim-javascriptPreston's script.

更新近,更新

如果你还没有开始使用Vundle,安装会有点复杂,但它似乎没有替代方案的问题。

答案 4 :(得分:7)

这些设置的某些组合应该在您的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

答案 5 :(得分:3)

我有同样的问题。这是所有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块中时使用IndentAnything)

http://gist.github.com/371902

答案 6 :(得分:2)

如果有人来这里,请注意vim-javascript pangloss {{1}} https://github.com/pangloss/vim-javascript帮我到目前为止,即Vim 7.4。而oligofren和Charles Roper的上述解决方案则没有。

答案 7 :(得分:0)

假设语法文件对java脚本具有良好的缩进,请在视觉上突出显示该块并按=。这适用于java,所以我希望它能为java脚本做一些不错的事情。结果可能还取决于tabstop,expandtab和shiftwidth的设置。

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

答案 8 :(得分:0)

您不必安装专门针对Javascript的插件,可以了解内置的Vim缩进选项。 Vim有很多选择,cindentsmartindentindentexpr之类的缩进样式都有自己的选择。

要检查您使用的是cindent还是smartindentindentexpr,请运行:

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

尽管名称cindent不仅适用于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-(