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.


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.


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 ?\]))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.