Geralmente, tenho uma situação em que preciso aplicar texto em uma região. Para HTML e casos simples, já existem bibliotecas para isso. Mas e o caso geral? Gostaria de me perguntar o que vou inserir no início e no final da região.
elisp
text-editing
nperson325681
fonte
fonte
<?php
...?>
e, quando selecionar uma região e um tipo<?php
(ou uma combinação de teclas), envolvê-lo no par. Porém, não existe uma maneira fácil de usar essas bibliotecas se você tiver muitos pares únicos.Respostas:
Pesquisei no Google e encontrei este post de John D. Cook . Ele demonstra como criar uma função interativa simples para obter tags HTML / XML facilmente na região. A partir disso, modifiquei a função para perguntar duas vezes.
Mais importante, essa função também pode ser usada como uma ferramenta auxiliar, por exemplo, quando você deseja vincular teclas para mapear alguns bits específicos de texto.
fonte
evil
que eu use isso interfere aqui. Talvez uma função do tipo funcione cominteractive "r"
mais robustez?Eu sugeriria uma abordagem diferente. Quando existe uma região, por definição,
point
deve estar no início (ou no final) da região emark
estará no final (ou no início). O que significa que você pode inserir o texto que deseja no ponto e usarexchange-point-and-mark
, ou sejaC-x C-x
, para pular para o outro extremo da região. Digite a segunda metade do seu invólucro e pronto.Você não é solicitado explicitamente a solicitar o texto de inserção, mas não consigo imaginar que haveria uma maneira de realizar a mesma coisa com menos esforço.
fonte
multiple-cursors
poderia ser ajustado para inserir texto simultaneamente no início e no final da região ativa.C-x C-x
. Com sua resposta, você precisa chamar sua função (C-c something
) e também pressionarreturn
após cada entrada. Portanto, não importa o que você faça, você tem mais duas teclas. Dito isto, não ajuda se você deseja chamar algo da elisp.Apenas por uma questão de variedade:
Outra maneira de fazer isso com algum texto inicial e final arbitrário seria usar
replace-regexp
na região: combinar.+
e substituir porbefore \& after
, ou qualquer texto que você queira usar parabefore
eafter
.Você pode escrever um comando para fazer isso, mas estou pensando em um caso em que em um determinado arquivo você deseja aplicar o mesmo texto de início / fim em vários locais. Você pode gravar uma macro ou apenas usar o histórico do minibuffer para repetir em outra região.
Obviamente, se o texto que você deseja quebrar pode ser expresso como uma expressão regular, você nem precisará selecionar uma região e pode fazer um
query-replace-regexp
buffer, mas presumivelmente o texto que deseja quebrar não é tão consistente.fonte