2010-04-09 14 views
38

Quiero obtener el nombre del archivo sin la extensión de archivo en Vim.Obtenga el nombre del archivo sin extensión de archivo en la función Vim.

Escribí las siguientes funciones en mi archivo .vimrc para compilar y ejecutar el programa Java.

:function! JAVA_RUN() 
:!javac %^M 
:endfunction 

map <F3> :execute JAVA_RUN()<CR> :source $HOME/.vimrc<CR> 

En lado la función de cómo puedo obtener el nombre del archivo con la extensión.

+0

No tiene que hacer una función para hacer eso '(mapa :! Java%: r )' – yesennes

Respuesta

75

:help expand() debería darle la respuesta, vea expand().

Debe utilizar el modificador r para%, con %:r en lugar de % para obtener el nombre del archivo sin extensión.

Si desea escribir funciones para compilar y ejecutar archivos, también debe consultar la documentación del shellescape, para evitar problemas con espacios en el nombre o la ruta del archivo.

+0

¡Muchas gracias por esto! Lo usé como una forma fácil de convertir formatos de archivo actuales sin salirse de vim. – Jason

+0

¿Hay una diferencia entre '%: r' y'% <'? – nggit

+0

Sí, lo hay, pero es sutil. '% <' todavía se admite por compatibilidad con versiones anteriores con 3.0, y es equivalente con '%: r'. La forma ': r' es preferida. Se puede combinar con otros modificadores y también se puede usar varias veces, por ejemplo, si tiene varias extensiones, como '.tar.gz'. – tonio

4

Literalmente acabo de leer una pregunta similar a esta (en la que otra persona parecía estar tratando de configurar Vim para construir automagicamente para ellos con la tecla F), y escribió an answer acerca de cómo puede aprovechar el poder de vim de :make comando sin necesidad de escribir un Makefile. En su caso, está menos directamente relacionado con la pregunta, pero pensé que lo mencionaría en caso de que estuviera interesado.

Además, alguien parece haber escrito algo en Vim Tips Wiki sobre cómo configurar el comando :make de vim para trabajar específicamente con proyectos Java creados con ant. No he trabajado con Java en un tiempo, pero en su caso específicamente podría ser un buen lugar para comenzar.

0

Si desea exand un nombre de archivo (que no sea % etc) echar un vistazo a fnamemodify()

fnamemodify({fname}, {mods})    *fnamemodify()* 
     Modify file name {fname} according to {mods}. {mods} is a 
     string of characters like it is used for file names on the 
     command line. See |filename-modifiers|. 

fnamemodify("main.java", ":r") vuelve main.

0

Vine aquí buscando una respuesta para una pregunta similar. Quería poder extraer el nombre de clase actual del archivo java que se está editando. He encontrado una manera muy ordenada para hacer esto en vim con una abreviatura:

ab xclass <C-R>=expand('%:t:r')<CR> 

Coloque esta línea en su .vimrc (o similar) para que esto funcione. Una abreviatura se disparará automáticamente tan pronto como presiones espacio, por lo que usualmente las prefijo con 'x' para evitar su expansión accidental. El truco aquí es la combinación de :t y :r en el argumento expand(). % es el "nombre de archivo actual", :t selecciona sólo el t ail de la trayectoria ("único componente última ruta") y :r selecciona sólo el r oot ("eliminado una extensión"). (Las partes citadas son de la documentación oficial expand().)

Así que cuando se está creando una nueva clase en el archivo /a/b/ClassIAmAboutToCreate.java debería escribir:

public class xclass { 

el momento en que se pulsa el espacio después de "xclass", la abreviatura se ampliará a public class ClassIAmAboutToCreate, que es exactamente lo que necesitar.

Además, observe que una abreviatura puede ser activado pulsando Ctrl + ] que evita la inserción de un espacio después del nombre de la clase.

Cuestiones relacionadas