A substituição global do Vim não substitui todos os jogos em uma linha


12

às vezes, minhas subistusões globais não substituem todas as correspondências em uma linha. Isso é confirmado pelo fato de que eu posso vê-lo quando faço substituições com confirmação. Uma correspondência é encontrada em uma linha com várias correspondências possíveis, mas depois é transferida para outra linha.

Eu uso os parâmetros gou gcoperando em todo o arquivo com %.

Neste arquivo:

hello hello
hello
hello hello hello
hello

Se %s/hello/goodbye/geu receber

goodbye hello
goodbye
goodbye hello hello
goodbye

Tudo o que tenho na minha .vimrcpesquisa / substituição é

set hlsearch
set ignorecase
set incsearch

3
Por favor, dê-nos um exemplo do mundo real e mostre-nos o seu vimrc.
— Romainl

2
Qual é o resultado :echo &gde o que acontece se você adicionar um segundo gsinalizador como este: %s/hello/goodbye/ggou se você remover gtotalmente o sinalizador? Se a saída de :echo &gdfor 1, tente adicionar set nogdefaultno final do seu vimrc.
— user9433424

11
Bem! Eu não sei por que, mas por padrão foi definido como 0, então eu adicionei set nogdefaultcomo você disse e funciona agora, a propósito. Obrigado!
— Nicolas Scotto Di Perto

Respostas:


12

Talvez você, ou um plugin, tenha ativado a opção 'gdefault'. Esta opção adiciona o sinalizador gautomaticamente sempre que você executa uma substituição.

Portanto, quando você adiciona manualmente o sinalizador genquanto 'gdefault'está ativado, é como se você tivesse 2 gsinalizadores que têm o mesmo efeito que nenhum. Portanto, o Vim substitui apenas a primeira ocorrência do padrão em todas as linhas.

Por padrão, esta opção está desactivada, mas para se certificar de que é, você pode adicionar no final da sua vimrc: set nogdefault.

Como alternativa, se você suspeitar que um plug-in pode ter ativado a opção, você pode localizá-lo com: verb set gd?

Ou você pode se acostumar com a opção, o que significa que, quando você deseja substituir todas as ocorrências de um padrão, não adiciona o gsinalizador (porque gdefaultjá o fez) e quando deseja substituir apenas a 1ª ocorrência do padrão em uma linha, você adiciona o gsinalizador (porque 2 gsinalizadores são iguais a nenhum).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.