créer ses propres extraits
Je suis plutôt nouveau sur vim. Et je n'aime pas beaucoup installer de nombreux paquets.
J'utilise html, javascript et react.js, et je voudrais créer un moyen simple de taper puis d'avoir le bon extrait de code dans le fichier.
Ce ne serait que 5 ou 6 extraits, pouvez-vous me dire par où commencer à apprendre cet art?
Éditer
Il y a 2 idées dans mon esprit (littéralement).
- Un raccourci rendant un morceau de texte (en supposant que cela soit possible). Peut-être que ce morceau de texte est inclus dans .vimrc ou quelque part?
- Les pluggings que j'ai vérifiés consistent à taper quelque chose et à l'étendre en utilisant soit l'onglet, soit une pression de touche particulière.
Un exemple concret est l'en-tête html, et un autre est un composant de réaction, comme celui-ci:
class className extends React.Component{
constructor(){
super()
this.state = {}
}
render(){
return
}
}
L'extrait html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content=" " />
<meta name="description" content=" " />
<title>Title Here</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
</body>
</html>
Pour ce dernier, il y a emmet-vim, mais pourtant je préfère le faire à ma manière, du moins en ce qui concerne les longs extraits.
Réponses
TL; DR : Découvrez:help abbreviations.
Exemple:
Disons que je voulais créer un extrait de code pour créer rapidement un objet JavaScript au format suivant avec l'abréviation "obj" ( |représente la position du curseur après avoir fait l'abréviation):
var foo = {|};
Je pourrais faire:
iabbrev obj var foo = {};<Left><Left>
Ensuite, chaque fois que je tape objen mode insertion suivi d'un caractère non mot-clé (généralement <Space>ou <Esc>/ <c-]>), il sera développé (notez que si vous <Space>appuyez sur, il insérera un espace avant le curseur. Une méthode pour éviter ce comportement est décrite dans la page d'aide pour abbreviations)
Si, pour une raison quelconque, vous ne souhaitez pas développer votre abréviation, vous pouvez appuyer sur <c-v>avant d'entrer le caractère non-mot-clé.
Voir:
:h abbreviations
:h :iabbrev
:h 'iskeyword'
Modifier pour votre modification:
Pour l'un de vos exemples spécifiques (composant React), vous pouvez faire:
iabbrev rc class className extends React.Component{<CR>
\constructor(){<CR>
\super()<CR>
\this.state = {}<CR>
\}<CR>
\render(){<CR>
\return<CR>
\}<CR>
\}
J'avais l'habitude \de le formater plus joli, mais je suppose que vous pourriez tout mettre sur une seule ligne:
iabbrev rc class className extends React.Component{<CR>constructor(){<CR>super()<CR>this.state = {}<CR>}<CR>render(){<CR>return<CR>}<CR>}
mais bonne chance de travailler avec ça. Il convient de noter qu'il \ignore les espaces blancs précédents, de sorte que l'indentation ne fait rien d'autre que d'aider à organiser l'abréviation.
Cela fonctionnerait pour toute abréviation statique que vous voudriez faire, y compris votre exemple HTML, mais c'est à vous de comprendre :).
Vous pouvez utiliser des abréviations comme nous le faisions il y a 2 décennies, mais je ne le recommanderais pas pour les extraits de code multilignes comme ceux que vous avez montrés.
Bien sûr, il est possible d'utiliser des abréviations. Comme nous pouvons le faire avec les abréviations, presque tout ce que nous pouvons faire avec les plugins d'extrait de code - sur les détails que vous voudrez ronger l'espace supplémentaire que vous insérerez avec la :iabcommande par défaut , et très probablement pour neutraliser certaines abréviations de l'expansion à l'intérieur des commentaires ou des chaînes.
Quel est le problème avec les abréviations multi-lignes? Ils sont tout simplement impossibles à maintenir. Ajoutez le mouvement du curseur, et nous aurons rapidement besoin d'aide pour soulager la douleur. Voir par exemple une abréviation simple que j'ai pour C et C ++ .
Inoreabbr <buffer> <silent> if <C-R>=lh#cpp#snippets#def_abbr('if ',
\ '\<c-f\>if(!cursorhere!){!mark!}!mark!')<cr>
Toutes les machines supplémentaires ( :Inoreabbr, lh#cpp#..., !cursorhere!, !mark) sont des choses supplémentaires que je devais définir pour prendre soin de manger l'espace supplémentaire, déplacer le curseur, définissant les espaces réservés / saut positions, neutraliser l'expansion dans les commentaires ou des chaînes, l' application de style / options de formatage (les espaces et les nouvelles lignes peuvent être insérés avant / après les crochets ...).
L'équivalent avec un moteur d'extraits de code pourrait ressembler à
if(<+cond+>){<+code+>}
Différents moteurs d'extraits montrent différentes variations de syntaxe. La syntaxe ci-dessus provient du plugin que je gère (et qui peut également appliquer le formatage de la mouche). Choisissez un plugin parmi les différents qui existent . Ce sera beaucoup plus simple sur le long terme.
Réservez les abréviations à des choses simples, ou parce que vous ne voulez vraiment, vraiment rien d'autre que la touche espace pour déclencher l'expansion de vos extraits.
Si vous ne souhaitez pas utiliser d'outils d'expansion de texte, vous pouvez placer chaque extrait de code dans un fichier vim séparé et simplement lire l'extrait (fichier) dont vous avez besoin :r snippet1(ou le nom de fichier que vous avez donné à l'extrait de code prévu). Vous devez être en mode normal pour ce faire.
Assurez-vous que Vim sait quel répertoire contient vos extraits.