Как я могу сделать так, чтобы Vim правильно отступал в JS?

Пользователь Emacs здесь, дает Vim шанс. :)

Мне очень нравятся быстрые нажатия клавиш и общая философия, но у меня возникли некоторые проблемы с немного более продвинутыми вещами. Одно из моих нареканий — отступы (используя команду =).

См. этот фрагмент JS. Вот как это делает отступ в js2-режиме Emacs. Мне это нравится :

var MyClass = declare([], {
    constructor: function(params) {
        if(!params) {
            params = {};
        }

Вот что с ним делает Vim. Чертов ад:

       var MyClass = declare([], {
constructor: function(params) {
if(!params) {
params = {};
}

Весь код над этой конструкцией получает приличный отступ, но с этого момента он просто отстой. И у меня есть такая конструкция по всему моему коду. Я проверил :filetype и включил эти переключатели. Пробовал с плагинами и без. Не правильно понял. Vim — это gVim 7.4, скачанный пару дней назад. Я видел этот вопрос, и показанный там фрагмент имеет правильный отступ из коробки.

Кто-нибудь знает, что я мог бы попробовать здесь? Спасибо за любой совет!


person Mathias Dolidon    schedule 12.08.2014    source источник
comment
Вы установили вставку (:set paste)? Потому что это сделает это с вами, если вы настроите это. Кроме того, вы узнаете, что делаете, когда находитесь в режиме вставки, и он говорит -- INSERT (вставить) -- вместо просто -- INSERT --. Чтобы снять его, введите :set nopaste (если он настроен).   -  person Tango Bravo    schedule 12.08.2014
comment
Привет ! Нет, у меня обычное приглашение на вставку. Сейчас я просто пробую ответы ниже.   -  person Mathias Dolidon    schedule 12.08.2014


Ответы (2)


В вашем .vimrc:

set  nocompatible " vi is decades old

set expandtab     " use soft tabs set shiftwidth=2  # 2 spaces tabs for JS (?) set softtabstop=2

filetype on 
filetype plugin on 
filetype plugin indent on " auto indent for supported languages (JS included)

Чтобы переформатировать весь файл, введите gg=G

gg -> go to top of file
= -> indent 
G -> until the end of the file
person toasted_flakes    schedule 12.08.2014
comment
Кажется, это работает. Спасибо ! Однако теперь я получаю другие уродства, и Vim, похоже, не очень заботится о моем set softtabstop=4 tabstop=4. Пришло время попробовать плагин выше! - person Mathias Dolidon; 12.08.2014
comment
Вам нужно только filetype plugin indent on остальные строки типа файла избыточны. - person FDinoff; 13.08.2014

Я пользуюсь VIM более 10 лет и использую это Плагин синтаксиса Javascript. Я проверил отступ на

1: создание нового файла и установка типа файла

:set filetype=javascript

2: Вставка вашего (неверно отформатированного) кода

3: Нажатие gg=G (форматирует весь буфер)

Полученный код выглядит хорошо для меня:

var MyClass = declare([], {
  constructor: function(params) {
    if(!params) {
      params = {};
    }
person Alain M. Lafon    schedule 12.08.2014
comment
Это дает мне другую подсветку синтаксиса, но, похоже, не помогает с отступами. - person Mathias Dolidon; 12.08.2014
comment
Я обнаружил, что этот пакет дает почти удовлетворительные отступы :) github.com/pangloss/vim-javascript - person Mathias Dolidon; 13.08.2014