10
votes

Comment utiliser la valeur de retour d'une fonction dans une commande vim?

J'essaie de faire quelque chose qui sonne super facile, mais pour une raison quelconque, cela ne fonctionne pas. La commande: xxx pré>

déplace la ligne de courant à droite en dessous de la ligne 10, et p> xxx pré>

imprime le numéro de ligne de la ligne deux lignes à partir du curseur. Après avoir lu la documentation, j'ai écrit cette commande: p> xxx pré>

Il a entraîné cette erreur: p>

M14: adresse non valide p> blockQquote>

J'ai donc compris que les fonctions ne sont pas évaluées à moins que j'utilise le symbole = code>, alors j'ai essayé: p>

:echo type(5)
0
:echo type(line("."))
0

vim

0 commentaires

3 Réponses :


9
votes

Pour évaluer une expression et transmettre à une commande ex-mode, vous devez utiliser la commande exécuter code>. Dans votre cas, cela fonctionne:

:execute "m" line(".") - 2


0 commentaires

2
votes

Je vous suggère d'utiliser une adresse relative comme suit: xxx pré>

pour plus d'aide Voir: P>

:h range


1 commentaires

+1 une solution bien meilleure à mon problème, merci! L'autre réponse a répondu à la question cependant.



1
votes

En fait, votre réponse originale était presque correcte:

:m <C-R>=line(".") - 2


3 commentaires

+1 Je suis émerveillé à quel point toutes les réponses à ces questions sont géniales: p


Au fait, la raison pour laquelle je pose cette question est de faire une cartographie de clé qui déplace la ligne actuelle vers le haut ou le bas. Cette méthode peut-elle être mappée sur une clé? Quand j'essaie, je viens d'obtenir la même erreur que celle que je cite dans la question.


Vous voudrez peut-être consulter UNIMPAIRED.VIM par Tim Pope. Fournit les mappages [E et ] E pour échanger des lignes. Github.com/tpope/vim-unimpaired