Compilando código do vim

17

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 ...

    
por phunehehe 22.02.2011 / 11:45

9 respostas

25

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.

    
por 22.02.2011 / 11:56
12

No vim, o arquivo atual pode ser chamado de % , então

:!python %

Veja :he cmdline-special (ou aqui )

    
por 22.02.2011 / 16:45
6

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.

    
por 22.02.2011 / 13:44
3

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.

    
por 23.02.2011 / 07:21
3

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

    
por 23.02.2011 / 08:58
1

No caso do gcc, python, etc., você pode chamá-lo com um sinal de dois pontos (:!)

:!python something.py

    
por 22.02.2011 / 14:35
1

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
    
por 22.11.2014 / 10:27
0
!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.

    
por 20.06.2014 / 15:13
0

Em relação ao caso particular de compilar o código-fonte.

  • Resposta curta: veja a resposta de Chris: link
  • Resposta longa e mais precisa: aqui está a minha em SO: link

E se você tiver algo que possa compilar o python, defina makeprg de acordo.

    
por 20.06.2014 / 18:25