2016-10-26 1 views
1

Je tape :echo expand("<cword>"), vim affiche le mot sur le curseur. Mais quand je tape :tag expand("<cword>"), il demande:pourquoi vim expand ne fonctionne pas

E426: tag not found: expand (

Il semble que, la fonction de développement n'est pas appelée la fonction d'étiquette, expand( est envoyé à tag en tant que paramètre.

Merci à l'avance pour toutes les idées. toute référence est préférée.

+0

': echo',': let' et peut-être d'autres commandes je ne me souviens sont conçus pour accepter vim expressions, avec vars, funcs ... Mais la plupart des autres commandes ne le font pas. S'il vous plaît imaginez: aimeriez-vous toujours taper ': e" myfile.txt "', avec des guillemets? Ce serait vraiment improductif – yolenoyer

Répondre

4

Vimscript est évalué exacte Comme les commandes Ex tapées dans la ligne de commande :. Il n'y avait pas de variables dans ex, donc il n'y a aucun moyen de les spécifier. Lors de la saisie d'une commande interactive, vous auriez probablement utiliser <C-R>= pour insérer le contenu des variables:

:tag <C-R>=expand('<cword>')<CR><CR> 

... (bien, en fait, il y a la plus courte <C-R><C-W> pour le mot en cours). Dans un script, :execute doit être utilisé. Toutes les parties littérales de la commande Ex doivent être cités (simple ou double guillemets), puis concaténer les variables:

:execute 'tag' expand('<cword>') 
+0

salut, Ingo, quelle est la différence entre et ? Et que fait-il faire? –

+0

'' est Control plus R. En mode ligne de commande, cela insère le contenu d'un registre; ici, le registre d'expression spécial '= 'est utilisé. '' est la touche Entrée; nous en avons besoin deux fois: Une fois pour terminer l'entrée d'expression, une fois de plus pour terminer la ligne de commande. –