2009-04-12 13 views
26

Estoy tratando de encontrar el nombre del archivo que estoy editando dentro de Vim. Entonces puedo usarlo para mapear F5 para compilar este archivo. Sería genial, por supuesto, si pudiera reconocer el formato de archivo y elegir el compilador en consecuencia, pero realmente no es necesario. Si encuentro el nombre del archivo, podría hacerlo yo mismo. Pero realmente no puedo encontrar la manera de obtener el nombre del archivo que estoy editando.Obtener el nombre del archivo actual en Vim

Conozco el comando :make, y ya lo he correlacionado, pero para scripts pequeños/programas de prueba, realmente no quiero tener que escribir primero un archivo MAKE simple.

+1

similares a http://stackoverflow.com/q/916875/80161 y http://stackoverflow.com/q/2233905/80161 –

+4

y mayores de los que es similar a. – martiert

+0

Sin dudas. Me habría agregado a la lista "vinculada" pero aún no tengo el permiso. –

Respuesta

22

Estoy tratando de encontrar el nombre del archivo que estoy editando dentro de vim.

Para el búfer en esto le dará el nombre del archivo,

echo "You're editing " bufname("%") 

(solo por decirlo de alguna file.vim, y la fuente es ": así%". Pero no lo hago creo que esto es lo que necesita.

, así que puede utilizarlo para mapear F5 para compilar este archivo, para propósitos de prueba. por supuesto, sería genial si pudiera reconocer el formato de archivo y elija compilador en consecuencia, pero realmente no es necesario. Si encuentro la na del archivo, podría hacerlo yo mismo. Pero realmente no puedo encontrar la manera de obtener el nombre del archivo que estoy editando.

Puede hacer varias cosas. Si vim reconoce el tipo de archivo que está editando, puede asignar F5 a su comando de compilación y poner ese comando en su directorio ftplugin específico, por lo que será válido solo para ese tipo de archivo.Por ejemplo, se pone

nmap <f5> :!compilername %<cr> 

en cpp.vim, fortran.vim, python.vim, etc. El % da el nombre del archivo actual que está editando. Esto ejecutará el compilador como si llamaras al compilername file.cpp en el símbolo del sistema.

Por supuesto, compilername será diferente para cada tipo de archivo; no vas a compilar fortran con el compilador cpp, pones fortrancompiler % en ese caso.

Esa es una opción. También puede probar de acuerdo con los comandos de extensión autocmd en su .vimrc para que reconozca el tipo de archivo según la extensión del archivo. Este es todo el uso estándar de vim, nada raro. Ahora, no estoy seguro de cómo te gustaría hacer esto, así que solo te dirigiré al Vim Wiki, donde puedes encontrar todo tipo de artículos que cubren esto (y también algunos consejos para algunos compiladores).

sé del comando :make, y ya han mapeado, pero para los programas scripts/pruebas pequeñas, realmente no quiero tener primero en escribir un makefile sencilla.

Sí, eso parece exagerado. Personalmente (cuando estoy en Windows), encuentro que el archivo por lotes simple es mucho más fácil de escribir para la mayoría de las cosas, excepto para los grandes proyectos. Si el programa está en uno o dos archivos, simplemente lo compilo usando algún mapeo de línea.

25

Puede usar los comandos% character in vim para obtener el nombre de archivo actual con la extensión. Por ejemplo,

:!javac %

para ejecutar javac en el archivo actual.

Usted puede encontrar más información con

:help filename-modifiers

2

Bueno, es % como un código de sustitución dentro de cosas como: w. Entonces : w bla% escribe una copia de su archivo con 'blah' antes. O !! echo% reemplaza la línea actual con él. No sé si eso satisface tus necesidades o no.

3

Como ya se ha mencionado, % se ha ampliado al archivo actual. Si desea obtener esa cadena en la secuencia de comandos vim, use expand("%").

Pero es posible que desee simplemente configurar makeprg en algo como "compiler-command\ %" y ejecutar :make - obtendrá soporte de reparación rápida de esa manera. (abrir ventana de errores/advertencias con :copen)

5

Los otros puntos son muy útiles. Añadiría que probablemente desee utilizar: p, para asegurarse de que el nombre del archivo se pasa como una ruta totalmente calificada. Sin él, Vim puede pasarlo como una ruta relativa a la ruta actual de Vim, que puede ser o no la misma ruta que usa el compilador. Así que una solución es:

nnoremap <silent> <f5> :!javac %:p<cr> 

Si desea detectar automáticamente el tipo de archivo se puede utilizar AutoCommand

autocmd FileType java  nnoremap <buffer> <silent> <f5> :!javac %:p<cr> 
autocmd FileType cpp  nnoremap <buffer> <silent> <f5> :!gcc %:p<cr> 
+0

+1 para autocmd FileType. Pero debe usar g ++ en lugar de gcc para el archivo cpp; de lo contrario, tendrá un error. – duleshi

2

Uso % como un sustituto de su nombre de archivo. Pero personalmente, realmente creo que puedes presionar :make para hacer exactamente lo que quieras.

Solía ​​hacer exactamente lo que quiere evitar: simplemente hackear un Makefile de dos líneas para cada carpeta en la que estaba. Disfruté de la compatibilidad con quickfix de :make tanto que parecía como un Makefile de dos líneas como una pequeña sobrecarga en el panorama general.

... Desde entonces he aprendido mejor. Puede usar un autocmd o ftplugin para configurar la opción makeprg, configurando :make para usar el comando de su elección en función del tipo de archivo actual. En sí mismo, eso te ahorra un poco de trabajo.

El problema comienza cuando trabajamos una herramienta cuyos mensajes de error no se parecen a los de GCC. Para evitar esto, vim también proporciona la opción errorformat. errorformat es muy sofisticado. Si realmente desea obtener más información, comience con :h error-format. A largo plazo, la sofisticación es realmente genial. Significa que, una vez que aprende a usarlo, puede analizar prácticamente cualquier salida del compilador y formatearla para su visualización con quickfix (:cope o :cl).

En el corto plazo, puede ser un poco malo, porque significa que las primeras veces que pirateas un formato de error juntas, vas a pasar un poco de tiempo desconcertando los vimdocs y volver a cargar y crear archivos que dispararán los diversos mensajes de error que su compilador puede producir. Eso definitivamente no es lo que quieres si solo estás trabajando brevemente fuera de tu zona de confort, o si tu jefe está sobre tu hombro y te urge corregir este error ahora.

Con suerte (y probable), alguien que ya ha pasado por este dolor para ti, y, o bien configurado adecuadamente para su errorformat predeterminado ftplugin, o liberado como parte de una secuencia de comandos de vim que están a la espera de la comunidad para instalar y adorar

Como una demostración rápida, aquí hay un par de líneas de I hackeado para mi .vim/ftplugin/haskell.vim archivo:

setl makeprg=ghc\ --make\ % 
setl errorformat=%E%f:%l:%c:,%C\ %.%m,%Z,%f:%l:%c:%m 

utilizo setl aquí para que estas opciones sólo están configurados para archivos de origen Haskell; si edito un tipo diferente de archivo fuente simultáneamente, puede usar una configuración diferente en su lugar.

Si termina utilizando :make, también recomiendo configurar su configuración switchbuf. Me resulta un poco molesto tener que presionar ctrl-O después de una compilación si la solución rápida se emociona y te lleva al archivo equivocado. Yo uso:

set switchbuf=useopen,usetab,newtab 
Cuestiones relacionadas