Как вы используете функцию быстрого исправления vim?

125

Я довольно новый пользователь Vim, и я обнаружил, что его кривая обучения довольно крутая (по крайней мере, для меня). Я только что установил этот сценарий vim для проверки ошибок JavaScriptLint, который показывает ошибки в окне быстрого исправления vim после сохранения буфера.

Однако я не знаю, что делать дальше .. Как мне «пролистать» все ошибки? Как закрыть «окно» quickfix? Как мне заставить его проверять наличие ошибок после того, как я внес изменения в свой код?

Я просмотрел документы vim quickfix, но количество команд слишком велико, и я не могу найти то, что хочу. Любая помощь будет оценена.

Дополнительный вопрос: есть ли способ проверить javascriptlint на наличие ошибок js для кода, находящегося в файле .html?

Спасибо!

Ора
источник

Ответы:

148

Как вы сказали, существует множество команд для быстрого исправления, но я склонен обнаруживать, что использую лишь небольшое их подмножество:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

Я обычно использую это с :makeи :vimgrep, поэтому я не могу комментировать средство проверки линта Javascript, но это должно дать вам кое-что для начала.

Что касается общего использования JavascriptLint, я не программист javascript, но похоже, что сценарий предоставляет функцию под названием «JavascriptLint», поэтому, если вы хотите вызвать ее вручную, вы можете использовать :call JavascriptLint(). Однако он работает с копией файла на диске, поэтому его сначала нужно сохранить. Если (и только если) командная строка jslработает с html-файлами, вы должны иметь возможность использовать :call JavascriptLint()html-файл для проверки внутреннего javascript. Вы также можете:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

автоматизировать это. Если jslне поддерживает файлы html, то ( если не считать исправления приложения или просьбы автора изменить его), это, вероятно, безнадежное дело ...

Dral
источник
Спасибо, эти команды - хорошее начало, мне просто нужно немного поэкспериментировать и привыкнуть к тому, как это работает. Если я использую: cn для перехода к ошибке в окне qf, могу ли я перейти к окну с моим кодом, не выходя из окна qf? Может ли он перейти к строке с ошибкой? И ваше предложение об использовании: call работает, однако он следует по ссылкам <script src>, чего я не хочу.
hora
@hora: :cnне следует закрывать окно qf, но оно переключится на окно, содержащее ошибку: это то, что вы имеете в виду под «прыжком»? Вы можете быстро переключиться обратно с помощью Ctrl-W pили :wincmd p, чтобы вы могли сделать :command! CN :cn | wincmd p<CR>что-то в этом роде (непроверено). Это должно дать вам :CNкоманду, которая перейдет к следующей ошибке, не выходя из окна быстрого исправления. В качестве альтернативы вы можете сделать что-то вроде :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(снова непроверено) и использовать Enter для выбора ошибки, не выходя из окна быстрого исправления.
DrAl
1
Для новичка «Вы также можете сделать: 'somecodehere', чтобы автоматизировать это» не имеет большого значения. Это означает, что показанная строка кода должна быть помещена в ~ / .vimrc (_VIMRC в Windows AFAIK) и при следующем запуске VIM каждый раз, когда файл сохраняется, эта команда будет вызываться. Правильно?
Беров
63

Самый простой способ перемещаться по списку быстрых исправлений (или списку местоположений, если на то пошло) - это unimpairedплагин .

После того , как окно QuickFix заполняется, [qи ]qидти вперед и назад (соответственно) в списке QuickFix. [Qи ]Qперейти в начало и конец (что особенно удобно, если у вас есть только один элемент в списке; это заставляет vim жаловаться на [qи ]q). Итак, рабочий процесс:

  1. Запустите любую команду, заполняющую список быстрых исправлений
  2. Введите, [Qчтобы перейти к первому элементу
  3. Прокрутите последующие элементы (если есть) с помощью [qи]q

Если вы используете Syntastic, вы получите список местоположений вместо списка quickfix. Нет проблем; просто использовать [L, ]L, [lи ]lтаким же образом.

unimpairedтакже есть множество других удобных отображений - [eи ]e"пузырьковые" линии вверх и вниз, [<Space>и ]<Space>вставка пустых строк сверху и снизу и т. д. Я был удивлен, что никто не упомянул об этом здесь раньше; вероятно, потому, что он не существовал до января 2010 года, хотя вопрос был задан в 2009 году.

Чип Хогг
источник
27

Поместите следующие две строки в ваш файл .vimrc:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Теперь вы можете перемещаться по ошибкам, используя ctrl-j и ctrl-k, которые имитируют стандартные команды движения вниз и вверх j и k.

Амит Москович
источник
1
<c-j>иногда (зависит от терминала ?!) ошибочен или вообще не работает, потому что это означает то же самое, что и <NL> // самый простой ist, чтобы использовать <c-n>и <c-p>вместо этого // в противном случае: stackoverflow.com/questions/8304421/…
eli
Я решил использовать F8 и F9, вот так: noremap <F7> :cprevious<CR>и noremap <F8> :cnext<CR>в.vimrc
Flimm
Я уже использую <C-j>и <C-k>для навигации между разделами vim и панелями tmux с помощью навигатора vim tmux . Комбинации <C-M-j>и <C-M-k>могут быть альтернативой.
Поль Руже,
24

Вы также можете использовать :cc 2(или любой другой номер) для перехода в этом случае ко второй ошибке в окне быстрого исправления. Перемещение с помощью :cn, :cc 4и т. Д. Поместит курсор на нужную строку.

Энди Стюарт
источник
8

Лучшим способом интеграции проверки синтаксиса JavaScript является использование плагина Syntastic Vim , который использует список местоположений Vim (который параллельно с quickfix окно ).

Я написал ответы на этот вопрос и этот вопрос, объясняющий, как это сделать, а также как получить просмотр исходного кода / список тегов для Vim с помощью управляемого сообществом jshint.com (что намного лучше, чем JSLint IMO) и DoctorJS от Mozilla (ранее jsctags ).

Ори Бэнд
источник
8

Возможно, эта опция не существовала, когда был написан этот вопрос (или, может быть, я смущаюсь, потому что в моем есть что-то, .vimrcчто заставляет это происходить), но когда я получаю Quickfix List, я просто просматриваю его, jа kзатем нажимаю<CR> (например, клавишу Enter) чтобы перейти к этому месту в файле.

Затем, чтобы вернуться к Quickfix ListI, набираю Ctrl+W j для "перемещения окна вниз", я возвращаюсь.

Наконец, когда я закончу, я просто печатаю :q, как будто закрываю любое обычное окно.

LondonRob
источник
Это то, что я хотел бы сделать, но получаю «Невозможно внести изменения, 'изменяемый' выключен».
RTF
1
Вероятно, вы заблокировали клавишу Enter. Например nmap <CR> o<Esc>, у меня было , поэтому я мог добавлять новые строки в обычном режиме.
Таави Ильвес
6

Окно quickfix работает в основном так же, как и любое другое окно vim: j на строку, k вверх на строку,: cn для перехода к следующей ошибке / предупреждению и т. д.

экспериментировать!

просто кто-то
источник
1
+1 за эксперименты, вот как я все узнал.
hora
4

В дополнение к отличному ответу @DrAl о том, как открывать и закрывать быстрое окно и перемещаться между записями, я сделал изображение, чтобы показать некоторые другие команды навигации быстрого исправления.

Каждая группа из 3 файлов ниже представляет собой набор результатов быстрого исправления, например, от vimgrep. cnewer и холоднее предназначены для просмотра исторических наборов результатов. введите описание изображения здесь

run_the_race
источник