Como você usa o recurso de correção rápida do vim?

125

Sou um usuário bastante novo do Vim e descobri que sua curva de aprendizado é bastante acentuada (pelo menos para mim). Acabei de instalar este script vim para verificação de erro JavaScriptLint, que mostra erros na janela de correção rápida do vim depois de salvar um buffer.

No entanto, não sei o que fazer a seguir. Como rolar todos os erros? Como fecho a janela rápida do quickfix? Como faço para verificar se há erros depois de fazer alterações no meu código?

Examinei os documentos do vim quickfix, mas a quantidade de comandos é impressionante e não consigo encontrar o que quero. Qualquer ajuda seria apreciada.

Uma questão paralela: existe alguma maneira de o javascriptlint verificar se há erros js no código que reside em um arquivo .html?

Obrigado!

hora
fonte

Respostas:

148

Existem muitos comandos para o quickfix, como você disse, mas costumo descobrir que só uso um pequeno subconjunto deles:

: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)

Eu costumo usar isso com :makee :vimgrep, portanto, não posso comentar sobre o verificador de fiapos Javascript, mas isso deve fornecer algo para você começar.

Quanto ao uso geral do JavascriptLint, eu não sou um programador javascript, mas parece que o script expõe uma função chamada "JavascriptLint"; portanto, se você quiser chamá-lo manualmente, poderá usá-lo :call JavascriptLint(). No entanto, ele funciona na cópia em disco do arquivo e, portanto, deve ser salvo primeiro. Se (e somente se) a linha de comando jslfuncionar em arquivos html, você poderá usá-lo :call JavascriptLint()em um arquivo html para verificar o javascript interno. Você também pode fazer:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

para automatizá-lo. Se jslnão suporta arquivos html, então (com exceção de corrigir o aplicativo ou pedir ao autor para alterá-lo), provavelmente é uma causa perdida ...

DrAl
fonte
Obrigado, esses comandos são um bom começo, vou ter que brincar um pouco e me acostumar com o funcionamento. Se eu usar: cn para obter um erro na janela qf, posso pular para a janela com meu código sem sair da janela qf? Ele pode pular para a linha com erro? E sua sugestão de usar: call funciona, no entanto, segue os links <script src> que não é o que eu quero.
hora
@hora: :cnnão deve fechar a janela do qf, mas passará para a janela que contém o erro: é isso que você quer dizer com "pular"? Você pode voltar rapidamente com Ctrl-W pou :wincmd p, para poder fazer :command! CN :cn | wincmd p<CR>algo assim (não testado). Isso deve fornecer um :CNcomando que avança para o próximo erro sem sair da janela do quickfix. Como alternativa, você pode fazer algo como :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(novamente não testado) e usar Enter para selecionar um erro sem sair da janela do quickfix.
DrAl
1
Para um iniciante "Você também pode fazer: 'algum código' para automatizá-lo" não significa muito. Isso significa que a linha de código mostrada deve ser colocada em ~ / .vimrc (_VIMRC no Windows AFAIK) e, a partir do próximo início do VIM, toda vez que o arquivo for salvo, esse comando será chamado. Certo?
Беров
63

A maneira mais fácil de navegar na lista de correções rápidas (ou na lista de localizações) é o unimpairedplug - in .

Quando a janela do quickfix for preenchida, vá [qe ]qavance e volte (respectivamente) na lista do quickfix. [Qe ]Qvá para o início e o fim (o que é especialmente útil se você tiver apenas um item na lista; isso faz com que o vim se queixe [qe ]q). Portanto, o fluxo de trabalho é:

  1. Execute o comando que preenche a lista de correções rápidas
  2. Digite [Qpara ir para o primeiro item
  3. Role pelos itens subsequentes (se houver) com [qe]q

Se você estiver usando o Syntastic, obterá a lista de locais em vez da lista de correções rápidas. Sem problemas; apenas uso [L, ]L, [l, e ]lda mesma forma.

unimpairedtambém possui muitos outros mapeamentos úteis - [ee ]e"borbulha" linhas para cima e para baixo, [<Space>e ]<Space>insere linhas em branco acima e abaixo, etc. Fiquei surpreso que ninguém tenha mencionado isso antes; provavelmente porque não existia até janeiro de 2010, embora a pergunta tenha sido feita em 2009.

Chip Hogg
fonte
27

Coloque as duas linhas a seguir no seu arquivo .vimrc:

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

Agora você pode navegar pelos erros usando ctrl-j e ctrl-k, que imitam os comandos padrão de movimento para baixo e para cima j e k.

Amit Moscovich
fonte
1
<c-j>em algum momento (depende do terminal ?!) está errado ou não está funcionando, porque significa o mesmo que <NL> // o ist mais fácil de usar <c-n>e, em <c-p>vez disso // //: stackoverflow.com/questions/8304421/…
eli
Eu decidi usar F8 e F9, assim: noremap <F7> :cprevious<CR>e noremap <F8> :cnext<CR>em.vimrc
Flimm
Eu já uso <C-j>e <C-k>para navegar entre divisões do vim e painéis do tmux com o vim tmux navigator . As combinações <C-M-j>e <C-M-k>podem ser uma alternativa.
Paul Rougieux
24

Você também pode usar :cc 2(ou qualquer outro número) para pular para, nesse caso, o segundo erro na janela do quickfix. Navegando com :cn, :cc 4, etc irá colocar o cursor na linha em questão.

Andy Stewart
fonte
8

A melhor maneira de integrar a verificação de sintaxe do JavaScript é usar o plug- in Syntastic Vim , que está usando a janela de lista de localização do Vim (que é paralela à correção rápida ).

Escrevi respostas para esta pergunta e para esta pergunta explicando como fazê-lo, além de como obter uma lista de códigos / tags de navegação para o Vim usando o jshint.com orientado pela comunidade (que é muito melhor que o JSLint IMO) e DoctorJS da Mozilla (anteriormente jsctags ).

Ory Band
fonte
8

Talvez essa opção não existisse quando esta pergunta foi escrita (ou talvez eu esteja me envergonhando porque há algo em meu .vimrcque isso aconteça), mas quando recebo um Quickfix List, apenas navego com je kdepois pressiono <CR>(ou seja, a tecla Enter) para pular para esse lugar no arquivo.

Então, voltando ao Quickfix Listdigito Ctrl+ W jpara "descer uma janela", volto.

Finalmente, quando termino, apenas digito :q, como faria para fechar qualquer janela normal.

LondonRob
fonte
É isso que eu gostaria de fazer, mas a mensagem "Não é possível fazer alterações, 'modificável' está desativada".
Rtf 05/10
1
Você provavelmente substituiu sua tecla Enter. Eu tinha, por exemplo nmap <CR> o<Esc>, para adicionar novas linhas no modo normal.
Taavi Ilves
6

a janela do quickfix é operada principalmente como qualquer outra janela do vim: j em uma linha, k em uma linha,: cn para pular para o próximo erro / aviso, etc.

experimentar!

apenas alguém
fonte
1
+1 para experimentação, foi assim que aprendi tudo.
hora
4

Além da ótima resposta do @DrAl sobre como abrir e fechar a janela rápida e navegar entre as entradas, fiz uma imagem para mostrar alguns dos outros comandos de navegação do quick fix.

Cada grupo de 3 arquivos abaixo representa um conjunto de resultados do quickfix, por exemplo, de um vimgrep. cnewer e cold são para passar por conjuntos de resultados históricos. insira a descrição da imagem aqui

run_the_race
fonte