Comment gérer la ligne suivante dans la macro du clavier?

12

J'ai créé une macro clavier pour joindre des lignes dans un tampon en utilisant:

F3 C-n M-x join-line RET F4.

Cela fonctionne bien, sauf lorsque les lignes deviennent trop longues et commencent à boucler - ce qui rend cette macro dépendante de la largeur du cadre. next-linene semble pas aller à la ligne réelle suivante, mais à la partie «wrapping» de la ligne actuelle.

Comment contourner ce problème?

Sébastien Le Callonnec
la source

Réponses:

13

Vous avez deux trois options:

  1. Utilisez next-logical-lineau lieu de next-linelors de la définition de la macro:

    Déplacer le curseur verticalement vers le bas des ARGlignes. Ceci est identique à next-line, sauf qu'il se déplace toujours par des lignes logiques au lieu de lignes visuelles, ignorant la valeur de la variable line-move-visual.

  2. Réglez line-move-visualsur nil:

    (setq line-move-visual nil)

    Cela se next-linecomporte comme next-logical-linepar défaut.

  3. Activer la troncature en ligne en faisant

    M-x toggle-truncate-lines RET

    avant d'enregistrer la macro.

itsjeyd
la source
Parfait! Merci. Je me demande dans quelle situation vous préféreriez next-linele comportement actuel à celui next-logical-linede ...
Sébastien Le Callonnec
@ SébastienLeCallonnec Je suppose qu'il y a un cas d'utilisation pour tout ... et c'est bon de savoir
qu'Emacs
1
@ SébastienLeCallonnec Erm ... lors de l'écriture en langage naturel? Dans une situation non orientée ligne, une pression sur <down>ou C-nest généralement censée vous faire descendre d'une ligne, sans sauter au-delà de la limite de ligne. Pensez que tous les utilisateurs ne viennent pas du bloc-notes (où il n'y a pas de retour à la ligne du tout) ... Imo, l'exception est plutôt les situations où se next-logical-linetrouve le comportement attendu, et dans ces situations, j'ai souvent tendance à désactiver visual-line-modecomplètement. Et +1 @itsjeyd, c'est vraiment agréable de pouvoir obtenir l'un ou l'autre comportement selon la situation.
T. Verron
2
@ T.Verron Assez juste. Je suppose que je peux toujours rebind C-nà next-logical-line. ;)
Sébastien Le Callonnec
0

C-aet les C-edeux prennent un argument de préfixe qui vous permet de sauter des lignes. Par exemple, C-2 C-asautera au début de la ligne suivante et C-2 C-esautera à la fin de la ligne suivante. Un argument de préfixe de 3 déplace deux lignes, et ainsi de suite. Vous pouvez également utiliser des arguments négatifs pour passer aux lignes précédentes.

De toute évidence, cela n'est pas très utile lorsque vous avez besoin que le curseur reste dans la même colonne, mais je trouve que la plupart de mes macros impliquent de toute façon d'aller au début ou à la fin d'une ligne, donc elles sont très pratiques.

Alan Third
la source