Por que o espaço em branco não é incluído no conteúdo empacotado de referência anterior do vim?

0

Eu tenho um código com o formato parecido com: print 'hi' # sample comment .

E usei :%s/^\([^#]*\)\(#.*\)/\r /gc para alterar o formato deles no vim.
Pelo comando acima, obtive o resultado abaixo:

# sample comment
    print 'hi'\s\s\s\s\s\s\s\s\s\s\s         

É quase o que eu quero, exceto os espaços em branco extras invisíveis que eu uso \s para indicar no resultado.

Parece que a parte \([^#]*\) do comando vim não incluiu os espaços em branco em seu escopo.

Por que isso aconteceu, como consertar isso?

    
por Zen 20.04.2015 / 09:47

1 resposta

2

Isso acontece porque seu primeiro grupo de captura inclui os espaços.

    ^\([^#]*\)\(#.*\)
    | --------  -------- the comment 
begin    | 
    everything upto #
    including spaces

Para corrigir isso, você deseja deixar os espaços fora do grupo de captura, assim:

   ^\(.\{-}\)\s*\(#.*\)
   |  ------  --   ------ comment
begin    |     \____ any amount of whitespace
  non-greedy match

Isso tornaria seu comando completo:

%s/^\(.\{-}\)\s*\(#.*\)/\r    /gc
    
por 20.04.2015 / 10:13

Tags