<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ellison Leão</title>
    <description>The latest articles on DEV Community by Ellison Leão (@ellisonleao).</description>
    <link>https://dev.to/ellisonleao</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F945%2F524ab62a-4166-40fa-b574-d008ee4705d6.jpeg</url>
      <title>DEV Community: Ellison Leão</title>
      <link>https://dev.to/ellisonleao</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ellisonleao"/>
    <language>en</language>
    <item>
      <title>Gerando documentação vimdoc de plugins Neovim com Github Actions</title>
      <dc:creator>Ellison Leão</dc:creator>
      <pubDate>Wed, 26 Jul 2023 20:40:59 +0000</pubDate>
      <link>https://dev.to/ellisonleao/gerando-documentacao-vimdoc-de-plugins-neovim-com-github-actions-22if</link>
      <guid>https://dev.to/ellisonleao/gerando-documentacao-vimdoc-de-plugins-neovim-com-github-actions-22if</guid>
      <description>&lt;p&gt;&lt;em&gt;Dificuldade: intermediário&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Escrever documentação nem sempre é uma das tarefas mais prazerosas, mas ter uma boa documentação nos nossos projetos é o que realmente faz diferença. Ainda mais quando usamos ferramentas que nos auxiliam nessa escrita.&lt;/p&gt;

&lt;p&gt;Nesse post vamos ensinar como automatizar a geração da documentação específica para plugins &lt;strong&gt;Neovim&lt;/strong&gt; utilizando &lt;strong&gt;Github Actions&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo o fluxo
&lt;/h2&gt;

