Selecionando (como região) a correspondência atual na pesquisa incremental

9

Ao procurar uma string com C-s, desejo poder pressionar alguma tecla para sair do modo de pesquisa, mas ainda manter a seleção da correspondência. Dessa forma, posso começar a digitar imediatamente e substituir a última correspondência.

Por exemplo, diga que tenho o seguinte documento:

The quick brown fox jumps over the lazy dog.

Se eu procurar por "preguiçoso", o emacs selecionará essa palavra assim (colchetes são seleção, pipe é cursor):

The quick brown fox jumps over the [lazy|] dog.

Agora, se eu pressionar return, o emacs manterá minha posição do cursor, mas desmarcará "preguiçoso":

The quick brown fox jumps over the lazy| dog.

Em vez disso, quero um atalho que saia do modo de pesquisa, mas mantenha a seleção de correspondência atual, como no segundo estado acima.

Ben
fonte
Não é o M-x query-replaceque você está procurando?
Nsukami _
11
@Nsukami_ Nem sempre sei o que quero que minha consulta seja ou mesmo o que quero substituí-la antes de pesquisar. É muito mais fácil clicar C-se digitar o que acho que quero pesquisar e, em seguida, altere a consulta com espaço de retorno para zerar o que quero alterar. Então brinco com o que exatamente quero substituí-lo. M-%é muito "formal".
Ben
A solução é útil para mim, como quando procuro uma palavra para matá-la e depois a puxo para um lugar diferente. query-replacenão resolve isso.
GergelyPolonkai

Respostas:

7

Aqui está uma abordagem:

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

Isso liga uma tecla diferente (retorno C) para sair da pesquisa atual e também deixar a última correspondência selecionada. Isso também funcionará isearch-forward-regexp, o que é útil.

glucas
fonte
11
Recebo "A definição da função do símbolo é nula: chave de ligação". De onde bind-keyvem?
217 Ben
11
Desculpe, bind-keyvem de outra biblioteca. Alterei a resposta para usar a define-keyfunção interna.
glucas
4

O Library Isearch + permite que você faça isso com facilidade e até ative / desative rapidamente .

  • A opção Não nulo isearchp-set-region-flagdefine automaticamente a região (seleção) ao redor do último destino de pesquisa quando você sai da pesquisa.

  • Comando isearchp-toggle-set-region, vinculado à M-s M-SPCopção isearch toggles isearchp-set-region-flag.

  • O comando set-region-around-search-targetdefine manualmente a região em torno do último destino de pesquisa. (Portanto, mesmo que a opção não esteja definida, você não poderá obter a seleção automática, poderá fazê-lo manualmente.)


Biblioteca Substituir + permite que você faça a mesma coisa para query-replaceetc. Ele coloca a região em torno (ou seja, seleciona) a última ocorrência de substituição. Ele usa a mesma opção,, isearchp-set-region-flagpara controlar isso, e o comando set-region-around-search-targettem o mesmo efeito.

Desenhou
fonte