15

我试图让 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,但似乎没有什么能产生正确的效果来给 Vim 预期的缩进。我已经设置了。autoindentcindenttabstop=4

我已经安装了javascript.vim, 和IndentAnything,尽管它们似乎没有任何效果。

对于如何让 Vim 在 JavaScript 中正确缩进的任何建议,我将不胜感激。

4

7 回答 7

10

哦,伙计,我只花了几个小时来解决同样的问题。

如果你有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
于 2013-09-07T06:57:19.273 回答
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
于 2014-06-18T14:17:30.413 回答
4

添加两个右大括号并选择整个块,vi{并在 gvim 7.2 中为我提供了适当的自动缩进,没有插件。--noplugins您可能想通过在命令行上使用标志启动 vim 来查看错误插件是否将其弄乱了。然后再试一次。

于 2010-07-11T17:34:48.573 回答
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 或其他插件中的另一个设置可能会导致冲突。

于 2010-07-11T17:38:46.100 回答
3

前几天我在使用 MacVim 7.2 和一个无法正确缩进的 Lua 文件时遇到问题——即使在使用set syntax,set filetype和之后filetype indent on,它也没有正确缩进文件。

我发现添加:

filetype plugin indent on

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

于 2010-07-12T11:45:20.843 回答
3

对我来说它有效(不是很有帮助的声明,我知道;-))。我想没有正确检测到文件类型。

做什么

 :set filetype

说?它应该报告“javascript”。

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

于 2010-07-12T11:14:14.787 回答
0

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

我在 lubuntu 中使用 vim 7.4

于 2016-10-06T12:27:33.473 回答