2012-04-19 3 views
2

Je suis actuellement en utilisant le mappage suivant pour, essentiellement copier sur tous les fichiers écrits dans mon dev env à mon serveur local via l'exécution d'un script. Cela fonctionne bien pour les fichiers individuels. Cependant, j'ai l'habitude de faire: wa pour sauver tous les tampons ouverts:vim autocommand événement pour écrire tous les tampons: wa

au BufWritePost /path/to/dev/* silent !$HOME/bin/somescript.sh %:p 

Toutes les suggestions sur la façon dont je pourrais réécrire l'existence de ce comme condition:

if one file 
    exec script to copy just that file # like I already have 
if :wa 
    # here I'd probably exec a script to just copy recursively 

EDIT

Solution possible par solution de ZyX:

au BufWritePost /Users/rlevin/programming/sugar/Mango/sidecar/* silent !$HOME/bin/sugarbuild.sh %:p 

" If we do :wa<CR> we check if command type is ':' and if command itself was 
" 'wa'. If so, we call the command WA which calls BuildSidecarIfInProject. 
" This checks if we're actually within the project's directory 
cnoreabbrev <expr> wa ((getcmdtype() is# ':' && getcmdline() is# 'wa')?('WA'):('wa')) 
command! WA :call BuildSidecarIfInProject() 
function! BuildSidecarIfInProject() 
    if fnamemodify('.', ':p')[:44] is# '/Users/rlevin/programming/sugar/Mango/sidecar' 
    exec ":!$HOME/bin/toffeebuild.sh" 
    endif                                           
endfunction 
+0

Nous ne vérifions pas si "la commande elle-même est wa". Nous vérifions si c'est la seule entrée présente sur la ligne de commande afin qu'elle ne développe pas des choses comme 'e wa' à' e WA'. Il est peu probable que vous rencontriez ce problème, mais c'est toujours une bonne pratique. – ZyX

Répondre

2

est pas possible de déterminer le nombre de fichiers enregistrés, mais vous pouvez remapper/wa abrégez:

command WA # command that executes a script to just copy recursively 
cnoreabbrev <expr> wa ((getcmdtype() is# ':' && getcmdline() is# 'wa')?('WA'):('wa')) 
+0

Je comprends votre logique et cela pourrait être la solution. Mais quand j'essaye cela, et que je définis: commande! WA: echo "Got called" .. Je ne vois rien. J'ai obtenu vimrc, etc. Des conseils sur la façon dont je pourrais déboguer votre commande? Merci – Rob

+0

@Rob 1. Remplacez 'echo' par' echom' et regardez la sortie de 'messages' après avoir exécuté': wa' car il y a de nombreuses raisons pour lesquelles le message peut ne pas s'afficher. 2. Si cela n'a pas aidé, répondez comment vous exécutez 'wa'. Cette solution suppose que vous tapez ': wa '. – ZyX

+0

Parfait, oui l'echom a fonctionné; et oui je fais: wa . Tout moyen de modifier votre commande pour vérifier que nous sommes dans un chemin, par ex./path/to/dev * .. de cette façon, il ne se déclenche pas toujours même si je ne travaille pas sur le projet. Je vais aussi expérimenter moi-même;) – Rob

2

Some smart guy a dit: « L'optimisation prématurée est la racine de tout le mal. » Si vous avez vraiment besoin d'une sauvegarde/déploiement à la volée sur votre serveur, pourquoi ne pas simplement exécuter la version récursive à chaque fois, ou éventuellement liée à une touche de raccourci? C'est à dire. ne traite pas le cas d'un seul fichier spécialement. Par exemple, rsync est assez bon pour éviter la copie inutile.

Questions connexes