Eu tenho um texto de exemplo como este:
\documentclass[a4paper]{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{color}
\setlength{\parindent}{0em}
\setlength{\parskip}{2ex plus1ex minus0.5ex}
\newcommand{\stylea}[1]{\noindent{\textcolor[rgb]{0.9, 0.9, 0.8}{\fcolorbox[rgb]{0, 0, 0}{0.2, 0.2, 0.2}{#1}}}}
\begin{document}
\ttfamily
\setlength{\fboxrule}{0pt}
\setlength{\fboxsep}{0pt}
1 \stylea{\# Author{\hspace*{1em}}: Bhishan Poudel} \\
2 \stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016} \\
3 \stylea{} \\
4 \stylea{Line wrapping in geany} \\
5 \stylea{===============================================================================} \\
6 \stylea{edit > preference > editor > features > line wrapping} \\
7 \stylea{then,} \\
8 \stylea{document > line wrapping} \\
\end{document}
Quero excluir todas as palavras \stylea{ }, mantendo as palavras dentro de {} intactas.
Eu sei que posso encontrar e substituir \stylea{ e substituir por espaço em branco, mas nem quero espaço em branco e também quero excluir a chave de fechamento, }, ao mesmo tempo.
Também podemos substituir palavras apenas no bloco selecionado no Geany? Por exemplo, se eu selecionar as linhas 1 a 8 e substituir stylea por styleb?
Responder1
Substituindo por Grep
Você pode fazer (a maior parte) isso com pesquisa/substituição de expressões regulares.
Use a caixa de diálogo Substituir, certificando-se de que "Usar expressões regulares" esteja selecionado e "Usar correspondência multilinha" não.
Procurar:
\\stylea{(.*)}
E substitua por:
\1
Esta é uma expressão regular "referência anterior" ao texto "capturado" na expressão de pesquisa (a parte entre parênteses). Se você tivesse várias capturas, poderia consultá-las com \1
, \2
, etc.
No entanto, lembre-se de que há uma limitação nas expressões regulares que provavelmente lhe causará algum sofrimento. Você tem algumas linhas com chaves aninhadas dentro do texto, como:
\stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016}
Expressões regulares não podem (por si só) contar e corresponder delimitadores de aninhamento ( {}
) assim. No seu caso, isso pode não acabar sendo um problema prático porque a (.*)
captura irá corresponder ao máximo de caracteres possível antes do final da linha ("correspondência gananciosa"), o que no seu texto de exemplo faz a coisa certa, porque cada \stylea{}
tag está em uma linha. Se você tiver arquivos com \stylea{}
tags abrangendo várias linhas, esse método não substituirá o texto corretamente. Sua melhor opção pode ser encontrar essas instâncias primeiro e alterá-las manualmente ou certificar-se de que não ocupem várias linhas.
Isso deve funcionar com muitos editores que oferecem pesquisa/substituição de expressões regulares, embora os detalhes das opções de diálogo possam variar. Eu testei no TextWrangler para Mac OS X.
Substituindo apenas na seleção
Selecione as 8 linhas numeradas. Procurar:
\\stylea{
E substitua por:
\\styleb{
Em seguida, clique no botão "Na seleção" na caixa de diálogo Substituir.