böse-modus '>' böse-links verliert die auswahl

1051
justingordon

Gibt es einen Grund dafür, dass die bösartige Linke der Linken die Auswahl verliert?

Das heißt, ich würde gerne die Möglichkeit haben, das ">" und "<" bei der Auswahl mehrfach zu markieren, um den Text nach links und rechts zu verschieben.

Hier ist die Implementierung unten. Jedenfalls einen Rat zum Ändern dieses Verhaltens hinzufügen?

Böse-Befehle.el

(evil-define-operator evil-shift-right (beg end &optional count) "Shift text from BEG to END to the right. The text is shifted to the nearest multiple of `evil-shift-width' \(the rounding can be disabled by setting `evil-shift-round'). See also `evil-shift-left'." :type line (interactive "<r><vc>") (let ((beg (set-marker (make-marker) beg)) (end (set-marker (make-marker) end))) (dotimes (i (or count 1)) (if (not evil-shift-round) (indent-rigidly beg end evil-shift-width) (let* ((indent (save-excursion (goto-char beg) (evil-move-beginning-of-line nil) (while (and (< (point) end) (looking-at "[ \t]*$")) (forward-line)) (if (> (point) end) 0 (current-indentation)))) (offset (- evil-shift-width (mod indent evil-shift-width)))) (indent-rigidly beg end offset)))) (set-marker beg nil) (set-marker end nil))) 
4
Obwohl dies eine praktische Funktion ist, wird der Text durch Drücken von "u" zum Rückgängigmachen in Kleinbuchstaben umgewandelt und erfordert zweimal Undo, um den Einzug rückgängig zu machen. In jüngerer Zeit habe ich mich mit dem `.` befasst, um mehrere Schichten auszuführen, anstatt sich auf die Auswahl zu verlassen. ideasman42 vor 8 Jahren 0

2 Antworten auf die Frage

3
avsej

Dadurch wird das aktuelle Verhalten überlastet, um es erneut auszuwählen (gefunden bei djoyner / dotfiles / emacs / lisp / evil-config.el # L36-L40 ).

; Overload shifts so that they don't lose the selection (define-key evil-visual-state-map (kbd ">") 'djoyner/evil-shift-right-visual) (define-key evil-visual-state-map (kbd "<") 'djoyner/evil-shift-left-visual) (define-key evil-visual-state-map [tab] 'djoyner/evil-shift-right-visual) (define-key evil-visual-state-map [S-tab] 'djoyner/evil-shift-left-visual)  (defun djoyner/evil-shift-left-visual () (interactive) (evil-shift-left (region-beginning) (region-end)) (evil-normal-state) (evil-visual-restore))  (defun djoyner/evil-shift-right-visual () (interactive) (evil-shift-right (region-beginning) (region-end)) (evil-normal-state) (evil-visual-restore)) 
Das rockt! Probierte es einfach aus. Liebe es! justingordon vor 10 Jahren 0
0
ivan

Sehr ähnlich der Antwort, die bereits von @avsej gegeben wurde, aber die Verwendung von Bexshift call-interactivelysorgt dafür, dass alle ihre Argumente erhält (zB COUNT). Zum Beispiel,

(defun my-visual-shift-left () (interactive) (call-interactively 'evil-shift-left) (evil-normal-state) (evil-visual-restore)) 

Auf diese Weise können Sie immer noch um mehr als eine Einheit einrücken (z 4>. B. ).