Javascript indentation in VIM

前端 未结 7 1012
遇见更好的自我
遇见更好的自我 2021-02-02 15:46

I\'m trying to get VIM to indent Javascript with the \'=\' and related commands. When I try to auto indent the following, for example:

   new function($) {
              


        
相关标签:
7条回答
  • 2021-02-02 16:12

    Oh man, I just spent a couple of hours figuring out the same problem.

    If you have filetype indent on (which you do), then a few different indent settings may be set by a file somewhere. If you use verbose set <option>? you can see where it's being set and what it's set to:

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

    By default, you'd only expect to see cindent set by the default indent file:

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

    Where $VIMRUNTIME is the path you get when you run :echo $VIMRUNTIME.

    All of the others wouldn't be set unless you enable them (in your vimrc or a plugin).

    For me, I had a plugin (eclim) that was setting identexpr and causing this issue:

    identexpr=EclimGetJavascriptIndent(V:lnum)
    Last set from ~/.vim/bundle/eclim/indent/javascript.vim
    
    0 讨论(0)
  • 2021-02-02 16:19

    I had the same problem some time ago and the solution was the plugin "vim-javascript". It is JavaScript bundle for vim providing syntax and indent plugins.

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

    The installation is very simple.

    If you are using pathogen, use the follow steps:

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

    If you are using vundle use the follow steps:

    Add the follow line to your vimrc file:

    Plugin "pangloss/vim-javascript"
    

    And install it:

    :so ~/.vimrc
    :PluginInstall
    
    0 讨论(0)
  • 2021-02-02 16:20

    For me it works (not very helpful statement, I know ;-) ). I suppose that the filetype is not detected correctly.

    What does

     :set filetype
    

    say? It should report "javascript".

    [EDIT] Hint: Please note that there is an option called 'filetype' and a command called :filetype. To get help for the option do :help 'filetype' for the command do :help :filetype.

    0 讨论(0)
  • 2021-02-02 16:23

    For me the presence of more than one '(' character before the '{' character on the same line seemed to change the indentation algorithm used by '='. Removing one of the '(' seemed to fix '=' for all parts of the file except other scope regions '{...}' which also had multiple '(' on the opening line.

    I'm using vim 7.4 in lubuntu

    0 讨论(0)
  • 2021-02-02 16:24

    I hate to say something unhelpful like "It works for me", but it does. Even with nothing in my .vimrc and all plugins off, I get the correct indentation.

    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();
            }
    

    Have you tried loading vim with the --noplugins switch and temporarily moving/renaming your .vimrc to see if it still doesn't work? I suspect another setting in your .vimrc or another plugin may be causing the conflict.

    0 讨论(0)
  • 2021-02-02 16:25

    I was having problems the other day with MacVim 7.2 and a Lua file that wouldn't indent correctly -- even after using set syntax, set filetype and filetype indent on, it wasn't indenting the file correctly.

    I discovered adding:

    filetype plugin indent on
    

    to my .gvimrc file solved the issue, at least for me. YMMV.

    0 讨论(0)
提交回复
热议问题