Vim, 컴파일러, make e errorformat

20752 단어 vim
Vim tem embutido uma forma de interpreter mensagens de erro, facilitando o pulo para o arquivo apontado na mensagem.

Essa interpretação é feita através da lista da variávelerrorformat, cujo lê a mensagem e encaixa no primeiro "regex".


Exemplo comGo

package main

import (
    "fmt"
)

func main() {
    msg = "Exemplo de texto"
    fmt.Println(msg)
}


O 출력 e:

# command-line-arguments
.\main.go:8:2: undefined: msg
.\main.go:9:14: undefined: msg   


Para configurar de maneira simples, primeiro precisamos definir o makeprg responsável por executar o arquivo e após as tratativa de linhas de erro em errorformat .

" dentro de <runtimepath>/ftplugin/go.vim

" go run <nome do buffer>
setl makeprg=go\ run\ %

setl errorformat=%f:%l:%c:\ %m,%-G%.%#


Agora basta executar:make|cw que a janela de quickfix vai abrir, permitindo acessar o arquivo com erro.



Sugestão: Crie um map para executar o comando, como nmap <space>r :silent make|cw<CR>

형식 오류 형식



명령어는 errorformat을 수행합니다.
  • É uma variável que recebe uma lista separada por vírgula
  • Assim que bater na primeira "regex"para de processar demais regras
  • O regex implícito básico funciona semper iniciando com%
  • espaço, pode ser feito com\을 사용하기 위해 필요한 경우

  • 유니다데스


  • %fNome de Arquivo
  • %lNumero da linha
  • %cNumero da coluna
  • %mMensagem de erro
  • \\s에스파소
  • %#제로 오 마이즈
  • %\\+Um ou mais
  • %AInicia erro que possui múltiplas linhas
  • %CContinuação da mensagem de erro que possui múltiplas linhas. Agrega valor ao regex com%A previo.
  • %ZUltima linha da mensagem de erro que possui múltiplas linhas. Agrega valor ao regex com%A previo.
  • %-GIgnora a mensagem que seguir com o padrão

  • 우소스 커뮤니티




    코디고
    통역
    예시

    %f:%l:%c\ %m파일 이름:linha:coluna espaço mensagem restantemain.go:8:2 undefined: msg%.%#.*qualquer texto%-G%.%#.*Ignora quaisquer textos

    컴파일러



    :h write-compiler-plugin



    Um compilador é uma configuração pronta de makeprg e errorformat com nome, facilitando sua troca. 예를 들어 Go podemos ter um compiler gorun que serve para executar o código e outro como gotest para testá-lo, e assim tratar de maneira diferente os erros e a execução.
    Existe uma convenção para a escrita de compilers, precisando ficar em /compiler dentro do runtimepath . O Vim já possui diversos, basta copiar a estrutura e atualizar o nome do compiler, makeprg e errorformat .
    Abaixo gorun e gotest mencionados e outros úteis:

    " Vim compiler file
    " Compiler:     Go
    " Maintainer:   Felipe Silva
    " Last Change:  2020 Sep 17
    
    if exists('current_compiler')
      finish
    endif
    let current_compiler = 'gorun'
    
    if exists(':CompilerSet') != 2
      command -nargs=* CompilerSet setlocal <args>
    endif
    
    let s:save_cpo = &cpo
    set cpo-=C
    
    CompilerSet makeprg=go\ run\ %
    
    " THANKS: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#errorformat-LaTeX
    " THANKS: https://flukus.github.io/vim-errorformat-demystified.html
    " THANKS: https://stackoverflow.com/a/29102995/9881278
    " THANKS: https://github.com/wincent/wincent/blob/b38dc93bb5/roles/dotfiles/files/.vim/after/compiler/README.md
    
    CompilerSet errorformat=%-G#%.%#
    CompilerSet errorformat+=%-G%.%#panic:\ %m
    CompilerSet errorformat+=can\'t\ load\ package:\ %m
    CompilerSet errorformat+=%f:%l:%c:\ %m
    CompilerSet errorformat+=%f:%l:\ %m
    CompilerSet errorformat+=%*\\s%f:%l\ %m
    CompilerSet errorformat+=%C%m
    
    let &cpo = s:save_cpo
    unlet s:save_cpo
    
    " vim: sw=2 sts=2 et
    



    " Vim compiler file
    " Compiler:     Go
    " Maintainer:   Felipe Silva
    " Last Change:  2021 Nov 2
    
    if exists('current_compiler')
      finish
    endif
    let current_compiler = 'goimports'
    
    if exists(':CompilerSet') != 2
      command -nargs=* CompilerSet setlocal <args>
    endif
    
    let s:save_cpo = &cpo
    set cpo-=C
    
    CompilerSet makeprg=goimports\ -w\ %
    
    CompilerSet errorformat+=%f:%l:%c:\ %m
    CompilerSet errorformat+=%f:%l:\ %m
    
    let &cpo = s:save_cpo
    unlet s:save_cpo
    
    " vim: sw=2 sts=2 et
    



    " Vim compiler file
    " Compiler:     Go
    " Maintainer:   Felipe Silva
    " Last Change:  2020 Sep 17
    
    if exists('current_compiler')
      finish
    endif
    let current_compiler = 'gotest'
    
    if exists(':CompilerSet') != 2
      command -nargs=* CompilerSet setlocal <args>
    endif
    
    let s:save_cpo = &cpo
    set cpo-=C
    
    CompilerSet makeprg=go\ test
    
    " THANKS: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#errorformat-LaTeX
    " THANKS: https://flukus.github.io/vim-errorformat-demystified.html
    " THANKS: https://stackoverflow.com/a/29102995/9881278
    " THANKS: https://github.com/wincent/wincent/blob/b38dc93bb5/roles/dotfiles/files/.vim/after/compiler/README.md
    
    CompilerSet errorformat=%-G#%.%#
    CompilerSet errorformat+=%-G%.%#panic:\ %m
    CompilerSet errorformat+=%-GFAIL%.%#
    CompilerSet errorformat+=%-Gexit%.%#
    CompilerSet errorformat+=%-GPASS%.%#
    CompilerSet errorformat+=%-Gok%.%#
    CompilerSet errorformat+=can\'t\ load\ package:\ %m
    CompilerSet errorformat+=%f:%l:%c:\ %m
    CompilerSet errorformat+=%f:%l:\ %m
    CompilerSet errorformat+=%*\\s%f:%l\ %m
    CompilerSet errorformat+=%+A---\ FAIL:\ Example%.%#
    CompilerSet errorformat+=%C%m
    
    let &cpo = s:save_cpo
    unlet s:save_cpo
    
    " vim: sw=2 sts=2 et
    



    " Vim compiler file
    " Compiler:     PHP
    " Maintainer:   Felipe Silva
    " Last Change:  2020 Sep 30
    
    if exists('current_compiler')
      finish
    endif
    let current_compiler = 'phplint'
    
    if exists(':CompilerSet') != 2
      command -nargs=* CompilerSet setlocal <args>
    endif
    
    let s:save_cpo = &cpo
    set cpo-=C
    
    CompilerSet makeprg=php\ -ln\ %
    
    " THANKS: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#errorformat-LaTeX
    " THANKS: https://flukus.github.io/vim-errorformat-demystified.html
    " THANKS: https://stackoverflow.com/a/29102995/9881278
    " THANKS: https://github.com/wincent/wincent/blob/b38dc93bb5/roles/dotfiles/files/.vim/after/compiler/README.md
    
    " THANKS: https://stackoverflow.com/a/7272248/9881278
    " THANKS: https://stackoverflow.com/a/7193830/9881278
    " THANKS: https://vim.fandom.com/wiki/Runtime_syntax_check_for_php
    
    CompilerSet errorformat=Parse\ error:\ %m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G%.%#
    " CompilerSet errorformat=%m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G
    " CompilerSet errorformat=PHP\ Parse\ error:\ %m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G%.%#
    
    let &cpo = s:save_cpo
    unlet s:save_cpo
    
    " vim: sw=2 sts=2 et
    



    " Vim compiler file
    " Compiler:     PHP
    " Maintainer:   Felipe Silva
    " Last Change:  2020 Sep 30
    
    if exists('current_compiler')
      finish
    endif
    let current_compiler = 'phpunit'
    
    if exists(':CompilerSet') != 2
      command -nargs=* CompilerSet setlocal <args>
    endif
    
    let s:save_cpo = &cpo
    set cpo-=C
    
    CompilerSet makeprg=composer\ test\ %
    
    " THANKS: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#errorformat-LaTeX
    " THANKS: https://flukus.github.io/vim-errorformat-demystified.html
    " THANKS: https://stackoVerflow.com/a/29102995/9881278
    " THANKS: https://github.com/wincent/wincent/blob/b38dc93bb5/roles/dotfiles/files/.vim/after/compiler/README.md
    
    " THANKS: https://stackoverflow.com/a/5296062/9881278
    " THANKS: https://github.com/haginaga/vim-compiler-phpunit
    
    CompilerSet errorformat=%E%n)\ %.%#:%o
    CompilerSet errorformat+=%-G%.%#FAILURES!%.%#
    CompilerSet errorformat+=%-G%.%#WARNINGS!%.%#
    CompilerSet errorformat+=Fatal\ error:\ %m
    CompilerSet errorformat+=%Z%f:%l
    CompilerSet errorformat+=%W%f:%l:
    CompilerSet errorformat+=%C%m
    CompilerSet errorformat+=%C
    CompilerSet errorformat+=%-G%.%#
    
    let &cpo = s:save_cpo
    unlet s:save_cpo
    
    " vim: sw=2 sts=2 et
    
    


    Para trocar de um para outro basta utilizar :compiler <nome> , 예: :compiler gorun ou :compiler gotest .

    크레딧:


  • Wincent
  • flukus
  • Go format
  • vimdoc
  • Duvidas gerais
  • 좋은 웹페이지 즐겨찾기