12
votes

Emacs Hotkey pour aligner les signes égaux

J'aimerais mettre quelque chose comme ça dans mon .emacs: xxx

mais chaque fois que je l'exécute, je reçois une erreur "Type de type argument: numerp, nil".

Que signifie cette erreur et comment puis-je avoir l'effet que je recherche?


0 commentaires

3 Réponses :


0
votes

J'ai séparé la source de align-regexp code> (Installer emacs23-el code> sur Debian) et est venu avec ceci:

(local-set-key (kbd "C-c a =") 
  (lambda () (interactive) 
    (align-region (region-beginning)
                  (region-end)
                  'entire
                  (list (list nil
                              (cons 'regexp "\\(\\s-*\\)=")
                              (cons 'group 1)
                              (cons 'bogus nil)
                              (cons 'spacing 1)))
                  nil
                  nil)))


2 commentaires

Mais il est sûrement possible de faire cette mission sans creuser les entrailles de la commande Align?


J'aurais pensé, mais je ne comprends pas align.el tout ça bien.



2
votes

"Thunk" de #emacs a résolu:

(local-set-key (kbd "C-c a =") 
  (lambda () (interactive) 
    (align-regexp (region-beginning) (region-end) "\\(\\s-*\\)=" 1 1 nil)))


1 commentaires

Notez que le dernier nil est facultatif et que les 1 1 ne sont pas. La documentation pour Align.el a besoin d'un rangement.



16
votes

Ici, vous êtes mon cher gars.

(list (concat "\\(\\s-*\\)"


7 commentaires

Je vais vous donner un +1 cependant :) ... que \ S- * préfixe est très étrange.


Comme d'habitude, je vous prie tout d'utiliser "RX" de sorte que ceux qui lisent votre code ne deviendront pas fou ni aveugle: (RX (Groupe (Zero-ou-plus (Syntaxe Whitespace))) est exactement équivalent à "\ (\\ s - * \ \) ="


@ Offby1, c'est bizarre. Je peux grok (\\ s- *), mais ce groupe Rx ... zéro-ou-d plus, etc., etc., je n'ai aucune idée de ce que c'est. Je suppose que je suis déjà l'un des "touchés".


@slomojo - bonne réponse, mais vous avez laissé une chose hors de l'explication - pourquoi devons-nous spécifier des chiffres pour le groupe et l'espacement? Ils sont documentés comme facultatifs. La vraie raison de l'erreur rapportée par OP ("Type de type argument: numerp, nil") est qu'il n'a pas spécifié de groupe et d'espacement. Vous avez spécifié 1 et 1 pour ceux-ci, évitant ainsi l'erreur. On dirait que ces arguments "facultatifs" ne sont pas réellement facultatifs.


@Cheeso, oui, il a été impliqué par l'utilisation de valeurs arbitraires, et vous avez parfaitement raison ... ils ne sont pas facultatifs, c'est un cas de mauvaise documentation dans la bibliothèque align.el bibliothèque.


@slomojo, de toute façon, merci beaucoup pour la pointe. Cela m'a aidé aussi.


BTW, ce serait assez cool si vous n'avez pas mis de bouchons dans vos réponses, à moins que vous n'ayez réellement l'intention de transmettre que vous criez. Acclamations ;)