Emacs Mal procurar e substituir a função

5

O Emacs tem um modo de emulador de Vim chamado Mal . Este modo tem uma função de substituição de pesquisa que basicamente faz o mesmo que destacar uma região e executar sed nela. A coisa brilhante sobre essa função é que ela mostra uma prévia das alterações que você está fazendo em tempo real, antes de executar o comando, o que é ótimo para construir comandos de substituição de pesquisa que usam expressões regulares.

Eu sou fraco e não quero reciclar minha memória muscular para usar as chaves Vim. Existe uma maneira de obter essa pesquisa sed-like e substituir função com visualização no Emacs normal?

    
por Gunnar Þór Magnússon 23.10.2012 / 09:38

3 respostas

1

Dê uma olhada em Anzu , que saiu alguns meses depois que esta pergunta foi feita. Ele pode realizar realces interativos e substituição de texto em formulários query-replace e query-replace-regexp.

No meu .emacs, eu sobrescrevo as funções padrão de substituição com seus equivalentes anzu como um antigo usuário malvado:

(global-set-key (kbd "M-%") 'anzu-query-replace)
(global-set-key (kbd "C-M-%") 'anzu-query-replace-regexp)
    
por 17.08.2015 / 20:22
0

Não é exatamente como sed, mas C-M -% para query-replace-regexp permite inserir um regexp para pesquisar e substituir um texto. A interface é a mesma que para o mais conhecido M -% ou query-replace , que procura por uma string de texto simples.

Você não consegue limitar a busca e a substituição a linhas que correspondam a um determinado padrão, mas pode contornar isso. Por exemplo, a expressão sed /foo/s/bar/baz/ poderia ser emulada procurando por \(foo.*\)bar e substituindo por baz (assumindo que bar sempre ocorreria após foo em qualquer uma das linhas interessantes).

    
por 26.10.2012 / 11:19
0

O Emacs tem replace-regexp , que permite pesquisar e substituir por expressões regulares. Não conheço nenhuma ferramenta que visualize interativamente as substituições, mas há várias ferramentas que permitem criar interativamente as expressões regulares usadas para pesquisar e substituir:

O Emacs vem com re-builder . M-x re-builder abrirá um pequeno buffer onde pode construir seu regexp. Ele irá destacar todos os jogos em seu buffer atual com cada grupo exclusivamente colorido. Aqui é um bom resumo sobre isso.

Depois, há o re-builder + que permite chamar o comando replace com o regexp que você constrói . Mas a substituição não é interativa.

A última ferramenta que eu conheço é a regex-tool que lhe dá uma visão de três buffers com seu texto, seu regex e os grupos combinados.

Essas ferramentas não fornecem tudo que o Evil faz por sua descrição, mas elas cobrem o que eu acho a parte mais difícil de pesquisar e substituir por expressões regulares.

Se você quiser executá-lo somente em uma região do buffer, use C-x n n para restringir à região selecionada (entre marca e ponto) ou C-x n p para restringir à página atual. E depois, em seguida, C-x n w para ampliar novamente para todo o buffer.

    
por 25.10.2012 / 09:16