&lt;p&gt;Assumindo que entendemos o fluxo básico das &lt;strong&gt;Github Actions&lt;/strong&gt;, temos o seguinte fluxo para a geração da doc:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fazemos um push na branch principal (geralmente chamada de &lt;code&gt;main&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Um job chamado &lt;code&gt;docs&lt;/code&gt; é iniciado com os seguintes passos:

&lt;ul&gt;
&lt;li&gt;Conversão do &lt;code&gt;README.md&lt;/code&gt; do seu projeto em um arquivo .txt no formato &lt;a href="https://vimdoc.sourceforge.net/htmldoc/helphelp.html#help-writing" rel="noopener noreferrer"&gt;vimdoc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Criamos um commit e fazemos o push na mesma branch com o resultado da conversão&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Convertendo isso para o &lt;strong&gt;Github Actions&lt;/strong&gt;, temos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crie um arquivo &lt;code&gt;.github/workflows/docs.yml&lt;/code&gt; com o seguinte conteúdo:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt; &lt;span class="c1"&gt;# aqui nossa branch principal se chama `main`&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;docs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;panvimdoc&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kdheepak/panvimdoc@main&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;vimdoc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nome-do-seu-projeto&lt;/span&gt; &lt;span class="c1"&gt;# sem extensão .txt&lt;/span&gt;
          &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Neovim&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.8.0"&lt;/span&gt;
          &lt;span class="na"&gt;demojify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# coloque false caso queira manter os emojis&lt;/span&gt;
          &lt;span class="na"&gt;treesitter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Push changes&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stefanzweifel/git-auto-commit-action@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;commit_message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto-generate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;vimdoc"&lt;/span&gt;
          &lt;span class="na"&gt;commit_user_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github-actions[bot]"&lt;/span&gt;
          &lt;span class="na"&gt;commit_user_email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github-actions[bot]@users.noreply.github.com"&lt;/span&gt;
          &lt;span class="na"&gt;commit_author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github-actions[bot]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;github-actions[bot]@users.noreply.github.com&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Preparando seu README
&lt;/h2&gt;

&lt;p&gt;Para um bom resultado de uma documentação vimdoc, recomendamos que seu README tenha pelo menos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma seção &lt;code&gt;Sobre&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Uma seção &lt;code&gt;Instalação&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Uma seção &lt;code&gt;Como usar&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O uso de tabelas, bullet points também é suportado e recomendado. Quanto mais detalhes conseguir colocar na documentação, melhor ficará o resultado (até emojis são suportados!)&lt;/p&gt;

&lt;h2&gt;
  
  
  Colocando tudo para funcionar
&lt;/h2&gt;

&lt;p&gt;Antes de commitar e rodar a action pela primeira vez, crie o arquivo vazio da doc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;doc/nome-do-seu-projeto.txt
&lt;span class="nv"&gt;$ &lt;/span&gt;git add doc/nome-do-seu-projeto.txt
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'adicionando arquivo vimdoc'&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora envie o novo worflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git add .github/workflows/docs.yml
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'adicionando docs workflow'&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo deu certo, você já poderá ver o resultado do workflow com seu vimdoc gerado na branch principal. Exemplo do resultado na imagem abaixo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pre86sg64pzp5y69bdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pre86sg64pzp5y69bdg.png" alt="resultado do job" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exemplo pode ser visto &lt;a href="https://github.com/ellisonleao/carbon-now.nvim/actions/runs/5673377787" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links úteis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Documentação da &lt;a href="https://kdheepak.com/panvimdoc/" rel="noopener noreferrer"&gt;github action&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Exemplo de um bom &lt;a href="https://github.com/folke/lazy.nvim/blob/main/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt; vs o &lt;a href="https://github.com/folke/lazy.nvim/blob/main/doc/lazy.nvim.txt" rel="noopener noreferrer"&gt;resultado&lt;/a&gt; em vimdoc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se gostou do artigo, não esqueça de compartilhar em outras redes e aproveita e me segue também! &lt;a href="https://linktr.ee/ellisonleao" rel="noopener noreferrer"&gt;https://linktr.ee/ellisonleao&lt;/a&gt;&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>plugin</category>
      <category>githubactions</category>
      <category>pandoc</category>
    </item>
    <item>
      <title>Meus 10 plugins favoritos para o Neovim em 2022</title>
      <dc:creator>Ellison Leão</dc:creator>
      <pubDate>Fri, 13 May 2022 17:56:41 +0000</pubDate>
      <link>https://dev.to/ellisonleao/meus-10-plugins-favoritos-para-o-neovim-em-2022-43g2</link>
      <guid>https://dev.to/ellisonleao/meus-10-plugins-favoritos-para-o-neovim-em-2022-43g2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Uma breve lista dos melhores plugins pra usar agora e aumentar sua produtividade&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quando comecei a usar o Neovim, lá por 2017, depois de passar 6 anos usando Vim, não tinha sentido uma diferença tão grande porque primeiro a API lua era praticamente inexistente e minha configuração ainda era puramente vimscript e meus plugins também. &lt;/p&gt;

&lt;p&gt;Mas tudo mudou quando fiz o upgrade pras versões 0.4.x e gradualmente comecei a me aventurar no mundo do Lua, no final de 2019. De lá pra ca já consegui migrar minhas configurações 100% para Lua e 99% dos plugins que uso hoje também são feitos na linguagem. Aqui vai minha lista dos 10 melhores plugins que acho indispensáveis hoje:&lt;/p&gt;

&lt;h2&gt;
  
  
  #10
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/wbthomason" rel="noopener noreferrer"&gt;
        wbthomason
      &lt;/a&gt; / &lt;a href="https://github.com/wbthomason/packer.nvim" rel="noopener noreferrer"&gt;
        packer.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;strong&gt;NOTICE:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This repository is currently unmaintained. For the time being (as of August, 2023), it is recommended to use one of the following plugin managers instead:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/folke/lazy.nvim" rel="noopener noreferrer"&gt;lazy.nvim&lt;/a&gt;: Most stable and maintained plugin manager for Nvim.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/lewis6991/pckr.nvim" rel="noopener noreferrer"&gt;pckr.nvim&lt;/a&gt;: Spiritual successor of packer.nvim. Functional but not as stable as lazy.nvim.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;packer.nvim&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://gitter.im/packer-nvim/community?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/335c9ee0b540d19a29323d900502be99a012414abdc965f6e4bd7047842f6541/68747470733a2f2f6261646765732e6769747465722e696d2f7061636b65722d6e76696d2f636f6d6d756e6974792e737667" alt="Gitter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jwiegley/use-package" rel="noopener noreferrer"&gt;&lt;code&gt;use-package&lt;/code&gt;&lt;/a&gt; inspired plugin/package management for
Neovim.&lt;/p&gt;
&lt;p&gt;Have questions? Start a &lt;a href="https://github.com/wbthomason/packer.nvim/discussions" rel="noopener noreferrer"&gt;discussion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have a problem or idea? Make an &lt;a href="https://github.com/wbthomason/packer.nvim/issues" rel="noopener noreferrer"&gt;issue&lt;/a&gt; or a &lt;a href="https://github.com/wbthomason/packer.nvim/pulls" rel="noopener noreferrer"&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Packer is built on native packages. You may wish to read &lt;code&gt;:h packages&lt;/code&gt; before continuing&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#requirements" rel="noopener noreferrer"&gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#quickstart" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#bootstrapping" rel="noopener noreferrer"&gt;Bootstrapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/wbthomason/packer.nvim#usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#the-startup-function" rel="noopener noreferrer"&gt;The startup function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#custom-initialization" rel="noopener noreferrer"&gt;Custom Initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#specifying-plugins" rel="noopener noreferrer"&gt;Specifying Plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#performing-plugin-management-operations" rel="noopener noreferrer"&gt;Performing plugin management operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#extending-packer" rel="noopener noreferrer"&gt;Extending packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#compiling-lazy-loaders" rel="noopener noreferrer"&gt;Compiling Lazy-Loaders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#user-autocommands" rel="noopener noreferrer"&gt;User autocommands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#using-a-floating-window" rel="noopener noreferrer"&gt;Using a floating window&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#profiling" rel="noopener noreferrer"&gt;Profiling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#debugging" rel="noopener noreferrer"&gt;Debugging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#compatibility-and-known-issues" rel="noopener noreferrer"&gt;Compatibility and known issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wbthomason/packer.nvim#contributors" rel="noopener noreferrer"&gt;Contributors&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Declarative plugin specification&lt;/li&gt;
&lt;li&gt;Support for dependencies&lt;/li&gt;
&lt;li&gt;Support for Luarocks dependencies&lt;/li&gt;
&lt;li&gt;Expressive configuration and lazy-loading options&lt;/li&gt;
&lt;li&gt;Automatically compiles efficient lazy-loading code to improve startup time&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/wbthomason/packer.nvim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Começando por esse incrível gerenciador de plugins, que vai deixar sua vida bem mais fácil na hora de instalar, atualizar e configurar seus plugins, principalmente se você utiliza lua nas suas configurações. Tem suporte a instalação de pacotes do luarocks, &lt;em&gt;lazy loading&lt;/em&gt; e mais.&lt;/p&gt;

&lt;h2&gt;
  
  
  #9
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/numToStr" rel="noopener noreferrer"&gt;
        numToStr
      &lt;/a&gt; / &lt;a href="https://github.com/numToStr/Comment.nvim" rel="noopener noreferrer"&gt;
        Comment.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🧠 💪 // Smart and powerful comment plugin for neovim. Supports treesitter, dot repeat, left-right/up-down motions, hooks, and more
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;// Comment.nvim &lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;sup&gt;⚡ Smart and Powerful commenting plugin for neovim ⚡&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/42532967/136532939-926a8350-84b7-4e78-b045-fe21b5947388.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F42532967%2F136532939-926a8350-84b7-4e78-b045-fe21b5947388.gif" alt="Comment.nvim" title="Commenting go brrrr"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;✨ Features&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Supports treesitter. &lt;a href="https://github.com/numToStr/Comment.nvim#treesitter" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Supports &lt;code&gt;commentstring&lt;/code&gt;. Read &lt;code&gt;:h comment.commentstring&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Supports line (&lt;code&gt;//&lt;/code&gt;) and block (&lt;code&gt;/* */&lt;/code&gt;) comments&lt;/li&gt;
&lt;li&gt;Dot (&lt;code&gt;.&lt;/code&gt;) repeat support for &lt;code&gt;gcc&lt;/code&gt;, &lt;code&gt;gbc&lt;/code&gt; and friends&lt;/li&gt;
&lt;li&gt;Count support for &lt;code&gt;[count]gcc&lt;/code&gt; and &lt;code&gt;[count]gbc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Left-right (&lt;code&gt;gcw&lt;/code&gt; &lt;code&gt;gc$&lt;/code&gt;) and Up-Down (&lt;code&gt;gc2j&lt;/code&gt; &lt;code&gt;gc4k&lt;/code&gt;) motions&lt;/li&gt;
&lt;li&gt;Use with text-objects (&lt;code&gt;gci{&lt;/code&gt; &lt;code&gt;gbat&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Supports pre and post hooks&lt;/li&gt;
&lt;li&gt;Ignore certain lines, powered by Lua regex&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 Installation&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;With &lt;a href="https://github.com/folke/lazy.nvim" rel="noopener noreferrer"&gt;lazy.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-lua notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; add this to your lua/plugins.lua, lua/plugins/init.lua,  or the file you keep your other plugins:&lt;/span&gt;
{
    &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;numToStr/Comment.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;,
    &lt;span class="pl-smi"&gt;opts&lt;/span&gt; &lt;span class="pl-k"&gt;=&lt;/span&gt; {
        &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; add any options here&lt;/span&gt;
    }
}
&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;With &lt;a href="https://github.com/wbthomason/packer.nvim" rel="noopener noreferrer"&gt;packer.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-lua notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;use&lt;/span&gt; {
    &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;numToStr/Comment.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;,
    &lt;span class="pl-en"&gt;config&lt;/span&gt; &lt;span class="pl-k"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;function&lt;/span&gt;()
        &lt;span class="pl-c1"&gt;require&lt;/span&gt;(&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Comment&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;).&lt;span class="pl-c1"&gt;setup&lt;/span&gt;()
    &lt;span class="pl-k"&gt;end&lt;/span&gt;
}&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;With &lt;a href="https://github.com/junegunn/vim-plug" rel="noopener noreferrer"&gt;vim-plug&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-viml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;Plug &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;numToStr/Comment.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;"&lt;/span&gt; Somewhere after plug#end()&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/numToStr/Comment.nvim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Um poderoso plugin para inserir e remover comentários em códigos. Tem suporte ao treesitter, que vamos falar mais pra frente. &lt;/p&gt;

&lt;h2&gt;
  
  
  #8
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/neovim" rel="noopener noreferrer"&gt;
        neovim
      &lt;/a&gt; / &lt;a href="https://github.com/neovim/nvim-lspconfig" rel="noopener noreferrer"&gt;
        nvim-lspconfig
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Quickstart configs for Nvim LSP
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;nvim-lspconfig&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;nvim-lspconfig is a "data only" repo, providing basic, default &lt;a href="https://neovim.io/doc/user/lsp.html" rel="nofollow noopener noreferrer"&gt;Nvim LSP client&lt;/a&gt;
configurations for various LSP servers. View &lt;a href="https://github.com/neovim/nvim-lspconfigdoc/configs.md" rel="noopener noreferrer"&gt;all configs&lt;/a&gt; or &lt;code&gt;:help lspconfig-all&lt;/code&gt; from Nvim.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Important ⚠️
&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;These configs are &lt;strong&gt;best-effort and supported by the community (you).&lt;/strong&gt; See &lt;a href="https://github.com/neovim/nvim-lspconfig#contributions" rel="noopener noreferrer"&gt;contributions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ask questions on &lt;a href="https://github.com/neovim/neovim/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;, not the issue tracker.&lt;/li&gt;
&lt;li&gt;If you found a bug in Nvim LSP (&lt;code&gt;:help lsp&lt;/code&gt;), &lt;a href="https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml" rel="noopener noreferrer"&gt;report it to Neovim core&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Do not&lt;/strong&gt; report it here. Only configuration data lives here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This repo only provides &lt;em&gt;configurations&lt;/em&gt;. Its programmatic API is deprecated and must not be used externally.
&lt;ul&gt;
&lt;li&gt;The "framework" parts (&lt;em&gt;not&lt;/em&gt; the configs) of nvim-lspconfig &lt;a href="https://github.com/neovim/neovim/issues/28479" rel="noopener noreferrer"&gt;will be upstreamed to Nvim core&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://luarocks.org/modules/neovim/nvim-lspconfig" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/57aa64ed10a79399509246a1ae220f761b1c35e4d44c6c07595faf4463019fd8/68747470733a2f2f696d672e736869656c64732e696f2f6c7561726f636b732f762f6e656f76696d2f6e76696d2d6c7370636f6e6669673f6c6f676f3d6c756126636f6c6f723d707572706c65" alt="LuaRocks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requires Nvim 0.10 above. Update Nvim and nvim-lspconfig before reporting an issue.&lt;/li&gt;
&lt;li&gt;Install nvim-lspconfig using Vim's "packages" feature:
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Or use a 3rd-party plugin manager (consult the documentation for your plugin manager).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quickstart&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Install…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/neovim/nvim-lspconfig" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Plugin obrigatório para quem quer utilizar o maravilhoso cliente nativo LSP. Com esse plugin a configuração dos LSP servers das linguagens fica extremamente fácil.&lt;/p&gt;

&lt;h2&gt;
  
  
  #7
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/williamboman" rel="noopener noreferrer"&gt;
        williamboman
      &lt;/a&gt; / &lt;a href="https://github.com/williamboman/nvim-lsp-installer" rel="noopener noreferrer"&gt;
        nvim-lsp-installer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Further development has moved to https://github.com/williamboman/mason.nvim!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;ℹ️ Project status&lt;/h2&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;This is an excerpt from the &lt;a href="https://github.com/williamboman/nvim-lsp-installer/discussions/876" rel="noopener noreferrer"&gt;announcement here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;nvim-lsp-installer&lt;/code&gt; is no longer maintained.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/williamboman/mason.nvim" rel="noopener noreferrer"&gt;&lt;code&gt;mason.nvim&lt;/code&gt;&lt;/a&gt; is the next generation version of &lt;code&gt;nvim-lsp-installer&lt;/code&gt;. It
builds on top of the very same foundation as &lt;code&gt;nvim-lsp-installer&lt;/code&gt; (which means it's easy to migrate), but with a
majority of internals refactored to improve extensibility and testability.&lt;/p&gt;
&lt;p&gt;More importantly, the scope of &lt;code&gt;mason.nvim&lt;/code&gt; has also been widened to target more than just LSP servers. &lt;code&gt;mason.nvim&lt;/code&gt;
supports DAP servers, linters, formatters, and more. As of writing, &lt;code&gt;mason.nvim&lt;/code&gt; provides 150+ packages for 100+
languages. It can be thought of as a general-purpose package manager, native to Neovim, that runs everywhere Neovim runs
(Windows, macOS, Linux, etc.).&lt;/p&gt;
&lt;p&gt;Another big change with &lt;code&gt;mason.nvim&lt;/code&gt; is that executables are now linked to a single, shared, location, allowing seamless
access from Neovim builtins (shell, terminal, etc.) as well as other 3rd party plugins.&lt;/p&gt;
&lt;p&gt;There have also been other improvements…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/williamboman/nvim-lsp-installer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Plugin que fornece todo suporte para uma rápida instalação dos LSP servers com uma excelente UX. É um plugin que funciona em conjunto com o &lt;strong&gt;nvim-lspconfig&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  #6
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jose-elias-alvarez" rel="noopener noreferrer"&gt;
        jose-elias-alvarez
      &lt;/a&gt; / &lt;a href="https://github.com/jose-elias-alvarez/null-ls.nvim" rel="noopener noreferrer"&gt;
        null-ls.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ARCHIVED&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;null-ls is now archived and will no longer receive updates. Please see
&lt;a href="https://github.com/jose-elias-alvarez/null-ls.nvim/issues/1621" rel="noopener noreferrer"&gt;this issue&lt;/a&gt; for
details.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;null-ls.nvim&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Use Neovim as a language server to inject LSP diagnostics, code actions, and
more via Lua.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Motivation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Neovim's LSP ecosystem is growing, and plugins like
&lt;a href="https://github.com/nvim-telescope/telescope.nvim" rel="noopener noreferrer"&gt;telescope.nvim&lt;/a&gt; and
&lt;a href="https://github.com/folke/trouble.nvim" rel="noopener noreferrer"&gt;trouble.nvim&lt;/a&gt; make it a joy to work with
LSP features like code actions and diagnostics.&lt;/p&gt;
&lt;p&gt;Unlike the VS Code and coc.nvim ecosystems, Neovim doesn't provide a way for
non-LSP sources to hook into its LSP client. null-ls is an attempt to bridge
that gap and simplify the process of creating, sharing, and setting up LSP
sources using pure Lua.&lt;/p&gt;
&lt;p&gt;null-ls is also an attempt to reduce the boilerplate required to set up
general-purpose language servers and improve performance by removing the need
for external processes.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Status&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;null-ls is in &lt;strong&gt;beta status&lt;/strong&gt;. Please see below for steps to follow if something
doesn't work the way…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jose-elias-alvarez/null-ls.nvim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Gere diagnósticos, formate, realize ações de código e mais, utilizando esse plugin que utiliza o neovim como um servidor LSP, e faz a ponte entre ferramentas que não fazem uma conexão direta com o cliente nativo LSP. Entre os exemplos podemos citar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formatar código ao salvar o buffer com o prettier&lt;/li&gt;
&lt;li&gt;Gerar relatório de erros e warnings com golangci-lint para Go&lt;/li&gt;
&lt;li&gt;Formatar código Lua com stylua&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;e &lt;a href="https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md" rel="noopener noreferrer"&gt;mais&lt;/a&gt;! &lt;/p&gt;

&lt;h2&gt;
  
  
  #5
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nvim-treesitter" rel="noopener noreferrer"&gt;
        nvim-treesitter
      &lt;/a&gt; / &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter" rel="noopener noreferrer"&gt;
        nvim-treesitter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Nvim Treesitter configurations and abstraction layer
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;nvim-treesitter&lt;/h1&gt;
&lt;/div&gt;
  &lt;p&gt;
    &lt;a href="https://matrix.to/#/#nvim-treesitter:matrix.org" rel="nofollow noopener noreferrer"&gt;
      &lt;img alt="Matrix Chat" src="https://camo.githubusercontent.com/954e3fc1a9172d1c08e4e307b5361d27a5a48d45818951fffab09bdc86fa13e9/68747470733a2f2f696d672e736869656c64732e696f2f6d61747269782f6e76696d2d747265657369747465723a6d61747269782e6f7267"&gt;
    &lt;/a&gt;
    &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter/actions?query=workflow%3A%22Linting+and+style+checking%22+branch%3Amaster" rel="noopener noreferrer"&gt;
      &lt;img alt="Linting and Style" src="https://github.com/nvim-treesitter/nvim-treesitter/workflows/Linting%20and%20style%20checking/badge.svg"&gt;
    &lt;/a&gt;
    &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter/actions?query=workflow%3A%22Check+loading+of+syntax+files%22+branch%3Amaster" rel="noopener noreferrer"&gt;
      &lt;img alt="Syntax files" src="https://github.com/nvim-treesitter/nvim-treesitter/workflows/Check%20loading%20of%20syntax%20files/badge.svg"&gt;
    &lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;p&gt;
    &lt;a rel="noopener noreferrer" href="https://github.com/nvim-treesitter/nvim-treesitterassets/logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fnvim-treesitter%2Fnvim-treesitterassets%2Flogo.png" alt="Logo"&gt;&lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;a href="https://github.com/tree-sitter/tree-sitter" rel="noopener noreferrer"&gt;Treesitter&lt;/a&gt;
    configurations and abstraction layer for
    &lt;a href="https://github.com/neovim/neovim/" rel="noopener noreferrer"&gt;Neovim&lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;i&gt;
      Logo by &lt;a href="https://github.com/steelsojka" rel="noopener noreferrer"&gt;@steelsojka&lt;/a&gt;
    &lt;/i&gt;
  &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The goal of &lt;code&gt;nvim-treesitter&lt;/code&gt; is both to provide a simple and easy way to use the interface for &lt;a href="https://github.com/tree-sitter/tree-sitter" rel="noopener noreferrer"&gt;tree-sitter&lt;/a&gt; in Neovim and to provide some basic functionality such as highlighting based on it:&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/2361214/202753610-e923bf4e-e88f-494b-bb1e-d22a7688446f.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F2361214%2F202753610-e923bf4e-e88f-494b-bb1e-d22a7688446f.png" alt="example-cpp"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Traditional highlighting (left) vs Treesitter-based highlighting (right)
More examples can be found in &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter/wiki/Gallery" rel="noopener noreferrer"&gt;our gallery&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning: Treesitter and nvim-treesitter highlighting are an experimental feature of Neovim.
Please consider the experience with this plug-in as experimental until Tree-Sitter support in Neovim is stable!
We recommend using the nightly builds of Neovim if possible.
You can find the current roadmap &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter/issues/4767" rel="noopener noreferrer"&gt;here&lt;/a&gt;.
The roadmap and all features of this plugin are open to change, and any suggestion will be highly appreciated!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nvim-treesitter is based on three interlocking features: &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter#language-parsers" rel="noopener noreferrer"&gt;&lt;strong&gt;language parsers&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter#adding-queries" rel="noopener noreferrer"&gt;&lt;strong&gt;queries&lt;/strong&gt;&lt;/a&gt;, and &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter#available-modules" rel="noopener noreferrer"&gt;&lt;strong&gt;modules&lt;/strong&gt;&lt;/a&gt;, where &lt;em&gt;modules&lt;/em&gt; provide features – e.g., highlighting – based on…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nvim-treesitter/nvim-treesitter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Um plugin que faz interface com o excelente projeto &lt;a href="https://github.com/tree-sitter/tree-sitter" rel="noopener noreferrer"&gt;tree-sitter&lt;/a&gt; e traz funcionalides como _syntax highlighting _, indentação, seleção incremental, movimentação, folding, entre outros. &lt;/p&gt;

&lt;h2&gt;
  
  
  #4
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/L3MON4D3" rel="noopener noreferrer"&gt;
        L3MON4D3
      &lt;/a&gt; / &lt;a href="https://github.com/L3MON4D3/LuaSnip" rel="noopener noreferrer"&gt;
        LuaSnip
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Snippet Engine for Neovim written in Lua.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://matrix.to/#/%23luasnip:matrix.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e4c0c2d22ff5f4cb470267e74a6e420bc201b085070d0ff43c6626e84dfb09a/68747470733a2f2f696d672e736869656c64732e696f2f6d61747269782f6c7561736e69703a6d61747269782e6f72673f6c6162656c3d4d6174726978266c6f676f3d6d6174726978" alt="LuaSnip"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LuaSnip&lt;/h1&gt;
&lt;/div&gt;

  
    

    &lt;span class="m-1"&gt;javadoc.mp4&lt;/span&gt;
  

  

  


&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Features&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Tabstops&lt;/li&gt;
&lt;li&gt;Text-Transformations using Lua functions&lt;/li&gt;
&lt;li&gt;Conditional Expansion&lt;/li&gt;
&lt;li&gt;Defining nested Snippets&lt;/li&gt;
&lt;li&gt;Filetype-specific Snippets&lt;/li&gt;
&lt;li&gt;Choices&lt;/li&gt;
&lt;li&gt;Dynamic Snippet creation&lt;/li&gt;
&lt;li&gt;Regex-Trigger&lt;/li&gt;
&lt;li&gt;Autotriggered Snippets&lt;/li&gt;
&lt;li&gt;Easy Postfix Snippets&lt;/li&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Parse &lt;a href="https://microsoft.github.io/language-server-protocol/specification#snippet_syntax" rel="nofollow noopener noreferrer"&gt;LSP-Style&lt;/a&gt; Snippets either directly in Lua, as a VSCode package or a SnipMate snippet collection.&lt;/li&gt;
&lt;li&gt;Expand LSP-Snippets with &lt;a href="https://github.com/hrsh7th/nvim-compe" rel="noopener noreferrer"&gt;nvim-compe&lt;/a&gt; (or its' successor, &lt;a href="https://github.com/hrsh7th/nvim-cmp" rel="noopener noreferrer"&gt;nvim-cmp&lt;/a&gt; (requires &lt;a href="https://github.com/saadparwaiz1/cmp_luasnip" rel="noopener noreferrer"&gt;cmp_luasnip&lt;/a&gt;))&lt;/li&gt;
&lt;li&gt;Snippet history (jump back into older snippets)&lt;/li&gt;
&lt;li&gt;Resolve filetype at the cursor using Treesitter&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Drawbacks&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Snippets that make use of the entire functionality of this plugin have to be defined in Lua (but 95% of snippets can be written in LSP-syntax).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Requirements&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Neovim &amp;gt;= 0.7 (extmarks)
&lt;code&gt;jsregexp&lt;/code&gt; for &lt;code&gt;lsp-snippet-transformations&lt;/code&gt; (see &lt;a href="https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#transformations" rel="noopener noreferrer"&gt;here&lt;/a&gt; for some tips on installing it).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Setup&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;With your preferred plugin manager i.e. &lt;a href="https://github.com/junegunn/vim-plug" rel="noopener noreferrer"&gt;vim-plug&lt;/a&gt;, &lt;a href="https://github.com/wbthomason/packer.nvim" rel="noopener noreferrer"&gt;Packer&lt;/a&gt; or &lt;a href="https://github.com/folke/lazy.nvim" rel="noopener noreferrer"&gt;lazy&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Packer&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-lua notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;use&lt;/span&gt;({
    &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;L3MON4D3/LuaSnip&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; follow latest release.&lt;/span&gt;
    &lt;span class="pl-smi"&gt;tag&lt;/span&gt; &lt;span class="pl-k"&gt;=&lt;/span&gt; &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;v2.*&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;, &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; Replace &amp;lt;CurrentMajor&amp;gt; by the latest released major (first&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/L3MON4D3/LuaSnip" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;O melhor script para criação de snippets do Neovim. Simples assim. Tem uma curva de aprendizado um pouco alta, mas quando se pega o jeito, você não vai querer largar nunca. &lt;a href="https://www.youtube.com/watch?v=Dn800rlPIho" rel="noopener noreferrer"&gt;Aqui&lt;/a&gt; um vídeo explicando mais sobre as funcionalidades dele (Em inglês)&lt;/p&gt;

&lt;h2&gt;
  
  
  #3
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/hrsh7th" rel="noopener noreferrer"&gt;
        hrsh7th
      &lt;/a&gt; / &lt;a href="https://github.com/hrsh7th/nvim-cmp" rel="noopener noreferrer"&gt;
        nvim-cmp
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A completion plugin for neovim coded in Lua.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;nvim-cmp&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A completion engine plugin for neovim written in Lua
Completion sources are installed from external repositories and "sourced".&lt;/p&gt;

  
    

    &lt;span class="m-1"&gt;demo.mp4&lt;/span&gt;
    
  

  

  


&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Readme!&lt;/h1&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;There is a GitHub issue that documents &lt;a href="https://github.com/hrsh7th/nvim-cmp/issues/231" rel="noopener noreferrer"&gt;breaking changes&lt;/a&gt; for nvim-cmp. Subscribe to the issue to be notified of upcoming breaking changes.&lt;/li&gt;
&lt;li&gt;This is my hobby project. You can support me via GitHub sponsors.&lt;/li&gt;
&lt;li&gt;Bug reports are welcome, but don't expect a fix unless you provide minimal configuration and steps to reproduce your issue.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;cmp.mapping.preset.*&lt;/code&gt; is pre-defined configuration that aims to mimic neovim's native like behavior. It can be changed without announcement. Please manage key-mapping by yourself.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Concept&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Full support for LSP completion related capabilities&lt;/li&gt;
&lt;li&gt;Powerful customizability via Lua functions&lt;/li&gt;
&lt;li&gt;Smart handling of key mappings&lt;/li&gt;
&lt;li&gt;No flicker&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Setup&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Recommended Configuration&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;This example configuration uses &lt;code&gt;vim-plug&lt;/code&gt; as the plugin manager and &lt;code&gt;vim-vsnip&lt;/code&gt; as a snippet plugin.&lt;/p&gt;
&lt;div class="highlight highlight-source-viml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;call&lt;/span&gt; &lt;span class="pl-en"&gt;plug#begin&lt;/span&gt;(&lt;span class="pl-smi"&gt;&lt;span class="pl-k"&gt;s:&lt;/span&gt;plug_dir&lt;/span&gt;)
Plug &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;neovim/nvim-lspconfig&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
Plug &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;hrsh7th/cmp-nvim-lsp&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/hrsh7th/nvim-cmp" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Seguindo o melhor plugin para snippets, esse com certeza vai ser o melhor plugin para autocomplete que você irá ter no mercado até o momento. Seu design flexível permite incluir vários tipos diferentes de &lt;em&gt;sources&lt;/em&gt;, desde sugestões de LSP, snippets, etc. A lista é &lt;a href="https://github.com/hrsh7th/nvim-cmp/wiki/List-of-sources" rel="noopener noreferrer"&gt;gigantesca&lt;/a&gt; e você também conta com uma excelente documentação caso queira criar os seus próprios sources também.&lt;/p&gt;

&lt;h2&gt;
  
  
  #2
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nvim-lualine" rel="noopener noreferrer"&gt;
        nvim-lualine
      &lt;/a&gt; / &lt;a href="https://github.com/nvim-lualine/lualine.nvim" rel="noopener noreferrer"&gt;
        lualine.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A blazing fast and easy to configure neovim statusline plugin written in pure lua.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;lualine.nvim&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6da4d97c7bbc5bccb5827dacee2c9ab833fc2f7d7e800a518b68e5304c0937dd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f636f64652d73697a652f6e76696d2d6c75616c696e652f6c75616c696e652e6e76696d3f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/6da4d97c7bbc5bccb5827dacee2c9ab833fc2f7d7e800a518b68e5304c0937dd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f636f64652d73697a652f6e76696d2d6c75616c696e652f6c75616c696e652e6e76696d3f7374796c653d666c61742d737175617265" alt="code size"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/626a72ea58ecf1972a27235993041be5014e1ef417a65b4988a1ef0a13457219/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6e76696d2d6c75616c696e652f6c75616c696e652e6e76696d3f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/626a72ea58ecf1972a27235993041be5014e1ef417a65b4988a1ef0a13457219/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6e76696d2d6c75616c696e652f6c75616c696e652e6e76696d3f7374796c653d666c61742d737175617265" alt="license"&gt;&lt;/a&gt;
&lt;a href="https://buymeacoffee.com/shadmansalj" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ad541f86521726ee2afc61b260dcb24d3a359f0bdd4f8f7ddff53456eba73b64/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275792532304d6525323061253230436f666665652d4637393431443f7374796c653d706c6173746963266c6f676f3d6275792d6d652d612d636f66666565266c6f676f436f6c6f723d7768697465" alt="Buy Me a Coffee"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A blazing fast and easy to configure Neovim statusline written in Lua.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lualine.nvim&lt;/code&gt; requires Neovim &amp;gt;= 0.7.&lt;/p&gt;
&lt;p&gt;For previous versions of neovim please use compatability tags for example
compat-nvim-0.5&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contributing&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Feel free to create an issue/PR if you want to see anything else implemented.
If you have some question or need help with configuration, start a &lt;a href="https://github.com/nvim-lualine/lualine.nvim/discussions" rel="noopener noreferrer"&gt;discussion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please read &lt;a href="https://github.com/nvim-lualine/lualine.nvim./CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; before opening a PR.
You can also help with documentation in the &lt;a href="https://github.com/nvim-lualine/lualine.nvim/wiki" rel="noopener noreferrer"&gt;wiki&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshots&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Here is a preview of what lualine can look like.&lt;/p&gt;
&lt;p&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/41551030/108650373-bb025580-74bf-11eb-8682-2c09321dd18e.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F41551030%2F108650373-bb025580-74bf-11eb-8682-2c09321dd18e.png"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/41551030/108650377-bd64af80-74bf-11eb-9c55-fbfc51b39fe8.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F41551030%2F108650377-bd64af80-74bf-11eb-9c55-fbfc51b39fe8.png"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/41551030/108650378-be95dc80-74bf-11eb-9718-82b242ecdd54.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F41551030%2F108650378-be95dc80-74bf-11eb-9718-82b242ecdd54.png"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/41551030/108650381-bfc70980-74bf-11eb-9245-85c48f0f154a.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F41551030%2F108650381-bfc70980-74bf-11eb-9245-85c48f0f154a.png"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/41551030/103467925-32372b00-4d54-11eb-88d6-6d39c46854d8.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F41551030%2F103467925-32372b00-4d54-11eb-88d6-6d39c46854d8.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Screenshots of all available themes are listed in &lt;a href="https://github.com/nvim-lualine/lualine.nvim./THEMES.md" rel="noopener noreferrer"&gt;THEMES.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those who want to break the norms, you can create custom looks for lualine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-lualine/lualine.nvimexamples/evil_lualine.lua" rel="noopener noreferrer"&gt;evil_lualine&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/13149513/113875129-4453ba00-97d8-11eb-8f21-94a9ef565db3.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F13149513%2F113875129-4453ba00-97d8-11eb-8f21-94a9ef565db3.png"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-lualine/lualine.nvimexamples/slanted-gaps.lua" rel="noopener noreferrer"&gt;slanted-gaps&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/13149513/143395518-f6d6f748-c1ca-491b-9dab-246d0a8cf23f.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F13149513%2F143395518-f6d6f748-c1ca-491b-9dab-246d0a8cf23f.png"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-lualine/lualine.nvimexamples/bubbles.lua" rel="noopener noreferrer"&gt;bubbles&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/20235646/131350468-fc556196-5f46-4bfe-a72e-960f6a58db2c.png"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F20235646%2F131350468-fc556196-5f46-4bfe-a72e-960f6a58db2c.png"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-lualine/lualine.nvimexamples/cosmicink.lua" rel="noopener noreferrer"&gt;cosmicink&lt;/a&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/125453388/423959036-c8d3e4ba-4997-42e9-a1bb-d5e2a444bbfd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDU2MTQwNzgsIm5iZiI6MTc0NTYxMzc3OCwicGF0aCI6Ii8xMjU0NTMzODgvNDIzOTU5MDM2LWM4ZDNlNGJhLTQ5OTctNDJlOS1hMWJiLWQ1ZTJhNDQ0YmJmZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNDI1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDQyNVQyMDQyNThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMjg0YWRiMzUyMDI4ZDcwZTNjOTRmZTIxMWVhMzY4OTRiYjRhZTQ2ZTFmNjM1NjY4MTkwM2QzNzRhNzk5M2ZlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.aS332gbS642Kkk1HyciazSA3q2-MF3QEAJMHO6ZrZBs"&gt;&lt;img width="700" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F125453388%2F423959036-c8d3e4ba-4997-42e9-a1bb-d5e2a444bbfd.png%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDU2MTQwNzgsIm5iZiI6MTc0NTYxMzc3OCwicGF0aCI6Ii8xMjU0NTMzODgvNDIzOTU5MDM2LWM4ZDNlNGJhLTQ5OTctNDJlOS1hMWJiLWQ1ZTJhNDQ0YmJmZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNDI1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDQyNVQyMDQyNThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMjg0YWRiMzUyMDI4ZDcwZTNjOTRmZTIxMWVhMzY4OTRiYjRhZTQ2ZTFmNjM1NjY4MTkwM2QzNzRhNzk5M2ZlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.aS332gbS642Kkk1HyciazSA3q2-MF3QEAJMHO6ZrZBs"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Performance compared to other plugins&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Unlike other statusline plugins, lualine loads only the components you specify, and nothing else.&lt;/p&gt;

&lt;p&gt;Startup time performance measured with an amazing plugin &lt;a href="https://github.com/dstein64/vim-startuptime" rel="noopener noreferrer"&gt;dstein64/vim-startuptime&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Times are measured with a…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nvim-lualine/lualine.nvim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Minha escolha para plugin de statusline. Simples, rápido e bem flexível.&lt;/p&gt;

&lt;h2&gt;
  
  
  #1
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nvim-telescope" rel="noopener noreferrer"&gt;
        nvim-telescope
      &lt;/a&gt; / &lt;a href="https://github.com/nvim-telescope/telescope.nvim" rel="noopener noreferrer"&gt;
        telescope.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Find, Filter, Preview, Pick. All lua, all the time.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;telescope.nvim&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://gitter.im/nvim-telescope/community?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4768045434e6ee57bdd36b11fcf554e88d207acd01e0b78a2ef3c04b2f8a7d25/68747470733a2f2f6261646765732e6769747465722e696d2f6e76696d2d74656c6573636f70652f636f6d6d756e6974792e737667" alt="Gitter"&gt;&lt;/a&gt;
&lt;a href="https://luarocks.org/modules/Conni2461/telescope.nvim" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4b597076c327f7a8f7005e116cdd17c5e936a7d2a8f99655b31f1c81468b6fc4/68747470733a2f2f696d672e736869656c64732e696f2f6c7561726f636b732f762f436f6e6e69323436312f74656c6573636f70652e6e76696d3f6c6f676f3d6c756126636f6c6f723d707572706c65" alt="LuaRocks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gaze deeply into unknown regions using the power of the moon.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What Is Telescope?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;telescope.nvim&lt;/code&gt; is a highly extendable fuzzy finder over lists. Built on the
latest awesome features from &lt;code&gt;neovim&lt;/code&gt; core. Telescope is centered around
modularity, allowing for easy customization.&lt;/p&gt;
&lt;p&gt;Community driven builtin &lt;a href="https://github.com/nvim-telescope/telescope.nvim#pickers" rel="noopener noreferrer"&gt;pickers&lt;/a&gt;, &lt;a href="https://github.com/nvim-telescope/telescope.nvim#sorters" rel="noopener noreferrer"&gt;sorters&lt;/a&gt; and
&lt;a href="https://github.com/nvim-telescope/telescope.nvim#previewers" rel="noopener noreferrer"&gt;previewers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5eb234defa4dcc0145ba0d8e327a03869f83af8ac0def9007828e4835dfecd32/68747470733a2f2f692e696d6775722e636f6d2f5454546a6136742e676966"&gt;&lt;img src="https://camo.githubusercontent.com/5eb234defa4dcc0145ba0d8e327a03869f83af8ac0def9007828e4835dfecd32/68747470733a2f2f692e696d6775722e636f6d2f5454546a6136742e676966" alt="Preview"&gt;&lt;/a&gt;
For more showcases of Telescope, please visit the &lt;a href="https://github.com/nvim-telescope/telescope.nvim/wiki/Showcase" rel="noopener noreferrer"&gt;Showcase
section&lt;/a&gt; in the
Telescope Wiki&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Telescope Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#getting-started" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#customization" rel="noopener noreferrer"&gt;Customization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#default-mappings" rel="noopener noreferrer"&gt;Default Mappings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#pickers" rel="noopener noreferrer"&gt;Pickers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#previewers" rel="noopener noreferrer"&gt;Previewers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#sorters" rel="noopener noreferrer"&gt;Sorters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#layout-display" rel="noopener noreferrer"&gt;Layout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#themes" rel="noopener noreferrer"&gt;Themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#vim-commands" rel="noopener noreferrer"&gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#autocmds" rel="noopener noreferrer"&gt;Autocmds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#extensions" rel="noopener noreferrer"&gt;Extensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#api" rel="noopener noreferrer"&gt;API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#media" rel="noopener noreferrer"&gt;Media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvim-telescope/telescope.nvim/blob/master/doc/telescope_changelog.txt" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This section should guide you to run your first builtin pickers.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/neovim/neovim/releases/tag/v0.9.0" rel="noopener noreferrer"&gt;Neovim (v0.9.0)&lt;/a&gt; or the
latest neovim nightly commit is required for &lt;code&gt;telescope.nvim&lt;/code&gt; to work.
The neovim version also needs to be compiled with LuaJIT, we currently do not
support Lua5.1 because of some ongoing issues.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Required dependencies&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-lua/plenary.nvim" rel="noopener noreferrer"&gt;nvim-lua/plenary.nvim&lt;/a&gt; is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Suggested dependencies&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;BurntSushi/ripgrep&lt;/a&gt; is required for
&lt;code&gt;live_grep&lt;/code&gt; and &lt;code&gt;grep_string&lt;/code&gt; and…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nvim-telescope/telescope.nvim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Talvez o plugin mais essencial de todos hoje. Faça buscas por arquivo, texto e muito mais, numa velocidade absurda, com esse plugin fantástico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com o ecossistema Lua se desenvolvendo cada dia mais, &lt;a href="https://github.com/topics/neovim-plugin?l=lua" rel="noopener noreferrer"&gt;muitos plugins estão surgindo todos os dias&lt;/a&gt; e com certeza essa lista provavelmente precisará ser atualizada em um futuro próximo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faltou algum plugin nessa lista? Me conta ae nos comentários!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>plugins</category>
      <category>vim</category>
      <category>lua</category>
    </item>
    <item>
      <title>Criando plugins Lua para Neovim - Parte 3</title>
      <dc:creator>Ellison Leão</dc:creator>
      <pubDate>Mon, 09 May 2022 17:20:28 +0000</pubDate>
      <link>https://dev.to/ellisonleao/criando-plugins-lua-para-neovim-parte-3-3m40</link>
      <guid>https://dev.to/ellisonleao/criando-plugins-lua-para-neovim-parte-3-3m40</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Migrando do init.vim para o init.lua&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Para fechar nossa série de criação de plugins em Lua para o Neovim, vamos mudar um pouco o foco na criação de plugins para um tutorial de como podemos migrar toda nossa configuração do Neovim usando o tradicional Vimscript, para Lua.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mas por que Lua?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A decisão tomada pelo &lt;em&gt;core team&lt;/em&gt; de desenvolvimento do Neovim tem várias respostas diversas, que vão desde velocidade a facilidade de escrita, pelo fato de Lua ser uma linguagem bem extensível. Para entender as principais motivações, sugiro dar uma pausa no post e apreciar a talk “&lt;em&gt;We can have nice things&lt;/em&gt;”, do Justin M. Keyes, um dos atuais líderes de desenvolvimento do Neovim.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Bt-vmPC_-Ho"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  A migração
&lt;/h2&gt;

&lt;p&gt;Caso você ainda não conheça a estrutura de diretórios do Neovim, toda configuração vai em:&lt;/p&gt;

&lt;p&gt;Unix: &lt;code&gt;~/.config/nvim/init.vim&lt;/code&gt;&lt;br&gt;
Windows: &lt;code&gt;~/AppData/Local/nvim/init.vim&lt;/code&gt;&lt;br&gt;
ou, caso você queria um path de config customizado, onde &lt;code&gt;$XDG_CONFIG_HOME&lt;/code&gt; é definido, fica assim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$XDG_CONFIG_HOME/nvim/init.vim&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Esse arquivo é o ponto de entrada para as configurações customizadas do editor, desde cores, tamanhos de fonte, a instalação de plugins.&lt;/p&gt;

&lt;p&gt;No nosso caso, começaremos renomeando o arquivo &lt;code&gt;init.vim&lt;/code&gt; para &lt;code&gt;init.old&lt;/code&gt; e criando um novo arquivo chamado init.lua.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Por quê precisamos renomear o init.vim?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No neovim não é possível existir 2 pontos de entrada para as configurações, então você só poderá usar o &lt;code&gt;init.vim&lt;/code&gt; ou o mais recente, &lt;code&gt;init.lua&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para o nosso tutorial não ficar bastante extenso, iremos usar um &lt;code&gt;init.vim&lt;/code&gt; relativamente pequeno, explicando as principais configurações e como portá-las para a versão em lua.&lt;/p&gt;

&lt;p&gt;Mas primeiro precisamos relembrar como a API em Lua se comporta.&lt;/p&gt;
&lt;h2&gt;
  
  
  O namespace &lt;code&gt;vim&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Na implementação da API Lua para o Neovim, existe uma variável chamada &lt;code&gt;vim&lt;/code&gt;, que é o ponto de entrada para todas as funções da chamada “biblioteca padrão” Lua para o Neovim. Essas funções servem diferentes propósitos, mas o principal sendo a ponte entre o código lua e o editor. Algumas APIs incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.inspect&lt;/code&gt; - uma função de debug para inspecionar resultados. Geralmente em lua, os resultados vem em tables, e esses são difíceis de ser expostos em formato de “print”. Essa função “disseca” a váriável que você gostaria de expor de uma forma mais amigável.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.regex&lt;/code&gt; - Módulo que possibilita o uso de regexes diretamente no código Lua. Para mais info &lt;code&gt;:h vim.regex&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.api&lt;/code&gt; - Provavelmente o módulo mais importante dessa API. Aqui encontramos todas a funções para trabalhar com buffers, windows, chamar comandos do neovim, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.loop&lt;/code&gt; - Módulo que funciona como uma camada de abstração da &lt;code&gt;LibUV&lt;/code&gt;, a camada de &lt;em&gt;event-loop&lt;/em&gt; do Neovim. Pra quem quer usar concorrência, timers, etc, esse módulo é o caminho.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.lsp&lt;/code&gt; - Pra quem trabalhar diretamente na fantástica implementação nativa de um cliente LSP dentro do Neovim.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.treesitter&lt;/code&gt; - O módulo que expõe algumas funções para se trabalhar diretamente com o tree-sitter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;vim.keymap&lt;/code&gt; - Inclua ou remova keymaps do vim&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para este post, focaremos apenas na &lt;code&gt;vim.api&lt;/code&gt; e &lt;code&gt;vim.keymap&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Nosso arquivo init.lua
&lt;/h2&gt;

&lt;p&gt;Levando em consideração que nosso &lt;code&gt;init.vim&lt;/code&gt; tinha a seguinte cara:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="c"&gt;" Parte 1&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;colorcolumn&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;expandtab&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;tabstop&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;autoindent&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;incsearch&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;hlsearch&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;termguicolors&lt;/span&gt;

&lt;span class="c"&gt;" Parte 2&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:minha_config&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'valor'&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:algumnamespace&lt;/span&gt;#teste#variavel &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;

&lt;span class="c"&gt;" Parte 3&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;,&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Cmd&lt;span class="p"&gt;&amp;gt;:&lt;/span&gt;&lt;span class="k"&gt;noh&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;h&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Cmd&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;split&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
vnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;gv

&lt;span class="c"&gt;" Parte 4&lt;/span&gt;
autocmd &lt;span class="nb"&gt;BufEnter&lt;/span&gt; * echo &lt;span class="s2"&gt;"hello nvim"&lt;/span&gt;

&lt;span class="c"&gt;" Parte 5&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt; SayHello&lt;span class="p"&gt;()&lt;/span&gt;
  echohl WarningMsg
  echo &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;
  echohl
&lt;span class="k"&gt;endfunction&lt;/span&gt;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;separamos a migração em 4 partes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;options&lt;/li&gt;
&lt;li&gt;vars&lt;/li&gt;
&lt;li&gt;mappings&lt;/li&gt;
&lt;li&gt;autocmds&lt;/li&gt;
&lt;li&gt;functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para a parte 1, temos as seguintes funções da &lt;code&gt;vim.api&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vim.api.nvim_set_option&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vim.api.nvim_buf_set_option&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vim.api.nvim_win_set_option&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para facilitar a escrita, temos o atalho &lt;code&gt;vim.opt&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termguicolors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;   &lt;span class="c1"&gt;-- set termguicolors&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorcolumn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;       &lt;span class="c1"&gt;-- set colorcolumn=80&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expandtab&lt;/span&gt;              &lt;span class="c1"&gt;-- set expandtab&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tabstop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;              &lt;span class="c1"&gt;-- set tabstop=4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoindent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;-- set autoindent&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;incsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set incsearch&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hlsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;-- set hlsearch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Continuando com a &lt;strong&gt;parte 2&lt;/strong&gt;, temos uma declaração de uma variável global (escopo &lt;code&gt;g:&lt;/code&gt;). Na API, podemos utilizar as seguintes funções:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vim.api.nvim_set_var&lt;/code&gt; e suas variações (&lt;code&gt;vim.api.nvim_get_var&lt;/code&gt; e &lt;code&gt;vim.api.nvim_del_var&lt;/code&gt;)&lt;br&gt;
Aqui também temos uma versão “minimalista” com seus respectivo &lt;em&gt;meta-acessor&lt;/em&gt; (ver &lt;code&gt;:h lua-vim-variables&lt;/code&gt; para mais detalhes):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vim.g&lt;/code&gt; - Também funciona como um getter/setter&lt;/p&gt;

&lt;p&gt;Temos então nosso código lua, com a parte 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- parte 1&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termguicolors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;   &lt;span class="c1"&gt;-- set termguicolors&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorcolumn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;       &lt;span class="c1"&gt;-- set colorcolumn=80&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expandtab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set expandtab&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tabstop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;            &lt;span class="c1"&gt;-- set tabstop=4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoindent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;-- set autoindent&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;incsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set incsearch&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hlsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;-- set hlsearch&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 2&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minha_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;
 &lt;span class="c1"&gt;-- o `meta-acessor` é uma table, então podemos atribuir valores usando também os colchetes&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"algumnamespace#teste#variavel"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a &lt;strong&gt;parte 3&lt;/strong&gt; temos os &lt;em&gt;mappings&lt;/em&gt; e para isso temos 2 funções que podem ser utilizadas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vim.api.nvim_set_keymap&lt;/code&gt; - mappings que serão atribuídos para todos os buffers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vim.api.nvim_buf_set_keymap&lt;/code&gt; - mappings que serão exclusivos de algum buffer em particular&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para facilitar ainda mais, na versão 0.7 foi introduzida a API &lt;code&gt;vim.keymap&lt;/code&gt; (&lt;code&gt;:h lua-keymap&lt;/code&gt;), que deixa as coisas bem mais fáceis quando precisamos criar os mappings.&lt;/p&gt;

&lt;p&gt;Temos então, no nosso arquivo lua:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- parte 1&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termguicolors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;   &lt;span class="c1"&gt;-- set termguicolors&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorcolumn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;       &lt;span class="c1"&gt;-- set colorcolumn=80&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expandtab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set expandtab&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tabstop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;            &lt;span class="c1"&gt;-- set tabstop=4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoindent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;-- set autoindent&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;incsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set incsearch&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hlsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;-- set hlsearch&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 2&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minha_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;
 &lt;span class="c1"&gt;-- o `meta-acessor` é uma table, então podemos atribuir valores usando também os colchetes&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"algumnamespace#teste#variavel"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 3&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;,"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nmap &amp;lt;leader&amp;gt;, &amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- nnoremap &amp;lt;leader&amp;gt;h &amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;gv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- vnoremap &amp;lt; &amp;lt;gv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já para a parte 4, vamos adicionar os autocmd e augroups. Para isso, iremos usar a função &lt;code&gt;vim.api.nvim_create_autocmd&lt;/code&gt;, introduzida também na versão 0.7. Adicionando a parte 4 na nossa configuração, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- parte 1&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termguicolors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;   &lt;span class="c1"&gt;-- set termguicolors&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorcolumn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;       &lt;span class="c1"&gt;-- set colorcolumn=80&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expandtab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set expandtab&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tabstop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;            &lt;span class="c1"&gt;-- set tabstop=4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoindent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;-- set autoindent&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;incsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set incsearch&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hlsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;-- set hlsearch&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 2&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minha_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;
 &lt;span class="c1"&gt;-- o `meta-acessor` é uma table, então podemos atribuir valores usando também os colchetes&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"algumnamespace#teste#variavel"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 3&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;,"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nmap &amp;lt;leader&amp;gt;, &amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- nnoremap &amp;lt;leader&amp;gt;h &amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;gv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- vnoremap &amp;lt; &amp;lt;gv&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_autocmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"BufEnter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hello nvim"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a última parte, temos uma função vimscript que poderá ser portada utilizando a função vim.api.nvim_exec, que avalia um código vimscript contendo várias linhas. A assinatura da função é da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bloco_de_codigo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bloco_de_codigo&lt;/code&gt;: A string multiline ou não do bloco de código vimscript que será executado&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;retorno&lt;/code&gt; - &lt;code&gt;true&lt;/code&gt; caso deseje retornar o resultado string da execução do bloco, &lt;code&gt;false&lt;/code&gt; para retornar uma string vazia&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Temos então a versão final da config lua:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- parte 1&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termguicolors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;   &lt;span class="c1"&gt;-- set termguicolors&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorcolumn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;       &lt;span class="c1"&gt;-- set colorcolumn=80&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expandtab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set expandtab&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tabstop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;            &lt;span class="c1"&gt;-- set tabstop=4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoindent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;-- set autoindent&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;incsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set incsearch&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hlsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;-- set hlsearch&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 2&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minha_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;
 &lt;span class="c1"&gt;-- o `meta-acessor` é uma table, então podemos atribuir valores usando também os colchetes&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"algumnamespace#teste#variavel"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 3&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;,"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nmap &amp;lt;leader&amp;gt;, &amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- nnoremap &amp;lt;leader&amp;gt;h &amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;gv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- vnoremap &amp;lt; &amp;lt;gv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já para a parte 4, vamos adicionar os autocmd e augroups. Para isso, iremos usar a função &lt;code&gt;vim.api.nvim_create_autocmd&lt;/code&gt;, introduzida também na versão 0.7. Adicionando a parte 4 na nossa configuração, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- parte 1&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termguicolors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;   &lt;span class="c1"&gt;-- set termguicolors&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorcolumn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;       &lt;span class="c1"&gt;-- set colorcolumn=80&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expandtab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set expandtab&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tabstop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;            &lt;span class="c1"&gt;-- set tabstop=4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoindent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;-- set autoindent&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;incsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;-- set incsearch&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hlsearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;-- set hlsearch&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 2&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minha_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;
 &lt;span class="c1"&gt;-- o `meta-acessor` é uma table, então podemos atribuir valores usando também os colchetes&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"algumnamespace#teste#variavel"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"valor"&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 3&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;,"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nmap &amp;lt;leader&amp;gt;, &amp;lt;Cmd&amp;gt;:noh&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- nnoremap &amp;lt;leader&amp;gt;h &amp;lt;Cmd&amp;gt;split&amp;lt;CR&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;gv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- vnoremap &amp;lt; &amp;lt;gv&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 4&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_autocmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"BufEnter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hello nvim"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;-- parte 5&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;[[
function! SayHello()
  echohl WarningMsg
  echo "Hello World"
  echohl
endfunction
]]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Mostramos que, apesar de algumas limitações, portar uma configuração em vimscript para Lua está cada dia mais fácil com a API vigente. Para um exemplo de configuração mais extensa usando mais elementos da API Lua, visite a &lt;a href="https://github.com/ellisonleao/neovimfiles" rel="noopener noreferrer"&gt;minha configuração do neovim&lt;/a&gt;, deixa seu &lt;em&gt;star&lt;/em&gt; por lá também e caso tenha alguma dúvida, manda mensagem por aqui&lt;/p&gt;

&lt;p&gt;Lembrando que faço lives esporádicas na &lt;a href="https://twitch.tv/ellisonleao" rel="noopener noreferrer"&gt;Twitch&lt;/a&gt;! Caso deseje ver esse tipo de conteúdo ao vivo, não deixe de me seguir por lá e também acompanhar meu &lt;a href="https://twitter.com/ellisonleao" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Para ouvir
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Rv_a6rlRjZk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>vim</category>
      <category>plugins</category>
      <category>lua</category>
    </item>
    <item>
      <title>Criando plugins Lua para Neovim - Parte 2</title>
      <dc:creator>Ellison Leão</dc:creator>
      <pubDate>Mon, 09 May 2022 17:19:46 +0000</pubDate>
      <link>https://dev.to/ellisonleao/criando-plugins-lua-para-neovim-parte-2-3m1e</link>
      <guid>https://dev.to/ellisonleao/criando-plugins-lua-para-neovim-parte-2-3m1e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Um plugin para o mundo real&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Na segunda parte da nossa série vamos criar um plugin que poderá ser usado no dia-a-dia, onde iremos introduzir algumas funcionalidades legais do Neovim, como as floating windows e algumas funções da API lua.&lt;/p&gt;

&lt;p&gt;Vamos começar relembrando a estrutura de um plugin. Nosso novo plugin vai possuir a seguinte estrutura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;weather.nvim
├── lua
│  └── weather.lua
└── plugin
   └── weather.lua
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A idéia do plugin é mostrar a previsão do tempo atual em uma &lt;em&gt;floating window&lt;/em&gt;, sendo chamado a partir de um comando.&lt;/p&gt;

&lt;p&gt;Desenhando, vamos ter algo como:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9nz7gum7mq8jj6o3wmq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9nz7gum7mq8jj6o3wmq0.png" alt="weather.nvim" width="600" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura do módulo
&lt;/h2&gt;

&lt;p&gt;Nosso módulo weather.lua vai conter a seguinte estrutura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;create_command&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;-- vamos criar o comando :Weather aqui&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_window&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;-- aqui vamos criar a janela, um mapping para fechá-la e mostrar o tempo&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close_window&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;-- uma função para fechar a janela atual, que sera usada em um mapping&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Analisando uma por uma, temos:&lt;/p&gt;

&lt;h3&gt;
  
  
  create_command()
&lt;/h3&gt;

&lt;p&gt;A função &lt;code&gt;create_command()&lt;/code&gt; vai criar nosso comando customizado (command!). Aqui introduzimos o vim.cmd, que pode ser utilizada para chamar comandos Ex nativos do vim, mais conhecidos como os comandos :.&lt;/p&gt;

&lt;p&gt;defininos nosso comando como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_user_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Weather"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_window&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;com isso, nosso commando, &lt;code&gt;:Weather&lt;/code&gt;, vai chamar diretamente uma função do nosso módulo lua para esse plugin&lt;/p&gt;

&lt;h3&gt;
  
  
  create_window()
&lt;/h3&gt;

&lt;p&gt;a função &lt;code&gt;create_window()&lt;/code&gt; vai ser responsável por criar uma &lt;em&gt;floating window&lt;/em&gt; no canto superior direito da tela e mostrar o conteúdo do tempo. Para criá-la, precisamos seguir os seguintes passos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;criar um buffer “descartável”, que será usado para o conteúdo da janela&lt;/li&gt;
&lt;li&gt;criar as configurações da janela (tamanho de linhas, colunas, posicao x e y na tela, bordas)&lt;/li&gt;
&lt;li&gt;chamar o comando que “abre” a janela&lt;/li&gt;
&lt;li&gt;criar um mapping para poder fechar a janela&lt;/li&gt;
&lt;li&gt;criar o conteúdo do buffer, no nosso caso, o tempo atual.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para o passo 1, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_buf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos outra novidade também, o &lt;code&gt;vim.api&lt;/code&gt; , um conjunto de métodos para o neovim dentro do módulo lua vim. &lt;code&gt;nvim_create_buf&lt;/code&gt; aceita 2 parâmetros, se o buffer vai ser listado ou não (no nosso caso não, por isso o &lt;code&gt;false&lt;/code&gt;) e se ele será descartável ou não (no nosso caso sim, por isso o &lt;code&gt;true&lt;/code&gt;). Para saber mais sobre o método, chame &lt;code&gt;:help nvim_create_buf&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;O método retorna o id do novo buffer criado, e a informação desse id é importante porque ele será usado para fazer referência em outras funções mais pra frente. Note aqui também que não estamos criando a váriavel buf dentro desse método, mas uma variável “global” do módulo lua que também será usada por outros métodos dentro desse módulo.&lt;/p&gt;

&lt;p&gt;Para o passo 2, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_get_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"columns"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_get_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"lines"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;win_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;math.ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;win_height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;math.ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;x_pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;y_pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;win_width&lt;/span&gt;

  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;win_opts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"minimal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;relative&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"editor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;win_width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;win_height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x_pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y_pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;border&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"single"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primeiro pegamos as variáveis de total de linhas e colunas do buffer atual para fazer um cálculo proporcional do tamanho da nossa floating window.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;relative="editor"&lt;/code&gt; é a opção que vai dizer que iremos usar as coordenadas x e y globais, relativas ao editor, tendo tamanho inicial (0,0) até (linhas-1, colunas-1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;style = "minimal"&lt;/code&gt;, vai deixar nossa janela com configurações mínimas, removendo a maioria das opções de UI. Isso é essencial para janelas temporárias, onde não iremos precisar fazer nenhuma alteração.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;width&lt;/code&gt; e &lt;code&gt;height&lt;/code&gt; é o calculo proporcional do tamanho da janela, adicionando um padding para que ela não fique simplesmente “grudada” no canto superior direito da tela. Cada unidade de medida corresponde a um caracter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;row&lt;/code&gt; e &lt;code&gt;col&lt;/code&gt; vai setar a posição x e y da nossa janela&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;border&lt;/code&gt; vai passar a config da nossa borda da floating window, no caso &lt;code&gt;single&lt;/code&gt; representa linhas simples&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para o passo 3, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;win&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_open_win&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;win_opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui chamamos a &lt;code&gt;vim.api.nvim_open_win&lt;/code&gt;, o método que vai abrir nossa janela, usando o buffer que criamos, com a configuração que passamos. Nos parâmetros, podemos também ver o true, que vai setar a janela como a atual. Vamos precisar disso para chamar o comando que gera o conteúdo da mesma. Note também que nossa variável win também é “global”, pois vamos precisar da informação dela para criar os mappings que vão poder fechá-la.&lt;/p&gt;

&lt;p&gt;Para o passo 4, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"q"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close_window&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noremap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;silent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usamos a nova api introduzida no neovim 0.7 &lt;code&gt;vim.keymap&lt;/code&gt; para criar um &lt;code&gt;nnoremap&lt;/code&gt; local (somente para o buffer criado), que basicamente irá chamar outro método do nosso módulo, para fechar a janela. Iremos explicar o método &lt;code&gt;close_window()&lt;/code&gt; mais pra frente.&lt;/p&gt;

&lt;p&gt;Como parâmetros, primeiros temos o modo, no caso o modo &lt;code&gt;Normal&lt;/code&gt;, depois o comando que esse mapping irá chamar e finalmente temos uma table com possíveis opções para o mapping, como noremap, silent, etc. No nosso caso, só queremos que o comando não coloque nenhum output na tela e não utilize nenhum outro mapping com a letra q, caso haja algum.&lt;/p&gt;

&lt;p&gt;Finalmente para o passo 5, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"curl https://wttr.in/?0"&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;termopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui fazemos uma ponte entre lua e vimscript, chamando a função &lt;code&gt;termopen&lt;/code&gt;, que basicamente abre um terminal emulado dentro do neovim com o resultado do comando &lt;code&gt;curl&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  close_window()
&lt;/h3&gt;

&lt;p&gt;A função close window no nosso caso só vai ser uma chamada direta para o &lt;code&gt;nvim_win_close&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_win_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;win&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui passamos a variável &lt;code&gt;win&lt;/code&gt;, que é o &lt;strong&gt;id&lt;/strong&gt; da nossa janela criada e true fala que queremos forçar o fechamento da janela.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com isso, nosso primeiro plugin “para o mundo real”, está pronto. A versão do código para esse post pode ser vista clicando &lt;a href="https://github.com/ellisonleao/criando-plugins-lua-neovim/tree/master/parte-2" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para ver a versão completa do plugin, com mais customizações, clique &lt;a href="https://github.com/ellisonleao/weather.nvim" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; e já manda o star!. Para a parte 3 da nossa série, vamos mostrar como portar nossa config do neovim em vimscript totalmente para Lua. Não deixem de acompanhar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Para ouvir
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/oKz-YAs6ZsA"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

</description>
      <category>neovim</category>
      <category>vim</category>
      <category>plugins</category>
      <category>lua</category>
    </item>
    <item>
      <title>Criando plugins Lua para Neovim - Parte 1</title>
      <dc:creator>Ellison Leão</dc:creator>
      <pubDate>Mon, 09 May 2022 17:17:38 +0000</pubDate>
      <link>https://dev.to/ellisonleao/criando-plugins-lua-para-neovim-parte-1-3dll</link>
      <guid>https://dev.to/ellisonleao/criando-plugins-lua-para-neovim-parte-1-3dll</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Uma série mostrando um passo a passo na criação de plugins Lua para o Neovim&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Desde que migrei para o Neovim em 2019, depois passar 8 anos usando vim com seus plugins fantásticos, comecei a descobrir as motivações que levaram os core devs a criar esse fork.&lt;/p&gt;

&lt;p&gt;Podemos ficar um bom tempo aqui falando sobre elas (e você pode ver uma palestra muito interessante sobre &lt;a href="https://www.youtube.com/watch?v=Bt-vmPC_-Ho" rel="noopener noreferrer"&gt;clicando aqui&lt;/a&gt;), mas o intuito desde texto é apenas destacar uma delas, e a que eu considero uma das mais importantes: &lt;strong&gt;Lua&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando você instala o Neovim hoje, a linguagem Lua, ou mais especificamente o &lt;strong&gt;&lt;em&gt;LuaJIT&lt;/em&gt;&lt;/strong&gt;, uma versão otimizada da linguagem está inserida no core e você consegue usá-la diretamente num vimscript ou chamando um arquivo lua diretamente. Mas como isso acontece?&lt;/p&gt;

&lt;p&gt;Esse texto vai fazer parte de uma série onde vou mostrar como é possível criar seu primeiro plugin para o Neovim usando puramente Lua. Primeiro vamos voltar um pouco e mostrar a estrutura de um plugin convencional para o Vim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/seu-plugin/
|--plugin/
|--ftplugin/
|--after/
|--autoload/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para nossa série, iremos focar na pasta &lt;code&gt;plugin&lt;/code&gt; por enquanto.&lt;/p&gt;

&lt;p&gt;A pasta &lt;code&gt;plugin&lt;/code&gt; é usada como ponto de entrada no carregamento do vim. Lá é o lugar onde irão viver os plugins globais. Guarde essa informação pois ela vai ser importante na criação do nosso plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando nosso hello-world.nvim plugin
&lt;/h2&gt;

&lt;p&gt;TL;DR : Código para o plugin da primeira parte &lt;a href="https://github.com/ellisonleao/criando-plugins-lua-neovim" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como não utilizaremos de nenhum gerenciador de plugins nessa série, vamos facilitar um pouco o carregamento do mesmo e iremos criar os arquivos diretamente no &lt;a href="https://neovim.io/doc/user/options.html#'runtimepath'" rel="noopener noreferrer"&gt;runtimepath&lt;/a&gt; do neovim, mais precisamente em&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.local/share/nvim/site/plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso essa pasta não exista em seu sistema, crie com&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir -p ~/.local/share/nvim/site/plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nosso plugin irá utilizar a versão 0.7 (stable até o momento) do neovim.&lt;/p&gt;

&lt;p&gt;Dentro da pasta plugin crie a pasta &lt;code&gt;hello-world.nvim&lt;/code&gt; e a subpasta &lt;code&gt;plugin&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir -p hello-world.nvim/plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Desde a versão 0.6, podemos executar scripts lua diretamente da pasta &lt;code&gt;plugin&lt;/code&gt;. Quando falamos no início do post sobre essa pasta e o valor especial que ela tem, estamos falando justamente sobre o ponto de partida do plugin. Se o seu plugin precisa ser carregado toda vez que o neovim abre, o código do seu projeto precisa ser inicializado ou feito diretamente na pasta &lt;code&gt;plugin&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Dentro da pasta, crie o arquivo &lt;code&gt;hello-world.lua&lt;/code&gt; e digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_user_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"HelloWorld"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hello world lua!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos ver o uso do &lt;code&gt;vim.cmd&lt;/code&gt;, uma ponte entre lua e a chamada da função ou de um comando vimscript. Iremos explicar mais exemplos dele e outras APIs, como o &lt;code&gt;vim.api&lt;/code&gt;, a mais importante delas.&lt;/p&gt;

&lt;p&gt;Agora você pode reiniciar o editor e testar o novo plugin. Depois de fechar e abrir, digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:HelloWorld
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e poderá ver no prompt de comando a mensagem&lt;/p&gt;

&lt;p&gt;&lt;code&gt;hello world lua!&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Esta é só a ponta do iceberg do que podemos fazer com Lua no neovim hoje. Nos próximos posts da série iremos abordar como criar floating windows, configurar seu Neovim para usar o LSP nativo (&lt;del&gt;e fugir daquele plugin javascript que você deseja tanto&lt;/del&gt;) e no fim da série vou explicar como migrar seu vimfiles totalmente para lua usando o máximo de plugins puramente feitos em lua no dia-a-dia (sim, isso já é possível!)&lt;/p&gt;

&lt;p&gt;Aguardem os próximos posts e não esqueçam de seguir nossas redes&lt;/p&gt;

&lt;h2&gt;
  
  
  Links Úteis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://neovim.io/doc/user/lua.html" rel="noopener noreferrer"&gt;Documentação Oficial Neovim e Lua&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Para ouvir
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-xKgOYIGXo4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>plugins</category>
      <category>vim</category>
      <category>lua</category>
    </item>
    <item>
      <title>Não eram apenas copos rosas</title>
      <dc:creator>Ellison Leão</dc:creator>
      <pubDate>Wed, 27 Apr 2022 22:12:21 +0000</pubDate>
      <link>https://dev.to/ellisonleao/nao-eram-apenas-copos-rosas-1jib</link>
      <guid>https://dev.to/ellisonleao/nao-eram-apenas-copos-rosas-1jib</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Um relato sobre minha primeira Global Game Jam&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Nos dias 27,28 e 29 de Janeiro aconteceu a Global Game Jam 2012 , o maior evento de game jam do mundo, que reuniu cerca de 10684 participantes espalhados por 42 países e mais de 2000 jogos realizados.&lt;/p&gt;

&lt;p&gt;Curitiba foi, esse ano, a segunda maior sede do mundo, com 245 inscritos e só perdeu pra Dinamarca, que teve 290 inscritos. Nosso grupo foi composto por 5 pessoas ( 3 programadores e 2 artistas ). Sem nome inicialmente, chegamos por volta das 17h na sexta feira e já escolhemos um lugar para colocar as tralhas que iríamos usar durante todo o final de semana ( salgados, doces, energéticos, etc..). Às 18h começava o keynote oficial, com palestras de vários nomes da comunidade mundial dos jogos e o tema ainda não tinha sido divulgado.&lt;/p&gt;

&lt;p&gt;Uma expectativa pairava o pessoal que estava lá sedendo pela vontade de criar coisas novas e divertidas. Após o keynote de Will Wright, o tema surgira e todos que estavam lá ficaram abismados com um tema tão diferente. Pela primeira vez, o tema da Global Game Jam não era uma palavra e sim uma imagem, Ouroboros.&lt;/p&gt;

&lt;p&gt;Infinito, ciclo da vida, morte e ressureição. Esses foram as palavras que palpitavam na grande sala onde os grupos se reuniam para pensar como seria fazer um jogo com estes temas. Era a hora do brainstorm inicial. Nosso grupo ficou cerca de 2 horas jogando idéias num papel, misturando vários elementos e mecânicas, até que, chegamos num consenso.&lt;/p&gt;

&lt;p&gt;Contaríamos a saga de um alquimista em busca da vida eterna. Na história, o alquimista Frangoi consegue transitar em 2 mundos paralelos (real e espiritual) e tem de percorrer um longo percurso, resolvendo enigmas e combatendo inimigos pelo caminho. Idéias concretizadas, fomos para o planejamento de o que daria pra fazer nessas 48 horas. Uns achavam que não sairíamos de um concept, outros já achavam que dava pra completar uma fase inteira. E ficou na base do “vamo ver no que vai dar”. Começando as atividades, resolvemos utilizar como ferramentas, o excelente framework MelonJS, já que tínhamos resolvido fazer nosso jogo em HTML5.&lt;/p&gt;

&lt;p&gt;Vamos aos rabiscos. Nossos excelentes artistas &lt;a href="https://twitter.com/rathaelos" rel="noopener noreferrer"&gt;Rafael Françoi&lt;/a&gt; e Carlos Iubel começaram a botar a mão na massa ainda a noite e lá por volta das 01 da manhã do sábado já tinhamos alguns concepts criados.&lt;/p&gt;

&lt;p&gt;Realmente fiquei impressionado na primeira vez que já tínhamos alguns concepts do jogo em tão pouco tempo. Eu , Carlos (o programador) e o Pedro já estávamos preparando um esqueleto do código e conseguimos deixar a base do jogo bem sólida pra começar a introduzir a mecância que tínhamos atribuído pro jogo. Nessa hora, o sono ja começou a bater e Carlos pediu um timeout e foi dormir. Passadas mais umas 2 horas (provavelmente já passava das 3 da manhã) foi a vez do Pedro e do Carlos (o artista) de irem tirar uma soneca.&lt;/p&gt;

&lt;p&gt;Ficariam de guarda eu e o Rafael que já estava super empolgado criando um concept mais bem feito do velhinho Frangoi. Sábado já estava claro e retomamos as atividades. O dia estava correndo bem e tanto código como arte estavam evoluíndo bem. Conseguimos montar um protótipo jogável ainda no começo da tarde de sábado. Agora era integrar o restante da arte e partir para os testes de balanceamento. Carlos ( o programador ) montou um mapa base e começamos a pensar nos possíveis desafios que o jogo poderia ter (e que o tempo nos permitisse fazer ).&lt;/p&gt;

&lt;p&gt;Já era noite e alguns bugs começaram a aparecer. Víamos que a madrugada seria bem longa, pois a maioria desses bugs eram críticos e teriam de ser resolvidos o mais rápido possível. Felizmente, depois de muita pizza e energético tivemos força e conseguimos resolvê-los. Agora era terminar as últimas fases de polishing e partir para o abraço. Já era Domingo, por volta das 12:00 e tínhamos finalizado nosso protótipo do jogo. Como estávamos felizes. Nem o cansaço, dores musculares e outras coisas nocivas atrapalhariam aquela sensação de dever cumprido. Entregamos o jogo antes do prazo e após uma rápida apresentação no auditório da PUC, pudemos dar como finalizada a nossa primeira participação em uma Global Game Jam.&lt;/p&gt;

&lt;p&gt;O Fuscshia Team (Nome dado de última hora pra equipe, devido aos nossos copos descartáveis rosas usados jam) nasceu nesse evento e espera dar continuação a esse jogo que até mesmo com um protótipo já conseguiu ficar entre os 3 jogos mais votados da GGJ Curitiba e ser citado no blog e galeria oficial do framework MelonJS, fatos estes que nos deixam cada vez mais motivados a finalizar uma versão jogável do protótipo.&lt;/p&gt;

&lt;p&gt;Entrevista com desenvolvedores:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nzl6Bmtfjhk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;O jogo:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/DXE6YxewXaM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Este texto foi publicado originalmente em 2012 e repostado em homenagem ao nosso querido amigo &lt;a href="https://www.linkedin.com/in/pedrobueno83/" rel="noopener noreferrer"&gt;Pedro Bueno&lt;/a&gt;, que infelizmente nos deixou em 2020. Sentiremos sua falta, irmão.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F182ol6eqp6f3rbrvgmo5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F182ol6eqp6f3rbrvgmo5.jpg" alt="Fuschia Team em 2020" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ggj</category>
      <category>globalgamejam</category>
      <category>pucpr</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
