Как вы используете функцию быстрого исправления 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, то ( если не считать исправления приложения или просьбы автора изменить его), это, вероятно, безнадежное дело ...


Спасибо, эти команды - хорошее начало, мне просто нужно немного поэкспериментировать и привыкнуть к тому, как это работает. Если я использую: 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, как будто закрываю любое обычное окно.


Это то, что я хотел бы сделать, но получаю «Невозможно внести изменения, 'изменяемый' выключен».
— RTF

1
Вероятно, вы заблокировали клавишу Enter. Например nmap <CR> o<Esc>, у меня было , поэтому я мог добавлять новые строки в обычном режиме.
— Таави Ильвес

6

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

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


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

4

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.