brennim
17:38
  • 📁
    blog
  • 📁
    games
  • 📁
    photos
  • 📄
    guestbook.txt
×

HEAnV #02

2023-10-26

Uma das partes mais legais de usar o vim ainda é refatorar linhas inteiras com algumas porradas no teclado. Sabe quando você precisa interpolar uma string em js e você apenas cs"`. Eu sei, precisa do vim-surround, mas se ainda não tem esse plugin, o que está fazendo?

Recentemente descobri que esses movimentos do surround também servem pra tags! Você provavelmente já conhece cit para alterar o conteúdo dentro de tags, ou até dat para remover a tag e seus filhos por inteiro.

Mas sabia que também pode fazer dst para deletar somente as tags, e manter o conteúdo? Menos óbvio ainda é que é possível trocar uma tag, com: cstt.

Isso funciona porque o comando cs, ou change surrounding recebe dois objetos, um destino e uma substituição. Nesse caso, o destino é t, uma tag, e a substituição é t, uma tag. Pra saber mais, :help surround-targets e :help surround-replacements

Lendo esse help acabei descobrindo uma funcionalidade que não conhecia, um HEA dentro do HEA. É possível adicionar chamada de funções com o target f. 🤯

  Old text          Command           New text  
  "hello"           ysWfprint<cr>     print("hello")

Se você usa linguagens com symbols, como ruby ou fennel, uma substituição possível é :. Por exemplo, se quiser trocar uma string para um symbol, basta cs":. Agora, se quiser fazer o contrário, não é tão obvio.

Bônus

Omni-completion funciona pra fechar uma tag correspondente, mesmo sem configurar nadinha. Se abriu uma tag, pra fechar basta escrever </ e Ctrl-xCtrl-o.

Se uma LSP estiver rodando é capaz que ela tenha sequestrado seu omnifunc. Nesse caso senta e chora porque eu não sei o que fazer 🤷