Compilando código do vim


18

Novo no vime e eu quero poder compilar código de dentro vimsem executar um novo terminal e chamar o compilador.

Como faço para fazer isso? Observe que esse requisito não se restringe gccapenas, às vezes eu preciso chamar pythontambém o script atual em que estou trabalhando, para que você entenda ...

Respostas:


25

Escreva a Makefile, então você pode simplesmente:

:make

de dentro do vim. E se a compilação falhar:

:copen

irá mostrar aviso e erros. Selecioná-los o levará ao arquivo e linha apropriados.


12

No vim, o arquivo atual pode ser referido como %, portanto,

:!python %

Veja :he cmdline-special(ou aqui )


6

Se você não gosta de makefiles por algum motivo, 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.


3

Experimente o plugin quickrun do Vim. A página inclui um link para o github, que é a versão mais recente e é o que eu uso.

A vantagem de usar este plug-in em vez de fazer :!, a saída do comando será coletada e mostrada em uma janela dividida.

Além disso, por padrão, esse plug-in interrompe sua instância do vim quando você solicita a execução de um comando, mas pode ser configurado para executar o comando de forma assíncrona, e é isso que eu faço. Leia a documentação para mais detalhes.


3

Eu uso um vim que possui o interpretador Python compilado.

Eu fonte um arquivo python que tem esta 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 tinha definido anteriormente algumas variáveis ​​de ambiente para determinar o terminal exato a ser executado se estiver usando o gvim, ou no mesmo terminal se não estiver em um X.

Normalmente, digito '; ri' em um buffer Python para executá-lo (geralmente para testá-lo).


2

O Vim pode ser usado para compilar usando o gnu make no arquivo atual - mesmo se não houver Makefile para o arquivo (para mais detalhes, veja aqui ):

:make %:r

Dessa forma, o vim fornece acesso ao feedback de erro do quickfix na lista compiler ( :help quickfix) - :cnPróximo erro, :cpErro anterior, :cwNova janela listando erros.

Se você não possui o gnu make, pode definir a variável makeprg (altere para g ++ se estiver compilando C ++):

:se makeprg=gcc\ -o\ %<\ %

e, em seguida, use o comando vim make para compilar o arquivo atual e obter uma lista rápida de erros no vim:

:make

EDIT: Se você também deseja executar o executável compilado a partir do vim, você pode fazer ('!' Executa, '%: r' é o nome do arquivo sem o sufixo):

:!./%:r

1

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

Por exemplo. :!python something.py


0
!gcc file.c && ./a.out

Isso irá compilar o arquivo C e executar o executável, solicitando a entrada na janela do vim.


11
A resposta mais completa incluiria o ':', e para torná-lo mais versátil você poderia mudar 'file.c' para o operador de arquivo atual '%'::!gcc % && ./a.out
Pierz

Eu estou fazendo algo semelhante no meu .vimrc, eu mapear Command + Shift + Ra:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.