如何在Vim中格式化JS代码?
我有一点JavaScript如何在Vim中格式化JS代码?,vim,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, s
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代码?不幸的是,“cindent”无法完成这项工作,因为它与C语法有很大关系。由于javascript的所有默认缩进脚本都是启用“cindent”,所以这没有多大帮助。它甚至在剧本里这么说 “维修人员:没有!想改进吗?”
除了基本的javascript,我什么都不做,所以我从来没有想过要找到更好的。从vim.org上的快速浏览来看,它可能值得一试。它比较新,所以它可能考虑到了现在使用的更复杂的javascript。最大的问题似乎是cindent没有意识到这一点语法类型:
test({
var b = 2;
});
它将把它变成这样:
test({
var b = 2;
});
如果您处理这种情况,我想缩进对于jQuery语法来说不会太糟糕。但是这需要您编写一个自定义javascript缩进文件。此外,您必须编辑html缩进文件,以避免对包含javascript内容的脚本标记使用cindent
我认为没有人成功地为javascript创建了与jquery/prototype兼容的缩进文件。现有的javascript缩进脚本都有缺陷。VIM插件可以正确处理jquery。这是在线的VIM插件版本。我建议使用CLI版本的einars/jsbeautify,您可以在这里找到:。 这是www.jsbeautifier.org的离线版本
使用此插件,只需按下一个按钮即可在当前缓冲区上运行格式化程序。有一个简单得多的解决方案,不需要vim插件 安装到您的系统python:
pip install jsbeautifier
然后将其添加到.vimrc中:
autocmd FileType javascript setlocal equalprg=js-beautify\ --stdin
就这样
运行
:帮助equalprg
了解其工作原理。另一种不需要在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-bestify
pip install jsbeautifier
如果您已安装(可用于Python:pip install jsbelifier
,或节点:npm-g install js belifiy
),则您可以直接从vim运行它-以重新格式化当前文件:
:%!js-beautify
我刚刚试过;它并不完美,但比默认脚本要好得多。谢谢!有趣的是,jamessan linked脚本似乎能正确处理这种情况,但代码更简单(见上文)这一切都搞砸了…我被这个答案弄糊涂了。当然JS美化器会用无效的语法做奇怪的事情…这个脚本有点奇怪…它会变成:var x=1+2+3+4+5+6+7;变成var x=1+2+3+4+5+6+7;还有其他一些奇怪的情况,所以不要在整个文件上运行它…你可以添加的选项对于可能有用的行:--indent size=3--indent char=char(默认为空格)--indent with tabs--space in paren你可以通过进入命令行并键入“js beautify”来查看所有命令。最好!为什么在这里使用
equalprg
而不是formatprg
?@nikobealic=用于缩进,gq用于文本回流。如果我在HTML中的
标记中有Javascript,我如何通过可视行模式使用它?