evil-mode '' mal-shift-esquerda perde a seleção

4

Existe alguma razão para que o mal-shift-left-shift perca a seleção?

Ou seja, gostaria de ter a capacidade de acertar o '>' e '<' várias vezes na seleção para mudar o texto para a esquerda e para a direita.

Aqui está a implementação abaixo. De qualquer forma, adicionar um conselho para mudar esse comportamento?

evil-commands.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)))
    
por justingordon 05.12.2013 / 21:43

2 respostas

3

Isso sobrecarrega o comportamento atual para selecionar novamente (encontrado em djoyner / dotfiles / emacs / lisp / config-mal.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))
    
por 28.07.2014 / 16:57
0

Muito semelhante à resposta já fornecida pelo @avsej, mas o uso de call-interactively garante que o evil-shift {left, right} receba todos os seus argumentos (por exemplo, COUNT ). Por exemplo,

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

Dessa forma, você ainda pode recuar em mais de uma unidade por vez (por exemplo, 4 > ).

    
por 03.04.2017 / 02:23

Tags