Récemment, j'apprends le go lang.
Et j'ai trouvé que dans de nombreux cas, je devrais taper le texte suivant:
package main
import "fmt"
func main () {
}
Donc je pensais que je pourrais peut-être écrire des fonctions vim dans mon .vimrc qui peut écrire le texte du modèle dans le fichier courant lors de l'utilisation de vim. Ce qui peut me faire gagner beaucoup de travail.
Je sais qu'après quelques heures d'apprentissage du langage des scripts vim, je peux le comprendre. Mais je pense que ce serait un besoin commun pour de nombreux utilisateurs de vim non expérimentés et je n'ai pas trouvé de questions similaires sur Stackoverflow. J'ai donc posé cette question.
4 Réponses :
Vous pouvez créer un modèle comme suit:
D'abord, créez un fichier (par exemple base.go ) qui sera votre modèle avec à l'intérieur de l'extrait que vous avez saisi dans votre question (je stocke mes modèles dans $ HOME / .vim / templates / , donc dans votre cas, ce serait $ HOME / .vim / templates / go / base.go code >, mais la localisation dépend vraiment de vous),
Ensuite, dans votre .vimrc , ajoutez le mappage suivant:
nnoremap <space>t :-1read $HOME/.vim/templates/go/base.go<CR>/{<CR>o
Ce mappage effectue les opérations suivantes lorsque vous appuyez sur espace-t en mode normal:
$ HOME / .vim / templates / go / base.go est inséré là où se trouve votre curseur, {, Ainsi, lorsque vous ouvrez un nouveau fichier go, appuyez sur espace-t et il insérera votre modèle et vous placera là où vous devez être pour commencer à coder.
MODIFIER:
-1 indique la position où insérer le contenu du fichier (: .read file l'insère juste après la ligne (. ) courante . -1 l'insère juste après la ligne courante -1. Donc, effectivement, il s'agit de l'insérer à l'endroit où se trouve votre curseur et de descendre les lignes y compris celle sur laquelle vous vous trouvez. Pour en savoir plus, vous peut lire : help range .
Le saut se fait avec la partie / { qui recherche un { code> ( / {), y accède ( ) et passe en mode insertion juste après ( o ). p >
C'est vraiment une bonne réponse, si vous pouvez expliquer ce que signifie exactement : -1read et comment le contenu lu est combiné avec l'action du curseur de saut, c'est mieux. Je veux dire, j'ai eu un bon effet, mais je n'ai pas vraiment bien compris le mécanisme de : -1read $ HOME / .vim / templates / go / base.go
Les autres réponses et commentaires sont excellents, c'est donc présenté comme une option supplémentaire. Ceci est très similaire à la réponse de padawin mais intègre le squelette dans le fichier vimrc, ce qui peut ou non être bon pour vous.
J'ai configuré le mien en tant qu'extension du mode insertion (par la dernière ligne ici), donc je tapez copy # et appuyez sur Entrée et ce texte apparaît. (Vous remarquerez que le texte n'inclut pas les étoiles de commentaire sur les lignes suivantes, car elles sont automatiquement ajoutées pendant que Vim "tape" ceci pour moi. Il y a probablement un moyen de changer ce comportement, mais c'était très bien pour moi.)
function! InsertCopyright()
let l:year = strftime("%Y")
return
\ "/**\n"
\. "Copyright My Great Company, " . l:year . ". All rights reserved.\n"
\. "/"
endfunction
iabbrev <expr> copy# InsertCopyright()
Je recommande "\ r" au lieu de "\ n": stackoverflow.com/questions/71417/why-is-ra-newline-for-vim
J'ai créé Noah Frederick work . Un fichier appelé: " ultisnips_custom.vim " doit être placé à: après / plugin / ultisnips_custom.vim
Puis un extrait appelé _skel doit être créé pour chaque type de fichier pour lequel vous souhaitez déclencher un en-tête.
Une autre astuce: dans le code lié ci-dessous, le déclencheur ultisnips a été changé en afin que vous puissiez le modifier en fonction de vos besoins.
Voici mon code:
" File: ultisnips_custom.vim - Custom UltiSnips settings
" Maintainer: Sergio Araújo
" Oririnal Creator: Noah Frederick
" Last Change: abr 02 2019 17:40
" Place it at: after/plugin/ultisnips_custom.vim
" We need python or python3 to run ultisnips
if !has("python") && !has("python3")
finish
endif
" This function is called by the autocommand at the end of the file
function! TestAndLoadSkel() abort
let filename = expand('%')
" Abort on non-empty buffer or extant file
if !(line('$') == 1 && getline('$') == '') || filereadable('%')
return
endif
" Load UltiSnips in case it was deferred via vim-plug
if !exists('g:did_plugin_ultisnips') && exists(':PlugStatus')
call plug#load('ultisnips')
doautocmd FileType
endif
" the function feedkys simulates the insert key sequence in order to call
" the template (skel)
execute 'call feedkeys("i_skel\<c-j>")'
endfunction
augroup ultisnips_custom
autocmd!
au Bufnewfile *.sh,*.zsh,*.html,*.css,*.py,*.tex,*.md :call TestAndLoadSkel()
"autocmd BufEnter *.sh,*.zsh,*.html,*.py execute 'call feedkeys("i_skel\<c-j>")'
augroup END
" vim: fdm=marker:sw=2:sts=2:et
: modèles d'aide montre comment lire un modèle de squelette lors de l'ouverture d'un nouveau fichier.
Plusieurs plugins d'extension de modèles s'appuient sur ce mécanisme primitif et prennent en charge des choses comme les évaluations automatiques (par exemple de la date actuelle, des variables d'environnement, des expressions Vimscript incorporées).
Certaines personnes préfèrent charger ces modèles à la demande (et non automatiquement), et sont donc parfaitement satisfaites des plugins snippet . Certains plugins font les deux (extraits à la demande et modèles sur les nouveaux fichiers).
Étroitement lié (avec un bon chevauchement): les extraits sont comme le : abbreviate intégré sur les stéroïdes, généralement avec des insertions de paramètres, une mise en miroir et plusieurs arrêts à l'intérieur d'eux. snipMate < / a> (inspiré de l'éditeur TextMate ); malheureusement, il n'est plus maintenu; bien qu'il y ait un fork . Une alternative moderne (qui nécessite cependant Python) est UltiSnips . Il y en a d'autres, consultez cette liste sur le wiki Vim Tips et cette comparaison par Mark Weber .
Il y a trois choses à évaluer: premièrement, les fonctionnalités du moteur d'extraits de code lui-même, deuxièmement, la qualité et l'étendue des extraits de code fournis par l'auteur ou d'autres; troisièmement, à quel point il est facile d'ajouter de nouveaux extraits de code.
Il existe des moteurs d'extraits généraux. Jetez un œil à github.com/SirVer/ultisnips par exemple
Voir
: help skeletonpour un exemple de la façon dont vous pourriez faire cela automatiquement pour les nouveaux fichiers.Copie possible de Comment utiliser un modèle dans vim
stackoverflow.com/search?q=%5Bvim%5D+insert+template