VimScript intermédiaire

Dans le tutoriel Configuration de base de Vim, Je vous ai montré les bases de la configuration d'un Vim éditeur. Maintenant il est temps d'en apprendre plus. VimScript est un langage de programmation complet avec lequel vous pouvez créer tout type de programme d'automatisation dont vous pourriez avoir besoin. Ce tutoriel amène vos connaissances au niveau supérieur avec un créateur de structure de répertoire de projet, explorant Commandes automatiques, et un regard sur le Maximum-impressionnant extension pour MacVim.

Commandes automatiques

Commandes automatiques sont des commandes à avoir Vim effectuer une action lorsqu'une condition particulière s'applique: création d'un nouveau fichier, écriture dans un fichier, etc..

C'est un excellent moyen d'automatiser une partie du travail que vous devez effectuer dans un projet. Par exemple, lorsque vous enregistrez une TOUPET fichier, un autocommande peut le compiler à la normale CSS pour vous.

Le format pour un autocommande est:

autocmd    

est l'action de l'éditeur que la commande doit attendre. Vous pouvez également spécifier plusieurs actions à la fois en les séparant par une virgule..

Avec 86 possible pour accrocher, je ne les décrirai pas tous ici. Pour voir la liste complète, vous pouvez taper : aide autocmd-events-abc. Cela ouvre un tampon différent avec la liste complète. Pour le programme de démonstration, je vais utiliser le BufNewFile action pour exécuter la fonction de recherche et de création d'une structure de dossier de répertoire de projet.

le est une expression régulière pour le nom de fichier sur lequel agir.

le est la commande réelle dans VimScript exécuter lorsque le arrive qui correspond à la . Il faut commencer par un colon, :, comme vous le verriez dans la ligne d'état de l'éditeur.

Étant donné que je développe beaucoup de sites Web, la fonction d'assistance créera la structure de projet nécessaire pour un nouveau site Web. Par conséquent, la autocommande doit déclencher sur HTML création de fichier. Le format requis est:

une fonction! CreateProject (fichier) echo "Enregistrement" d'un: fichier endfunc autocmd BufNewFile * .html: appelez CreateProject (expand ('%: p')) 

La fonction du projet n’est que le squelette. Au fur et à mesure de l'avancement du tutoriel, j'ajouterai d'autres éléments à cette fonction..

Avec cela dans le .vimrc fichier, le nom du fichier apparaît en écho dans la barre d'état lorsque vous ouvrez un nouveau fichier. HTML déposer dans un tampon. Vous pouvez le faire en utilisant le :Nouveau commande pour créer un nouveau tampon avec le nom de fichier donné, ou quand vous ouvrez Vim avec un nom de fichier sur la ligne de commande.

le expand ('%: p') macro donne le chemin complet du nouveau fichier lorsque le autocommande déclencheurs. De cette façon, la fonction CreateProject obtiendra le nom du fichier et son répertoire.

Cela fonctionne très bien pour simplement ouvrir et fermer Vim sans jamais recharger le fichier de configuration. Parfois, cependant, vous voudrez modifier le fichier de configuration et le recharger sans quitter.. Vim sera ensuite effectuer la autocmd plusieurs fois par nouveau tampon. Cela pourrait causer un désordre.

Vous devez donc mettre le autocmd dans un augroup pour Groupe Autocomand. Ensuite, effacez le groupe avant d'ajouter une nouvelle commande. le autocmd la ligne devient:

augroup CreateProject autocmd! autocmd BufNewFile * .html: appelez CreateProject (expand ('%: p')) augroup END 

le autocmd! raconte Vim d'oublier ce qu'il y avait dans ce groupe auparavant. Utilisez ce bloc au lieu du autocmd ligne dans la dernière liste. C'est une bonne pratique pour écrire autocmds.

Avec le script créé jusqu'à présent chargé dans Vim, rouvrir Vim avec cette ligne de commande: vim test.html. L'image ci-dessus est ce que vous obtiendrez. Cela donnera le chemin au nouveau fichier. Si vous faites la même chose, mais avec un fichier qui existe déjà, vous ne recevrez pas cette invite dans la ligne du bas.

Structures de données

VimScript a plus que de simples variables. Vous pouvez également utiliser des listes. Une liste est un regroupement d'objet en une variable. Liste sont parfaits pour la détention d'informations connexes. Dans le cas de la création d'une structure de fichier, il y aura deux listes: une liste de répertoires à créer et une liste de fichiers à créer.

Vous spécifiez une liste avec le []. Par conséquent, créez deux listes comme ceci:

let dirs = ["/ js", "/ js / final", "/ css", "/ css / final", "/ doc"] let fichiers = ["/ js / base.js", "/ css / base.css "," /doc/help.html "] 

Cela crée deux listes: une appelée dirs et les autres 'fichiers'. Si vous voulez inspecter ce qui est dans une liste, vous pouvez la référencer avec un index. Rappelles toi, VimScript a une indexation basée sur zéro. Pour obtenir le premier élément, vous devez utiliser l'index de zéro. Une fois que cela est dans votre .vimrc fichier et vous le rechargez, vous pouvez les voir avec ceci:

: fichiers echo [0] 

Cela fera écho «/js/base.js» à la ligne d'état. Vous pouvez également référencer les valeurs en partant de la valeur la plus à droite avec un index négatif. Donc,

: fichiers echo [-2] 

