AutoCMD Vérifier le nom de fichier dans VIM?
-
14-11-2019 - |
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).
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:
Ni le
%
ni&filename
retournera le nom de fichier comme vous les avez utilisés.
Regardez l'aide pour leexpand()
Fonction pour voir comment obtenir le nom de fichier::h expand()
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>')