Syntastic. Плагин для невнимательных и многоязычных

    Мотивация


    Как часто вы, написав код, запускаете его и видите сообщение о синтаксической ошибке? Я часто. А как часто, найдя и исправив эту ошибку, вы вновь, запуская код, видите похожее сообщение?
    Я часто…
    Причин тому несколько:
    • я очень невнимательный
    • я пишу на многих языках


    И еще ничего, если это просто какой-то скриптик или страничка и воспроизвести код быстро. А если это нечто, что бы его воспроизвести требует что-то там перезапустить, где-то там выйти/зайти и т.д. и т.п.

    Я это терпел и пытался быть внимательным пересматривая код перед запуском. Но иногда и это не помогало. Файлы с исходниками бывают длинными и потерять одну другую скобочку бывает не сложно.

    Варианты


    Для каждого языка в отдельности возможно есть под vim плагин решающий эту проблему. Например для js есть куча симпатичных оберток для jslint. Но все это не универсально и привыкнув не перечитывать js-код забываешь делать это для ruby… Можно конечно поставить много плагинов для проверки синтаксиса — и это есть наиболее простой выход, но при одном условии…

    Решение


    А условие это таково: Вы не знаете что есть syntastic.
    Плагин рабочий, но как показывает практика не каждый начинающий vim-ер может начать его использовать(причиной тому опять таки невнимательность и излишняя ненастойчивость). Поэтому я и пишу эту маленькую статейку.
    Итак для начала установка:

    git clone github.com/scrooloose/syntastic.git
    cd syntastic
    rake install
    #или если у вас не уствновлен ruby
    сp -r * ~/.vim/

    По умолчанию плагин ничего не делает. И самое простое что можно сделать что бы работа плагина стала видна — добавить в .vimrc команду:

    let g:syntastic_enable_signs=1
    и перезапустить vim (важно именно добавить настройку в .vimrc и презапустить vim). Ошибки и предупреждения будут отмечены символами >> на красном и желтом фонах соответственно, по левой стороне от кода. Для чтения сообщения об ошибке надо ввести :Errors. Неудобство состоит в том что окошко Errors не обновляется когда вы перезаписываете буфер и для его обновления нужно будет опять набрать комманду :Errors.

    Дальше


    Внимание: проверка js-кода не будет работать до тех пор пока вы не скопируете бинарник скачанный с www.javascriptlint.com/download.htm в любую папку прописанную в вашем PATH.

    И не забываем читать документацию в vim: :h syntastic

    Решение проблем с плагином


    Для некоторых языков плагин не показывает маркеры слева от строки с ошибкой. Для такого случая есть в syntastic statusline flag — это еще один способ увидеть результаты работы плагина. Фишка эта подробно описана по :h syntastic-statusline-flag

    Проверка синтаксиса shell скриптов может из коробки не заработать. Самое простое решение в таком случае добавить в .vimrc строчку let b:shell = 'sh' или let b:shell = 'bash'. После этого могут не работать маркеры, но syntastic statusline упомянутый выше сообщает об ошибках в коде.
    Поделиться публикацией

    Комментарии 19

      0
      Хороший плагин. Единственное, он не подойдет для моего текущего проекта: я там использую систему сборки CMake, поэтому все файлы находятся не в той последовательности, в какой они берутся из компилятором без дополнительных параметров. В итоге, первая же ошибка на инклуд из моего проекта.
        +4
        Плагин для невнимательных
        я очень не внимательный

        Ну, так-то да (:
          –7
          vim — это, конечно, хорошо, но в полноценных IDE данная фича уже идёт из коробки;)
          Никогда не понимал к чему всё это шаманство%)
            +1
            у всего есть свои плюсы/минусы.
            Программирую в общей сложности около 10 лет, почти всегда в IDE.
            Полгода назад заинтересовался вимом, потому как при обилии множества функций в IDE, не всегда есть то что нужно или не совсем так как нужно.
            В итоге, текущая работа на пыхе делается в бинсе, потому как в нем удобнее отслеживать мульон фрагментов кода в плохо структурированном проекте(кто сталкивался с vbulletin тот поймет). А «домашние» проекты, те что для души пишу в виме, джанга и реилс очень приятно написаны и ведение проекта на их основе проблем не дает. Ну и хочу подчеркнуть, что дело не в яп, если бы основная работа была бы на основе yii или коханы, то тоже бы использовал вим.
              0
              а что-то можете сказать об интеграции с нетбинс? Я видел в vim --version есть какая-то интеграция с ним?
                0
                Честно говоря, ничего. Давно пробовал, сходу что-то не сраслось и я забил.
                0
                IDE хорошенько повышает производительность работы: кодогенерация, нормально работающие проверка синтаксиса и автодополнение и т.д. При этом всё работает из коробки. Если вы любите редактирование текста в стиле vim, то, как правило, есть полно плагинов, позволяющих изменить стандартный текстовый редактор.

                Ради интереса: сколько вы потратили времени на «доводку до ума» своего vim'а? Как обстоят дела в vim'е с интеграцией с дебагерами для C++/Java/C# и т.п.?

                Если интересуетесь джангой или рельсами, то посмотрите в сторону продуктов от JetBrains — они стоят своих денег;)
                  0
                  >>Ради интереса: сколько вы потратили времени на «доводку до ума» своего vim'а?
                  До идеального состояния кстати так и не довел, подстраиваю в процессе использование. По этому сказать, точно слабо. Немало, но приемлимо.
                  >>Как обстоят дела в vim'е с интеграцией с дебагерами для C++/Java/C# и т.п.?
                  С жабой и шарпеем не дружу, так что не пробовал, а вот ся на 5 с плюсом.

                  За 10 лет я перепробовал много IDE, начиная от борландовской студии. Кодогенерация, проверка синтаксиса, автодополнение, шикарные снипеты, умные комментарии и етц, есть оно все в vim, есть. Да их нету в коробке и настройка требует время, но настроил и положил под версионник, будь счастлив.

                  Это разные инструменты и в обоих случаях, для эффективного использования нужно иметь привычку. В работе использую тот который больше всего подходит. Если попытаться сформулировать приимущества получится как то так:

                  IDE идеально подходит, когда трудно удержать информацию в голове, когда, что бы сделать минимум работы надо облазить пол проекта(средние и большие, плохоструктурированные проекты с плохо соблюдаемыми нотациями). Реверсинженеринг. Просто первоначальный обход проекта. «Ленивого» ресеча, когда покрутил тут, не понравилост, подправил здесь…

                  Зато vim начинает выигрывать когда надо «работу работать», когда точно знаешь, что и как должен делать. Когда точно знаешь, что все лежит на своих и даже если не знаешь точного места все равно найдешь быстрее, чем кликая мышкой по проводнику.
              0
              Не получается активировать. Плагин скачал, положил куда надо, строку с активацией добавил. Делаю намеренные ошибки в sh и php — не выделяет.
                0
                Могу предложить поковырятся в syntax_checkers папке в ~/.vim конкретно по вашему языку — там кода не много — основное это let makeprg строка
                С php могу предположить проверить установлена ли консольная версия интерпретатора, мне помнится что на убунте к примеру раньше это были отдельные пакеты с модулем апача
                  0
                  а с sh у меня та же проблема — использую zsh и там с этими оболочками автор плагина перемудрил
                  Вобщем солюшн такой:
                  попробуйте в .vimrc добавить let b:shell = 'sh' или let b:shell = 'bash' — не уверен в том на что это может повлиять еще, но проверка синтаксиса заработала

                    0
                    и еще для шелл-скриптов у меня не показывает маркеры(sign)
                    я кроме маркеров добавил %{SyntasticStatuslineFlag()} в свой statusline — подробнее читайте в доке по плагину.
                  0
                  Попробовал, работает с perl из коробки, но в сложных проектах ошибается из-за путей к либам.

                  Хотя мне всё равно понравилось :)
                    0
                    у мнея с node.js тоже иногда ругается на непривычные lint-у выкрутасы в коде :), но я с этим готов мирится :)
                    0
                    Добавил в конец статьи раздел с решением встретившихся проблем
                      0
                      >>Внимание: проверка js-кода не будет работать до тех пор пока вы не скопируете бинарник скачанный с www.javascriptlint.com/download.htm в любую папку прописанную в вашем PATH.
                      Для MacOSx есть свой встроенный интерпретатор JS-кода
                        0
                        плагин из коробки работает только с вышеуказанным jslint
                          0
                          jslint это не интерпретатор js-кода, а syntax checker
                          0
                          Вот бы еще автор упомянул что для проверки кода Python нужен pyflakes…

                          docbk -> xmllint
                          (x)html -> tidy
                          javascript -> jsl

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое