Evil-emacs: como selecionar o último texto colado (como gv)?

7

Como seleciono visualmente o último texto colado evil-emacs?

gvseleciona novamente a última seleção visual. Gostaria de uma função / snippet que faça o mesmo no meu último texto colado.

The Unfun Cat
fonte
Parece que você está pedindo alguém para escrever um pacote ...
wasamasa
Eu estava pensando que isso deveria existir. Vou tentar fazer isso sozinho então.
The Unfun Cat

Respostas:

5

No meu .vimrceu tenho

nnoremap <leader>v '[V']

para fazer exatamente isso.

Surpreendentemente, a sequência '[V']funciona evilmuito bem. Para ter um atalho no Emacs, escrevi a seguinte função:

(defun my/evil-select-pasted ()
  (interactive)
  (let ((start-marker (evil-get-marker ?\[))
        (end-marker (evil-get-marker ?\])))
        (evil-visual-select start-marker end-marker)))

A função pode ser vinculada, por exemplo, <leader>vusando evil-leader:

(evil-leader/set-key "v" 'my/evil-select-pasted)

Sou relativamente novo no Emacs, portanto isso pode não ser o ideal, mas funciona para mim.

Como cheguei lá:

C-h k 'mostra que 'é executado evil-goto-mark-line. Observar a fonte em evil-commands.elshows que evil-goto-mark-lineusa evil-goto-mark, que por si só faz uso da evil-get-markerfunção. Olhar evil-states.el, encontrado com C-h k V, leva à evil-visual-selectfunção.

Andreas
fonte
Não funciona no spacemacs, mas aceita tudo a mesma coisa, desde que eu especifiquei o mal :)
The Unfun Cat
funciona para mim no mais recente spacemacs, dev branch.
Meitham
2

Ao usar a solução @andreas para selecionar o último texto colado e tentar alterar o recuo nele e, em seguida, repetir o recuo com .( evil-repeat), ocorreram erros. Eu tive que modificar a função para ficar assim, que agora funciona bem para mim:

(defun evil-select-pasted ()
  "Visually select last pasted text."
  (interactive)
  (evil-goto-mark ?\[)
  (evil-visual-char)
  (evil-goto-mark ?\]))
ZzAntáres
fonte