J'ai le code suivant qui tente de créer une nouvelle ligne, puis d'y accéder. L'idée est que move-end-of-line
sautera à la fin de la ligne courante, et ["C-m"]
agirait comme retour / entrée. Pourtant, l'exécution de cette commande donne l'erreur: "mauvais nombre d'arguments". Comment résoudre ce problème?
(global-set-key (kbd "C-.") 'new-line) (defun new-line () (interactive) (move-end-of-line) ["C-m"] )
3 Réponses :
Je pense que vous devez lire les manuels Emacs et elisp: ces questions sont assez faciles à répondre. Voici une façon de le faire.
(defun insert-line-after-line (&optional n) (interactive "p") (end-of-line 1) ;end of current line (open-line n) ;open n new lines (forward-line 1)) ;go to start of first of them
Mais sérieusement: Emacs a une auto-documentation très complète, il est facile de savoir comment faire ces choses.
+1 pour le conseil de consulter les manuels. Le manuel "Introduction à la programmation dans Emacs Lisp" est le point de départ - C-h i
.
Une option consiste à enregistrer une macro et à l'utiliser.
(global-set-key (kbd "C-.") 'new-line) (fset 'new-line [end return])
Si vous ne vous souciez pas de la persistance de la macro, exécutez-la simplement:
M-x name-last-kbd-macro new-line M-x insert-kbd-macro new-line
Mais si vous voulez qu'elle persiste, enregistrez-le:
C-x e
et collez la sortie dans votre fichier d'initialisation (avec votre définition de raccourci):
M-x kmacro-start-macro C-e C-m M-x kmacro-end-macro
["C-m"]
est comme la façon dont vous spécifiez une clé pour faire une liaison de clé, mais ce n'est pas la même que la façon dont vous dites par programmation à Emacs d'insérer un caractère dans un document. Vous pouvez utiliser (insert-char? \ ^ M)
(voir ref here ), mais cela donnerait un caractère ^ M littéral (essayez-le; une autre façon de faire la même chose de manière interactive est de Ctrl - < kbd> Q suivi de Ctrl - M ). (insérer "\ n")
semble être ce que vous recherchez.
De plus, la raison pour laquelle vous recevez le message "mauvais nombre d'arguments" est que (move-end-of-line)
nécessite un argument lorsqu'il est appelé hors du contexte interactif. (move-end-of-line 1)
fonctionne.
Cela dit, le paramètre suivant est peut-être un moyen plus simple d'obtenir le résultat que vous recherchez:
(setq next-line-add-newlines t)
Cela vous permettra de faire simplement C-n à la fin du fichier et de ne pas vous soucier de la distinction entre déplacer et insérer.