VIM 中的 JavaScript 缩进

问题描述 投票:0回答:8

我正在尝试让 VIM 使用“=”和相关命令缩进 Javascript。例如,当我尝试自动缩进以下内容时:

   new function($) {
     $.fn.setCursorPosition = function(pos) { 
       if ($(this).setSelectionRange) {
         $(this).setSelectionRange(pos, pos);
       } else if ($(this).createTextRange) {
         var range = $(this).createTextRange();
         range.collapse(true);
         range.moveEnd('character', pos);
         range.moveStart('character', pos);
         range.select();
       }

结果相当荒谬:

       new function($) {
       $.fn.setCursorPosition = function(pos) {
       if ($(this).setSelectionRange) {
       $(this).setSelectionRange(pos, pos);
       } else if ($(this).createTextRange) {
       var range = $(this).createTextRange();
       range.collapse(true);
       range.moveEnd('character', pos);
       range.moveStart('character', pos);
       range.select();
       }

我已设置

set syntax=javascript
,并且我已将
filetype
设置为:

filetype detection:ON  plugin:ON  indent:ON

虽然我已经尝试了所有的排列。我已经尝试了

smartindent
autoindent
cindent
的每种排列,但似乎没有任何一种方法能够给 Vim 提供预期的缩进效果。我已经设置了
tabstop=4

我已经安装了

javascript.vim
IndentAnything
,虽然它们似乎没有任何效果。

如果有任何有关如何在 JavaScript 中正确缩进 Vim 的建议,我将不胜感激。

javascript vim indentation auto-indent
8个回答
11
投票

天哪,我刚刚花了几个小时解决同样的问题。

如果您有

filetype indent on
(确实如此),那么文件可能会在某处设置一些不同的缩进设置。如果您使用
verbose set <option>?
,您可以看到它的设置位置以及设置的内容:

:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?

默认情况下,您只希望看到默认缩进文件设置的

cindent

cindent
Last set from $VIMRUNTIME/indent/javascript.vim

其中

$VIMRUNTIME
是你运行
:echo $VIMRUNTIME
时得到的路径。

所有其他的都不会被设置,除非你启用它们(在你的 vimrc 或插件中)。

对我来说,我有一个插件(eclim)正在设置

identexpr
并导致这个问题:

identexpr=EclimGetJavascriptIndent(V:lnum)
Last set from ~/.vim/bundle/eclim/indent/javascript.vim

5
投票

我前段时间遇到了同样的问题,解决方案是插件“vim-javascript”。它是 vim 的 JavaScript 包,提供语法和缩进插件。

https://github.com/pangloss/vim-javascript

安装非常简单。

如果您正在使用病原体,请使用以下步骤:

  cd ~/.vim/bundle
  git clone https://github.com/pangloss/vim-javascript.git

如果您使用vundle,请使用以下步骤:

将以下行添加到您的 vimrc 文件中:

Plugin "pangloss/vim-javascript"

并安装它:

:so ~/.vimrc
:PluginInstall

4
投票

添加两个右大括号并使用

vi{
选择整个块在没有插件的 gvim 7.2 中为我提供了正确的自动缩进。您可能想通过在命令行上使用
--noplugins
标志启动 vim 来查看是否有错误的插件搞砸了。然后再试一次。


3
投票

我讨厌说“这对我有用”这样无益的话,但确实如此。即使我的 .vimrc 中没有任何内容并且所有插件都关闭,我也得到了正确的缩进。

new function($) {
    $.fn.setCursorPosition = function(pos) { 
        if ($(this).setSelectionRange) {
            $(this).setSelectionRange(pos, pos);
        } else if ($(this).createTextRange) {
            var range = $(this).createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }

您是否尝试过使用

--noplugins
开关加载 vim 并暂时移动/重命名您的 .vimrc 以查看它是否仍然不起作用?我怀疑您的 .vimrc 或其他插件中的另一个设置可能会导致冲突。


3
投票

对我来说它有效(这不是很有帮助的陈述,我知道;-))。 我认为文件类型未正确检测。

有什么作用

 :set filetype

说?它应该报告“javascript”。

[编辑] 提示:请注意,有一个名为“filetype”的选项和一个名为:filetype 的命令。 要获取选项 do :help 'filetype' 的帮助,请执行命令 do :help :filetype。


3
投票

前几天我在使用 MacVim 7.2 和 Lua 文件时遇到了问题,该文件无法正确缩进 - 即使在使用

set syntax
set filetype
filetype indent on
后,它也无法正确缩进文件。

我发现添加:

filetype plugin indent on

我的

.gvimrc
文件解决了这个问题,至少对我来说是这样。 YMMV.


0
投票

对我来说,同一行中“{”字符之前存在多个“(”字符似乎改变了“=”使用的缩进算法。删除其中一个“(”似乎可以修复所有“=”文件的其他部分,除了其他作用域区域“{...}”,其开头行上也有多个“(”。

我在 lubuntu 中使用 vim 7.4


0
投票

如果你想在不使用任何插件的情况下缩进。

  • 按 ESC 键切换到正常。
  • 类型
    gg=G

它的作用是:

gg
将光标移动到文件顶部,
=
将触发自动缩进,
G
将光标移动到文件末尾。

© www.soinside.com 2019 - 2024. All rights reserved.