Qual é a melhor maneira de redimensionar um nome de variável no vim?

8

Eu sei que há uma maneira de pesquisar e substituir ocorrências variáveis ​​em um arquivo de origem.

Mas existe alguma maneira melhor pela qual, se eu renomear uma variável em um local, ela também seja renomeada em outros locais sem pesquisar, substituir ou substituir?

WitVault
fonte
A resposta vai depender do idioma. Em algumas bases de código, pode ser prático escrever um regex que corresponda exatamente à sua situação.
aebabis

Respostas:

13

Você pode apenas usar o fluxo de trabalho usual searche replace:

/original
cwreplaced
n.n.

Você também pode tirar proveito do gnmovimento:

/original<CR>
cgnreplaced<ESC>
.....

cgnvai change o npadrão ext combinado, então em vez de usar n.n.a go to nexte repeatvocê pode apenas ..que meios replace next.

gnsignifica "procurar próxima ocorrência e iniciar uma seleção visual sobre ele", você pode ler mais sobre isso no doc: :h gn.

nobe4
fonte
Você pode explicar o movimento do GN? Eu sou completamente novo no vim.
WitVault
3
Sempre perguntar Vim primeiro: :help gn.
romainl
@ nobe4: Você pode melhorar sua resposta. :) O usuário pode querer substituir por todos os $ first por $ second, e não $ first_variable. Podemos ir com \ <padrão \>? Ou sugira uma maneira melhor!
SibiCoder
6

Você pode usar um substituto:

:%s/original/replaced/g

Vai substitute todo o arquivo inteiro ( %) originalpor replaced. E substituirá várias ocorrências na mesma linha g.

Se você não tiver certeza sobre a substituição automática, poderá adicionar o csinalizador para solicitar confirmação sempre.

nobe4
fonte
Eu não quero cegamente procurar e substituir.
WitVault
3
Então a cbandeira é o caminho a percorrer.
nobe4
2

Eu gostaria de adicionar outra opção.

Você pode fazer /originale depois fazer :%s//replacement. (Use /cno final se você quiser confirmação).

Embora você esteja pressionando mais 3 teclas, isso tem uma vantagem em relação ao fazer apenas %s/original/replacementporque fornece uma indicação visual de que sua pesquisa está correta.

nmercado86
fonte