Obtenez le nom du fichier sans extension de fichier dans la fonction Vim.

Je veux obtenir le nom du fichier sans l’extension de fichier dans Vim.

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

 :function! JAVA_RUN() :!javac %^M :endfunction map  :execute JAVA_RUN() :source $HOME/.vimrc 

À côté de la fonction, comment puis-je obtenir le nom de fichier sans l’extension.

: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 voulez écrire des fonctions pour créer et exécuter des fichiers, vous devriez également consulter la documentation de shellescape , afin d’éviter des problèmes avec des espaces dans le nom ou le chemin du fichier.

Je lisais littéralement une question similaire à celle-ci (en ce sens que quelqu’un d’autre essayait de configurer vim pour la construire automatiquement avec la touche F), et a répondu à la question de savoir comment tirer parti de la puissance de vim :make même besoin d’écrire un Makefile. Dans votre cas, c’est moins directement lié à la question, mais je pensais le mentionner au cas où vous seriez intéressé.

De plus, quelqu’un semble avoir écrit quelque chose sur le wiki de Vim Tips sur la façon de configurer la commande vim’s :make pour travailler spécifiquement avec des projets Java construits avec ant. Je n’ai pas travaillé avec Java depuis quelque temps, mais dans votre cas, cela pourrait être un bon sharepoint départ.

Si vous voulez exandrer un nom de fichier (autre que % etc), jetez un oeil à fnamemodify()

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

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

Je suis venu ici pour chercher une réponse à une question similaire. Je voulais pouvoir extraire le nom de classe actuel du fichier java en cours d’édition. J’ai trouvé un moyen très pratique de le faire en vim avec une abréviation:

 ab xclass =expand('%:t:r') 

Placez cette ligne dans votre fichier .vimrc (ou similaire) pour que cela fonctionne. Une abréviation se déclenchera automatiquement dès que vous appuierez sur l’espace, et je les préfixe généralement avec «x» pour éviter leur expansion accidentelle.

L’astuce ici est la combinaison de :t et :r dans l’argument pour expand() . % est le “nom du fichier en cours”,: :t sélectionne uniquement le bout du chemin (“composant du dernier chemin uniquement”) et :r sélectionne uniquement le rôle (“une extension supprimé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 { 

Au moment où vous appuyez sur “space”, l’abréviation sera étendue à public class ClassIAmAboutToCreate , ce qui est exactement ce dont vous avez besoin.

Notez également qu’une abréviation peut être déclenchée en appuyant sur Ctrl + ], ce qui évite d’insérer un espace après le nom de la classe.