2010-04-09 5 views
38

Je veux obtenir le nom de fichier sans l'extension de fichier dans Vim.Récupère le nom du fichier sans extension de fichier dans la fonction Vim.

J'ai écrit les fonctions suivantes dans mon fichier .vimrc pour compiler et exécuter le programme Java.

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

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

Dans le côté de la fonction comment puis-je obtenir le nom de fichier sans l'extension.

+0

Vous n'avez pas à faire une fonction pour faire cela juste '(carte :! Java%: r )' – yesennes

Répondre

75

:help expand() devrait vous donner la réponse, voir expand().

Vous devez utiliser le modificateur r pour%, avec %:r au lieu de % pour obtenir le nom de fichier sans extension. Si vous souhaitez écrire des fonctions pour générer et exécuter des fichiers, vous devez également consulter la documentation de shellescape afin d'éviter les problèmes d'espaces dans le nom de fichier ou le chemin d'accès.

+0

Merci beaucoup pour cela! Utilisé comme un moyen facile de convertir les formats de fichiers actuels sans sauter de vim. – Jason

+0

Y a-t-il une différence entre '%: r' et'% <'? – nggit

+0

Oui, mais c'est subtil. '% <' est toujours supporté pour la rétrocompatibilité avec 3.0, et est équivalent à '%: r'. La forme ': r' est préférée. Il peut être combiné avec les autres modificateurs, et peut également être utilisé plusieurs fois, par exemple si vous avez plusieurs extensions, telles que '.tar.gz'. – tonio

4

Je littéralement viens de lire une question similaire à celle (dans que quelqu'un d'autre semblait essayer de configurer vim pour construire automagiquement pour eux avec la touche F), et écrit an answer sur la façon dont vous pouvez tirer parti :make de la puissance de vim commande sans même avoir besoin d'écrire un Makefile. Dans votre cas, c'est moins directement lié à la question, mais je pensais que je le mentionnerais au cas où vous seriez intéressé.

En outre, quelqu'un semble avoir écrit quelque chose sur Vim Tips Wiki sur la façon de configurer la commande :make de vim pour travailler spécifiquement avec des projets Java construits avec ant. Je n'ai pas travaillé avec Java depuis un moment, mais dans votre cas, ce serait un bon endroit pour commencer.

0

Si vous voulez exand un nom de fichier (autre que % etc) jeter un oeil à 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") retours main.

0

Je suis venu ici à la recherche d'une réponse à une question similaire. Je voulais être capable d'extraire le nom de classe actuel du fichier java en cours d'édition. J'ai trouvé une façon très nette à faire dans vim avec une abréviation:

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

Placez cette ligne dans votre vimrc (ou similaire) pour que cela fonctionne. Une abréviation se déclenchera automatiquement dès que vous appuierez sur espace, et donc je les préfixes habituellement avec 'x' pour éviter leur expansion accidentelle. L'astuce ici est la combinaison de :t et :r dans l'argument à expand(). % est le « nom du fichier en cours », :t sélectionne seulement le t tous de la trajectoire (« dernier composant de chemin seulement ») et :r sélectionne seulement le r oot (« une prolongation éliminée »). (Les parties citées proviennent de la documentation officielle expand().)

Ainsi, lorsque vous créez une nouvelle classe dans le fichier /a/b/ClassIAmAboutToCreate.java vous tapez:

public class xclass { 

le moment où vous appuyez sur l'espace après « XCLASS », l'abréviation sera étendu à public class ClassIAmAboutToCreate, ce qui est exactement ce que vous avoir besoin.

Notez également que l'abréviation peut être déclenché en appuyant sur les touches Ctrl + ] qui évite d'insérer un espace après le nom de la classe.

Questions connexes