Vim 中的自动格式选项 (=) 不能正确缩进 HTML+JS?

Posted

技术标签:

【中文标题】Vim 中的自动格式选项 (=) 不能正确缩进 HTML+JS?【英文标题】:Auto format option (=) in Vim doesn't indent HTML+JS correctly? 【发布时间】:2012-03-14 09:59:33 【问题描述】:

自动格式化 (gg=G) 非常适合这样的代码(来自here 的示例):

fun()

for(...)

for(...)

if(...)





变成

fun()

  for(...)
  
    for(...)
    
      if(...)
      
      
    
  

但是对于像这样的更复杂的代码它会失败(从here复制)

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function()
$("p").click(function()
$(this).hide();
);
);
</script>
</head>

<body>
<p>If you click on me, I will disappear.</p>
</body>

</html>

变成:

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function()
    $("p").click(function()
      $(this).hide();
      );
    );
</script>
</head>

<body>
<p>If you click on me, I will disappear.</p>
</body>

</html>

为什么 &lt;p&gt; 标签在正文中没有缩进?这是vim格式化程序的缺点还是我使用不正确?

编辑:感谢所有提到我应该将filetype plugin indent on 放入我的.vimrc 文件的人。这使得缩进好多了。但是,有时它仍然会失败。观察(复制自here)

<!DOCTYPE html>
<html>
  <body>

    <div style="text-align:center">
      <button onclick="playPause()">Play/Pause</button>
      <button onclick="makeBig()">Big</button>
      <button onclick="makeSmall()">Small</button>
      <button onclick="makeNormal()">Normal</button>
      <br />
      <video id="video1">
      <source src="mov_bbb.mp4" type="video/mp4" />
      <source src="mov_bbb.ogg" type="video/ogg" />
      Your browser does not support HTML5 video.
      </video>
    </div>

    <script type="text/javascript">
      var myVideo=document.getElementById("video1");

function playPause()

  if (myVideo.paused)
    myVideo.play();
  else
    myVideo.pause();


function makeBig()

  myVideo.height=(myVideo.videoHeight*2);


function makeSmall()

  myVideo.height=(myVideo.videoHeight/2);


function makeNormal()

  myVideo.height=(myVideo.videoHeight);

</script>

<p>Video courtesy of <a href="http://www.bigbuckbunny.org/" target="_blank">Big Buck Bunny</a>.</p>

</body>
</html>

完全没有变化。它没有意识到这些函数嵌套在 &lt;script&gt; 标记内。将文件类型设置为js.htmlhtml.js 也无济于事

【问题讨论】:

它是否像 any HTML 的预期那样缩进? (例如,根本没有 JavaScript) 这里似乎已经回答了:***.com/questions/3276392/… @Chriseyre2000 我正在对其进行测试,看看该解决方案是否使其更可靠 @Chriseyre2000 它确实使它更可靠,但在某些情况下继续失败。 【参考方案1】:

所以 vim 对不同的文件类型有不同的格式/语法高亮选项。你可以阅读它here。因此,对于您的常规 c++ 文件,缩进是非常标准的,因此它通常会正确,但对于您的 html 文件,您可能有不同的偏好,然后是制作格式文件的人。您可以在~/.vim/ftplugin 下编辑并查看您在linux 中的格式化配置,html 文件将被称为html.vim

就像比尔说的那样,您可能需要打开文件类型插件,方法是在您的 ~/.vimrc 中设置它或通过输入 :filetype plugin indent on 来启用它

【讨论】:

如果我没有设置:filetype plugin indent on,那么格式化就不起作用。如果我确实设置了它,Vim 会抱怨它不能调用 JSLint (Syntastic)。我该如何调和呢?

以上是关于Vim 中的自动格式选项 (=) 不能正确缩进 HTML+JS?的主要内容,如果未能解决你的问题,请参考以下文章

vi vim 括号自动缩进设置及解释

在 Vim 中编辑 Yaml 时缩进错误

vim 粘贴代码格式

解决Linux下用vim写python的缩进不正确问题

Vim 格式化使用 gg=G 和 xml

如何正确格式化项目符号和缩进 - Powerpoint VBA