Я начал использовать синтетический плагин с vim для сообщения об ошибках lint в моем javascript
коде.
Я также интегрировал eslint с syntastic , и он показывает мне хорошие ошибки, предупреждения, если они присутствуют согласно правилам, написанным в моем файле .eslintrc .
Есть ли способ, которым я могу исправить некоторые распространенные ошибки, например, отсутствие точки с запятой, отсутствие пробела и т. Д. С помощью нажатия клавиши?
Редактировать:
Я обнаружил, что у eslint есть опция
--fix Automatically fix problems
который может быть использован для таких случаев. Мне нужно запустить эту команду, чтобы позволить eslint исправить эти проблемы
eslint --fix -c myconfig file.js
Я хочу знать, как это можно интегрировать с Vim ?
map <C-j> call Function()<CR>
Но это будет очень индивидуально подобранная функция, которую вам нужно будет написать в соответствии с вашими потребностями. И точка зрения Роменля в том, что если вы делаете что-то не так, вы легко можете принести больше вреда, чем пользы. Рекомендуется осторожностьeslint --fix
, я бы предпочел иметь это на уровне редактора.Ответы:
Как упомянуто в комментариях, следует помнить о последствиях, которые эта модификация имеет для вашей рабочей среды (точно знать, какие правила eslint вы используете, чтобы «исправить» вещи).
Чтобы ответить на ваш вопрос: добавить опцию к выполнению eslint с помощью синтаксиса просто . Просто добавьте это к себе
.vimrc
:Но поскольку eslint выполняется в файле после того, как vim записывает в него свой буфер, vim не знает об исправлениях, которые делает eslint. Так что каким-то образом vim должен снова загрузить файл (ручной способ - просто набрать текст
:e
в обычном / командном режиме). Для этого мы можем использовать опцию autoread вместе с checktime :Для вызова контрольного времени мы можем использовать autocmd, который выполняется каждый раз, когда буфер записывается в файл. Но так как синтаксис использует свой собственный autocmd для того же события,
BufWritePost
мы должны добавить наш autocmd после добавления собственного синтаксиса. Я обнаружил, что это тот случай, когда мы добавляем наш autocmdVimEnter
:Поэтому после добавления всех трех частей в ваш
.vimrc
vim должен вести себя как положено (lint и автозамена при сохранении файла:w
).источник
Решение, приведенное в ответе Jepz, не сработало для меня.
eslint
был правильно вызван с--fix
опцией. Однако, возможно, это из-за изменения внутренних компонентов, но кажется, что онchecktime
был вызван до концаeslint --fix
, поэтому перезагрузка файла не работала должным образом, вызываяfile has changed, are you sure you want to write to it?
при следующем сохранении.Однако, копаясь в проблемах, я обнаружил скрытый хук, который, кажется, срабатывает после завершения проверки Syntastic, называется
SyntasticCheckHook
( source ).При этом вы можете просто позвонить
checktime
после проверки Syntastic.Вот мой окончательный код:
Редактировать: я лично переключился
ALE
на linting, который поддерживает автофиксирование изначально.источник