Question

Je veux écrire des autocmd qui vérifient si le nom de fichier est ceci ou tel.

J'ai essayé:

autocmd VimEnter * if % is "preamble" | Explore | endif
autocmd VimEnter * if %=="preamble" | Explore | endif
autocmd VimEnter * if &filename == "preamble" | Explore | endif

Mais rien de tout cela ne fonctionne?

Que devrais-je faire?

(Cet exemple est trop simplifié, notez que j'aimerais également avoir une déclaration ELSE).

Était-ce utile?

La solution

Vous devriez obtenir le nom de fichier actuel comme @%. Pour par exemple, echo @% vous donnera le nom de fichier, alors que echo % Ne fera pas. Cependant, pour les actions sur le fichier, utilisez %, par exemple source %.

Cela devrait probablement fonctionner pour ce que vous voulez faire:

autocmd VimEnter * if @% == 'preamble' | echo 'hello' | else | echo 'world' | endif

Autres conseils

autocmd BufRead,BufNewFile preamble Explore

Il y a deux problèmes avec les exemples dans le post d'origine:

  1. Ni le % ni &filename retournera le nom de fichier comme vous les avez utilisés.
    Regardez l'aide pour le expand() Fonction pour voir comment obtenir le nom de fichier: :h expand()

  2. Vous ignorez le créneau dans AutoCMD où un modèle de correspondance de fichiers serait normalement spécifié. Le troisième emplacement de l'autocmd (* Dans vos versions) est en fait un modèle pour correspondre aux noms de fichiers. Voir :h autocmd-patterns. Cela devrait fonctionner bien si vous voulez ignorer la fente de modèle, mais si c'est le cas, vous devez résoudre le problème au paragraphe 1 ci-dessus. Par exemple,

    autocmd BufRead,BufNewFile * if expand('%') =~ "preamble" | Explore | endif

Informations supplémentaires à l'aide de '@%' avec autocmd

Quelques autocmd événements Ne soutenez pas la @% Registre nommé pour lire le nom de fichier actuel. Dans ces cas, il vaut mieux utiliser u003Cafile>:

expand('<afile>')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top