Escreva um Makefile
, então você pode simplesmente:
:make
de dentro do vim. E se a compilação falhar:
:copen
mostrará avisos e erros. Selecioná-los levará você ao arquivo e linha apropriados.
Novo para vim
ee eu quero ser capaz de compilar código de dentro de vim
sem executar um novo terminal e chamar o compilador.
Como faço para fazer isso? Note que este requisito não está restrito a gcc
, às vezes preciso chamar python
também no script atual em que estou trabalhando, então você tem a idéia ...
Escreva um Makefile
, então você pode simplesmente:
:make
de dentro do vim. E se a compilação falhar:
:copen
mostrará avisos e erros. Selecioná-los levará você ao arquivo e linha apropriados.
No vim, o arquivo atual pode ser chamado de % , então
:!python %
Veja :he cmdline-special
(ou aqui )
Se você não gosta de makefiles por algum motivo, você pode chamar qualquer comando com:!
Por exemplo, você pode usar ":! javac * .java & & java Foo" para compilar e executar um programa java simples. Você também pode chamar outros sistemas de compilação (scons, cmake, ...) dessa maneira.
Experimente o plugin quick run para o Vim. A página inclui um link para o github, que é a versão mais recente e é o que eu uso.
A vantagem em usar este plugin em oposição a fazer :!
, a saída do comando será coletada e mostrada em uma janela dividida.
Além disso, por padrão, esse plugin irá travar sua instância vim quando você pedir para executar um comando, mas ele pode ser configurado para executar o comando de forma assíncrona, que é o que eu faço. Leia a documentação para mais detalhes.
Eu uso um vim que tem o interpretador Python compilado.
Eu fonte um arquivo python que tem essa função:
def pyterm(filename="", interactive=1):
cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
if "DISPLAY" in os.environ:
return run_config(os.environ.get("XTERM"), cmd)
else:
return os.system(cmd)
E mapeie-o para um atalho de teclado:
nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>
Eu configurei anteriormente algumas variáveis de ambiente para determinar o terminal exato a ser executado, se estiver usando gvim, ou no mesmo terminal, se não em um X.
Então, normalmente, apenas escrevo '; ri' em um buffer do Python para executá-lo (geralmente para testá-lo).
No caso do gcc, python, etc., você pode chamá-lo com um sinal de dois pontos (:!)
:!python something.py
O vim pode ser usado para compilar usando o gnu make no arquivo atual - mesmo que não exista Makefile para o arquivo (para mais detalhes veja aqui ):
:make %:r
Desta forma, o vim fornece a você acesso ao feedback de erro quickfix da lista do compilador ( :help quickfix
) - :cn
Próximo erro, :cp
Erro anterior, :cw
Listagem de novas janelas erros.
Se você não tem o gnu make então você pode definir a variável makeprg (mude para g ++ se você estiver compilando C ++):
:se makeprg=gcc\ -o\ %<\ %
e, em seguida, use o comando vim make para compilar o arquivo atual e obter uma lista de erros do quickfix no vim:
:make
EDIT: Se você também quer rodar o executável compilado de dentro do vim, você pode fazer ('!' executa, '%: r' é o nome do arquivo sem seu sufixo):
:!./%:r
!gcc file.c && ./a.out
Isto irá compilar seu arquivo C, assim como executar o executável solicitando a entrada dentro de sua janela vim.