à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 g
ou gc
operando em todo o arquivo com %
.
Neste arquivo:
hello hello
hello
hello hello hello
hello
Se %s/hello/goodbye/g
eu receber
goodbye hello
goodbye
goodbye hello hello
goodbye
Tudo o que tenho na minha .vimrc
pesquisa / substituição é
set hlsearch
set ignorecase
set incsearch
substitute
Nicolas Scotto Di Perto
fonte
fonte
vimrc
.:echo &gd
e o que acontece se você adicionar um segundog
sinalizador como este:%s/hello/goodbye/gg
ou se você removerg
totalmente o sinalizador? Se a saída de:echo &gd
for1
, tente adicionarset nogdefault
no final do seuvimrc
.set nogdefault
como você disse e funciona agora, a propósito. Obrigado!Respostas:
Talvez você, ou um plugin, tenha ativado a opção
'gdefault'
. Esta opção adiciona o sinalizadorg
automaticamente sempre que você executa uma substituição.Portanto, quando você adiciona manualmente o sinalizador
g
enquanto'gdefault'
está ativado, é como se você tivesse 2g
sinalizadores 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
g
sinalizador (porquegdefault
já o fez) e quando deseja substituir apenas a 1ª ocorrência do padrão em uma linha, você adiciona og
sinalizador (porque 2g
sinalizadores são iguais a nenhum).fonte