Vim, localiza e substitui '^ (. *)' por '^ {. *}'

4

Estou tentando encontrar e substituir caret open_parentheses some_content close_parentheses (por exemplo, ^(.*) ) por caret open_curly_bracket the_same_content close_curly_bracket (ou seja, ^{.*} , mas tenho problemas.

1) Eu não entendo como preservar o conteúdo curinga correspondente .*

2) Eu não vejo como formular o sequência de escape para especificar chaves e parênteses.

Eu tenho passado por esta página por um bom tempo e tentei o seguinte

%s/^(*)/^{*} /gc
%s/^(.*)/^{.*} /gc
%s/^/(.*/)/^{.*} /gc
    
por rudolph9 22.07.2012 / 18:11

2 respostas

6

Todos esses caracteres têm uma funcionalidade especial, dependendo se um caractere de escape os precede. Isso depende do caractere se uma sequência de escape precedendo o caractere com funcionalidade especial a utiliza (ou seja, um ^ executa uma funcionalidade especial, um \^ não, onde um ( não não executa especial funcionalidade, e um \( faz.

A expressão que você está procurando é a seguinte

s/\^(\([^)])\))/\^\{\}/g

A expressão literalmente estado, corresponde a um caret seguido por um open_parenthesis seguido por qualquer caractere exceto um close_parenthesis seguido por um close_parenthesis e substitua por aa caret seguido por open_curly_bracket seguido pelo conteúdo encontrado ao pesquisar any_character_except a close_parenthesis (ou seja, o conteúdo entre \( e \) ) seguido por um close_curly_bracket

Nota: outras abordagens existem também

    
por 22.07.2012 / 18:16
0

Você está realmente procurando pelo personagem careta?
O cursor geralmente significa começar a procurar o padrão no início de uma linha.

Assumindo que você é ...

algum texto ^ (mais texto) e mais ^ (mais texto) e mais

- E-- você o que mudou para:

algum texto ^ {mais texto} e mais ^ {mais texto} e mais

Em seguida, use:

: s - \ ^ (([^)] +)) - ^ {\ 1} -gc

:s      the substitute command
-       start pattern, use - instead of / for clarity
\^      look for the ^ char, need to escape
(       followed by (
\(      start capture
[^)]\+  one or more chars except )
\)      end capture
)       followed by )
-       start replace, use - instead of / for clarity
^{      replace ^( with ^{
      replace with the captured text
}       replace ) with }
-       start flags, use - instead of / for clarity
gc      confirm replace for each occurance in the line

Se você quiser que a pesquisa e a substituição abranjam todo o arquivo, use:

:% s - \ ^ (([^)] +)) - ^ {\ 1} -gc

O% significa o arquivo inteiro.

    
por 23.07.2012 / 02:57

Tags