echo "/css/base.css" sur la ligne d'état. Vous pouvez même obtenir un sous-groupe d'éléments comme celui-ci:

: fichiers d'écho [1: 2] 

Cela provoquera la chaîne ['/css/base.css', '/doc/help.html'] à afficher dans la ligne d'état. Un sous-ensemble d'un ensemble est toujours un ensemble!

J'avais les deux définitions de listes en dehors de la fonction uniquement à des fins de démonstration. Il est préférable de ne pas créer de variables dans le global scope (ie: en dehors d'une fonction). Avoir beaucoup de variable globale rend la portée globale encombrée. Il peut également entrer en conflit avec d'autres scripts plus tard.

Contrôle du flux de programme

Afin de traiter chaque élément de la liste, je vais utiliser un pour-structure en boucle. UNE pour-boucle exécute le code inclus de manière répétée jusqu'à ce qu'une condition se produise. Pour boucler sur chaque élément de la liste, le code devient ceci:

une fonction! CreateProject (fichier) let dirs = ["/ js", "/ js / final", "/ css", "/ css / final", "/ doc"] let fichiers = ["/ js / base.js", "/css/base.css", "/doc/help.html"] pour les répertoires dans les répertoires et le nom des fichiers dans endfunc autocmd BufNewFile * .html: appelez CreateProject (expand ('%: p')) 

Les deux listes sont maintenant dans la fonction et deux pour les boucles parcourent chaque liste. Remarque, il y a une nouvelle variable avant le dans déclaration et la liste après la dans déclaration. La nouvelle variable acquiert chaque élément du tableau par la suite..

Il existe une autre structure en boucle dans VimScript appelé le tandis que-boucle. Sa forme de base est:

laisser index = 0 pendant l'index < len(dirs) echo l:dirs[index] l:index += 1 endwhile 

Ce code boucle sur chaque élément de la dirs la liste et l’écho sur la ligne d’état. Remarquez la nouvelle variable indice. Cette variable permettait de suivre le nombre de fois écoulées dans la boucle et d'obtenir chaque élément de la liste de manière séquentielle. Pour travailler avec des listes, le pour-la boucle est plus efficace.

Terminer la fonction

Avec les structures de données et les boucles en place, je vais maintenant terminer le code. Le reste du code ressemble à ceci:

une fonction! CreateProject (fichier) let dirs = ["/ js", "/ js / final", "/ css", "/ css / final", "/ doc"] let fichiers = ["/ js / base.js", "/css/base.css", "/doc/help.html"] let parent = fnamemodify (a: fichier, ": p: h") pour dir dans des répertoires let newdir = l: parent. dir if! isdirectory (l: newdir), appelez mkdir (l: newdir) endif endfor end dans le nom des fichiers, laissez newfile = l: parent. name if! filereadable (newfile) call system ("touch". l: newfile) endif end for endfunc autocmd BufNewFile * .html: appelez CreateProject (expand ('%: p')) 

J'ai ajouté une nouvelle variable parent c'est la structure de répertoire parent du fichier donné à la fonction. La commande fnamémodifier vous permet d'extraire différentes parties d'un chemin sur plusieurs plates-formes. Vous pouvez en savoir plus à ce sujet en utilisant le Vim système d'aide: : aidez fnamemodify (). Avis, faire référence à la fichier variable passée à la fonction je devais l'étendre avec le une:. le une: la portée se réfère à la uneles rguments.

Dans chaque boucle, j'ai créé une variable qui concatte le répertoire parent avec le nouveau nom de répertoire ou de fichier. Je vérifie ensuite leur existence et les crée s'ils n'existent pas. Pour vérifier l'existence, le isDirectory () la fonction vérifie le répertoire et filereadable () vérifie l'existence du fichier. J'utilise un ! pour annuler la valeur de retour des fonctions. Pour créer des répertoires, vous appelez le mkdir () commander. Pour créer des fichiers vierges, vous devez utiliser la commande système. toucher.

En outre, remarquez à l’intérieur de chaque boucle et si vous devez indiquer l’étendue des variables qui se trouvent dans les étendues supérieures avec l: portée. le l: la portée fait référence à n'importe où dans la définition de la fonction. Les portées inférieures n'héritent pas automatiquement des portées supérieures! Cela me prend tout le temps.

Maximum-impressionnant

Maintenant que vous commencez à utiliser beaucoup avec Vim, Maximum-impressionnant est un package d’installation qui charge de nombreux paramètres par défaut et des packages Vim sur le Mac. Il est Rubis sur rails centré, mais utile pour tout type de programmation.

Ouvrez le programme termial dans un répertoire dans lequel vous voulez installer le paquet. Puis tapez ces commandes:

git clone https://github.com/square/maximum-awesome.git cd maximum-génial rake 

Quand il se termine, puis ouvrez Vim encore une fois et vous verrez un bel environnement de travail.

Il y a beaucoup de paquets intéressants dans cette configuration. Amusez-vous à explorer!

Conclusion

Maintenant que vous savez comment créer des scripts d'automatisation pour aider votre flux de travail, essayez d'autres fonctions utiles..

Lorsque vous personnalisez un Vim environnement, vous aurez plus de contrôle et pourrez faire plus. N'oubliez pas que la mise en pratique de ce que vous apprenez est le seul moyen de vous améliorer et de vous en souvenir. Alors, allez-y et entraînez-vous à créer vos propres scripts d'automatisation dans VimScript!