Compilando código de vim

18

Nuevo en vimyy quiero poder compilar código desde dentro vimsin ejecutar un nuevo terminal y llamar al compilador.

¿Cómo voy a hacer esto? Tenga en cuenta que este requisito no se limita gccsolo a, a veces necesito llamar pythontambién al script actual en el que estoy trabajando, por lo que tiene la idea ...

phunehehe
fuente

Respuestas:

25

Escribe un Makefile, entonces puedes simplemente:

:make

desde adentro vim. Y si la compilación falla:

:copen

le mostrará advertencias y errores. Seleccionarlos lo llevará al archivo y la línea apropiados.

Chris
fuente
12

En vim, el archivo actual se puede denominar %, así

:!python %

Ver :he cmdline-special(o aquí )

Glenn Jackman
fuente
6

Si por algún motivo no le gustan los makefiles, puede llamar a cualquier comando con:!

Por ejemplo, puede usar ":! Javac * .java && java Foo" para compilar y ejecutar un programa java simple. También puede llamar a otros sistemas de compilación (scons, cmake, ...) de esta manera.

Stribika
fuente
3

Pruebe el complemento de ejecución rápida para Vim. La página incluye un enlace a github, que es la última versión y que es lo que uso.

La ventaja de usar este complemento en lugar de hacerlo :!, la salida del comando se recopilará y se mostrará en una ventana dividida.

Además, de forma predeterminada, ese complemento colgará su instancia de vim cuando le solicite que ejecute un comando, pero se puede configurar para ejecutar el comando de forma asincrónica, que es lo que hago. Lea la documentación para más detalles.

Shrikant Sharat
fuente
3

Utilizo un vim que tiene compilado el intérprete de Python.

Origen un archivo de Python que tiene esta función:

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)

Y asignarlo a un atajo 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>

Anteriormente había configurado algunas variables de entorno para determinar el terminal exacto en el que se ejecutaría si usaba gvim, o en el mismo terminal si no en una X.

Luego, generalmente solo escribo '; ri' en un búfer de Python para ejecutarlo (generalmente para probarlo).

Keith
fuente
2

Vim se puede usar para compilar usando gnu make en el archivo actual, incluso si no hay un Makefile para el archivo (para más detalles ver aquí ):

:make %:r

De esta forma, vim le proporciona acceso a los comentarios de error de corrección rápida de la :help quickfixlista del compilador ( ): :cnSiguiente error, :cpError anterior, :cwErrores de listado de nueva ventana.

Si no tiene gnu make, puede configurar la variable makeprg (cambie a g ++ si está compilando C ++):

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

y luego use el comando vim make para compilar el archivo actual y obtener una lista rápida de errores en vim:

:make

EDITAR: si también desea ejecutar el ejecutable compilado desde vim, puede hacerlo ('!' Se ejecuta, '%: r' es el nombre del archivo sin su sufijo):

:!./%:r
Pierz
fuente
1

En el caso de gcc, python, etc., puede llamarlo con dos puntos (:!)

P.ej. :!python something.py

el JinX
fuente
0
!gcc file.c && ./a.out

Esto compilará su archivo C y ejecutará el ejecutable pidiendo la entrada todo dentro de su ventana vim.

Hasil Sharma
fuente
1
Una respuesta más completa incluiría ':', y para hacerlo más versátil, podría cambiar 'file.c' para el operador de archivo actual '%'::!gcc % && ./a.out
Pierz
Estoy haciendo algo similar en mi .vimrc, me mapeo Command + Shift + Ra:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r
0

Respecto al caso particular de compilar código fuente.

Y si tiene algo que puede compilar python, configúrelo en makeprgconsecuencia.

Luc Hermitte
fuente