如何在Vim中格式化JS代码?

时间:2009-10-30 23:23:02

标签: vim

我有一点JavaScript ......

 15   $('.ajax_edit_address').each(function() {
 16     $(this).ajaxForm({
 17       target: $(this).parents('table.address').find('tr.address_header').children(':first'),
 18       success: function(response) {
 19         $('input, select, textarea', '.ajax_edit_address').removeClass('updating');
 20       }
 21     });
 22   });

这是按照我喜欢的方式格式化的。但是,假设我刚刚输入了一些东西,我想整理一下。所以我在上面运行Vim代码格式化程序......

=7j

结果是......

 15   $('.ajax_edit_address').each(function() {
 16       $(this).ajaxForm({
 17 target: $(this).parents('table.address').find('tr.address_header').children(':first'),
 18 success: function(response) {
 19 $('input, select, textarea', '.ajax_edit_address').removeClass('updating');
 20 }     
 21 }); 
 22       });

Vim似乎在函数方面存在问题。

以下是我认为的.vimrc的相关部分......

:set cindent shiftwidth=2

" indent depends on filetype
:filetype indent on

:filetype plugin on

是否还需要安装或配置其他内容来格式化JS代码?

7 个答案:

答案 0 :(得分:21)

VIM插件Jsbeautify可以正确处理jQuery。这是在线Jsbeautify的vim插件版本。

答案 1 :(得分:10)

有一个更简单的解决方案,不需要vim插件。

js-beautify安装到您的系统python:

pip install jsbeautifier

然后将其添加到.vimrc:

autocmd FileType javascript setlocal equalprg=js-beautify\ --stdin

就是这样。

运行:help equalprg以查看其工作原理。

答案 2 :(得分:8)

我建议使用einars / jsbeautify的CLI版本,您可以在此处找到:https://github.com/einars/js-beautify。 它是www.jsbeautifier.org的离线版本。

使用此插件https://github.com/Chiel92/vim-autoformat只需按一下按钮即可在当前缓冲区上运行格式化程序。

答案 3 :(得分:4)

如果您安装了js-beautify(可用于Python:pip install jsbeautifier或Node:npm -g install js-beautify),则可以直接从vim运行它-重新格式化当前文件:

:%!js-beautify

答案 4 :(得分:2)

最大的问题似乎是cindent不承认这种语法:

test({
  var b = 2;
});

它会把它变成这个:

test({
    var b = 2;
    });

如果你处理这种情况我会想象缩进对于jQuery语法来说不会那么糟糕。但这需要您编写自定义的JavaScript缩进文件。此外,您必须编辑html缩进文件,以便不使用带有javascript内容的脚本标记的cindent。

我认为没有人为javascript成功创建了jquery / prototype兼容的缩进文件。现有的javascript缩进脚本都存在缺陷。

答案 5 :(得分:0)

不幸的是,'cindent'只是不能完成这项工作,因为它与C语法密切相关。由于javascript的所有默认缩进脚本都打开了'cindent',这没什么帮助。它甚至在剧本中也是如此!

  

“维护者:没有!想改进这个吗?

除了非常基本的JavaScript之外我什么都不做,所以我从来没有想过要找更好的东西。从vim.org快速浏览一下,this script看起来可能值得一试。它更新,所以它可能会考虑到现在使用的更复杂的JavaScript。

答案 6 :(得分:0)

另一种不需要在vim中进行任何配置的替代方法是在保存时手动运行format命令,例如:

:w !js-beautify --stdin >%

通过这种方式保存后,vim编辑器将要求您重新加载当前文件内容:

W12: Warning: File "src/static/js/main.js" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File: 

这类似于:w sudo tee %命令,该命令用于保存未经特权修改的文件。

该命令使用标准输入(STDIN)并将其写入用作当前文件源的变量文件描述符%

PS:当然,您需要安装js-beautify

pip install jsbeautifier