2010-06-27 13 views
1

J'utilise ruby ​​sur des rails mais cela n'a pas beaucoup d'importance pour cette question. Disons que j'ai une déclaration comme celle-vim comment créer un message de débogage rapide

error = 'this is an error message' 

J'ai remarqué que je finis par faire cela beaucoup

error = 'this is an error message' 
puts "error = #{error.inspect}" 

Je suis sûr une macro peut être écrit qui prendrait le travail à gauche côté main gauche plus = puis créez une autre ligne avec le modèle ci-dessus. J'utilise mvim sur mac. Tout pointeur en termes d'où je devrais commencer à chercher pour développer ce que je veux.

Répondre

3

J'enregistré une macro simple qui fait votre échantillon. Pour enregistrer un type de macro q suivi du registre dans lequel vous souhaitez placer la macro (la convention appelle qq). Pour lire la macro tapez @ puis le registre de macro. Vous pouvez voir cela à :help recording

Pour écrire la macro, utilisez les commandes suivantes (et est ici comment est devrait se regarder dans le registre)

^yEoputs "error = #{^Op.inspect}"^[ 

^ se déplace au premier caractère non des espaces de la ligne

yE supprime le mot séparé de l'espace.

o vous met en mode d'insertion sur la ligne suivante

puts "error = #{ est le texte que vous tapez sur

^O est ctrl + O (lettre majuscule o) - ce qui permet au prochain, et seulement la commande suivante à exécuter en mode de commande, qui est ...

p Met le mot saisi, après que cette commande est exécutée vous êtes toujours en mode insertion

.inspect}" est le texte que vous tapez et enfin ...

^[ est Esc

0

Je pencherais pour:

nnoremap µ :s/^\s*\(\k\+\)\s*=.*/&\rputs "\1 = #{\1.inspect}"/<cr> 

:s présente l'avantage de faire le travail, plus correspondant à la variable affectée le cas échéant. Faire la même chose avec des commandes classiques comme yw, p, etc serait plus encombrant.

Si le modèle devient plus complexe, nous pouvons compter sur les extensions de fichiers de modèles tant qu'elles permettent facilement d'appeler la fonction viml comme matchstr().Bien sûr, dans ce cas, j'utiliser mu-template avec le fichier modèle-suivant:

VimL:" $Id: {rtp}/template/ruby/inspect.template 
VimL: let s:value_start = '¡' 
VimL: let s:value_end = '¡' 
VimL: let s:reindent  = 1 
VimL: let s:marker_open = '<+' 
VimL: let s:marker_close = '+>' 
VimL: let s:varname = matchstr(getline(line('.')-1), '^\s*\zs\k\+\ze\s*=') 
VimL: if empty(s:varname) |throw "the previous line don't assign any variable" |endif 
puts "¡s:varname¡ = #{¡s:varname¡.inspect}"<++> 
VimL:"vim: encoding=utf-8 
0

Si vous faites ces à la volée, un extrait de snipmate pourrait ressembler à ceci:

${1:error} = '${2:error message here}' 
puts "error = #{$1.inspect}" 

Si , d'autre part, vous voulez simplement afficher des variables préexistantes à des fins de débogage. La macro de Nick-Canzoneri peut être plus utile.