M-m ( back-to-indentation
) se déplace vers le premier caractère non blanc de la ligne. J'aimerais faire l'inverse : déplacer le point vers le dernier caractère sans espace sur la ligne. Je n'ai pas réussi à trouver une commande "intégrée" pour cela et je ne suis pas assez familier avec ELisp pour écrire quelque chose, donc toute aide serait appréciée.
Réponses
Trop de publicités?Normalement, dans cette situation, je veux atteindre le dernier caractère qui n'est pas un espace blanc et aussi supprimer l'espace de fin de ligne, donc j'utilise ceci :
M-\ runs the command delete-horizontal-space, which is an interactive
compiled Lisp function in `simple.el'.
Dans les rares cas où je voudrais préserver les espaces, j'utilise simplement M-b M-f ( backward-word
, forward-word
), ce qui est généralement assez proche.
Je pense que Phils a déjà répondu à votre question. Juste un autre POW les espaces blancs traînants sont très ennuyeux, invisibles et sujets à des bugs( ?). J'ai donc un crochet pour before-save-hook
pour les supprimer.
;;; delete nasty hidden white spaces at the end of lines
(add-hook 'before-save-hook 'delete-trailing-whitespace)
Ainsi, votre opération en retrait devient simplement C-e
pour moi.
J'ai écrit cette fonction pour se lier à C-e (habituellement move-end-of-line
). C-e fonctionne comme d'habitude, mais si votre pointeur est déjà à la fin de la ligne, il enlèvera les espaces de fin de ligne.
(defun my/smarter-move-end-of-line (arg)
"Move to the last non-whitespace character in the current line.
Move point to end of this line. If point is already there, delete
trailing whitespace from line, effectively moving pointer to last
non-whitespace character while also removing trailing whitespace.
If ARG is not nil or 1, move forward ARG - 1 lines first."
(interactive "^p")
(setq arg (or arg 1))
;; Move lines first
(when (/= arg 1)
(let ((line-move-visual nil))
(forward-line (1- arg))))
(let ((orig-point (point)))
(move-end-of-line 1)
(when (= orig-point (point))
(delete-horizontal-space))))
Remap C-e :
;; remap C-e to 'smarter-move-end-of-line'
(global-set-key [remap move-end-of-line]
'my/smarter-move-end-of-line)
Ma version : Déplacer à la fin de la ligne ou au dernier non-espace (en supprimant les espaces de fin)
(defun smart-end-of-line ()
"Move to end of line or last non-space (by deleting ending spaces)"
(interactive "^")
(let ((p (point)))
(end-of-visual-line)
(if (= p (point)) (end-of-line))
(if (= p (point)) (let (deactivate-mark) (delete-horizontal-space)))))
(global-set-key [end] 'smart-end-of-line)
(global-set-key "\C-e" 'smart-end-of-line)
El [end]
y "\C-e"
(control+e) :
- Déplacez le curseur (point) à l'extrémité de la ligne visuelle.
- S'il se trouve déjà à la fin de la ligne visuelle, déplacez-le à la fin de la ligne.
- S'il est déjà là, déplacez-le vers le dernier caractère sans espace blanc de la ligne en supprimant tous les espaces blancs de fin de ligne.
- Pendant le déplacement, gardez la région (
interactive "^"
). - El
let (deactivate-mark)
est de s'assurer que la région est conservée.
Ceci est tiré de @justinokamoto ; puis j'ajoute la fin de la ligne visuelle. (Désolé pour mon anglais approximatif).