Refatorando Código em Texto Sublime 3

2

Atualmente eu faço isso com Find All ( Ctrl + F old_var , alt + enter new_var ), mas isso substitui as palavras em meus comentários e strings.

Um comentário em esta resposta sugeriu o Plugin PyRefactor que requer string . Essas ferramentas parecem ter padrões que são muito pesados para meus propósitos. Eu só quero refatorar nomes de variáveis em scripts python autônomos com o Sublime Text 3.

Então, em um script como

# Where did my hat go?
hat = 0
print(hat)
print("hat")

A variável hat (não em strings nem comentários) pode ser substituída por outra coisa com o toque de uma tecla de atalho. Não há necessidade de uma pasta / configuração de projeto especial, e nada mudou em vários arquivos. Infelizmente, Localizar tudo hat -> llama faz ...

# Where did my llama go?
llama = 0
print(llama)
print("llama")

EDITAR:

Eu aprecio a solução de regex da @Toto, mas ainda não sou fluente nisso e gostaria de um método que funcione de maneira mais consistente e mais fácil de lembrar. Existe um plugin (ou posso escrever um?) Que identifique todas as variáveis definidas e definidas globalmente (argumentos em chamadas de função, etc.) e permita um simples Find and Replace?

    
por Wassadamo 12.09.2018 / 21:05

1 resposta

1

  • Ctrl + H
  • Localizar: (?:^(?<!#).*\K|(<?!"))\bhat\b(?!")
  • Substituir: llama
  • verificar expressão regular
  • marque a palavra inteira
  • check Wrap
  • Substituir todos

Explicação:

(?:
    ^       : beginning of line
    (?<!#)  : negative lookbehind, zero-length assertion that makes sure we don't have # before
    .*      : 0 or more any character
    \k      : forget all we have seen until this position
  |         : OR
    (?<!")  : negative lookbehind, zero-length assertion that makes sure we don't have " before
)
\b      : word boundary to not match chat, remove it if you want to match chat also
hat     : literally
\b      : word boundary to not match hats, remove it if you want to match hats also
(?!")   : negative lookahead, zero-length assertion that makes sure we don't have " after

Dado:

# Where did my hat go?
hat = 0
chat = 0
print(hat)
print("hat")
print(chat)

Resultado para o exemplo dado:

# Where did my hat go?
llama = 0
chat = 0
print(llama)
print("hat")
print(chat)

Antes:

Depois:

    
por 13.09.2018 / 12:17