Vimscript vs Lua

    Definição curta: Comparação lado a lado entre Vimscript e Lua para configuração do Neovim. Quando usar cada linguagem.

    Antes de começar

    O que você vai aprender

    • Explicar Comparação básica com suas palavras
    • Explicar Variáveis com suas palavras
    • Explicar Options com suas palavras
    • Localizar o assunto desta página no :help do seu próprio Neovim

    O que é

    O Neovim suporta ambas linguagens. Vimscript é a linguagem histórica do Vim, enquanto Lua é a linguagem moderna recomendada para configurações.

    Comparação básica

    ConceitoVimscriptLua
    Variávelletlocal / vim.g
    Funçãofunctionfunction
    Optionset numbervim.opt.number
    Keymapnnoremapvim.keymap.set
    Condicionalifif
    Loopforfor

    Variáveis

    " Vimscript
    let g:mapleader = " "
    let my_var = "value"
    let b:buffer_var = "buffer local"
    let w:window_var = "window local"
    -- Lua
    vim.g.mapleader = " "
    local my_var = "value"
    vim.b.buffer_var = "buffer local"
    vim.w.window_var = "window local"

    Options

    " Vimscript
    set number
    set relativenumber
    set expandtab
    set tabstop=2
    set shiftwidth=2
    -- Lua
    vim.opt.number = true
    vim.opt.relativenumber = true
    vim.opt.expandtab = true
    vim.opt.tabstop = 2
    vim.opt.shiftwidth = 2

    Keymaps

    " Vimscript
    nnoremap <leader>w :w<CR>
    vnoremap <leader>y "+y
    inoremap jk <Esc>
    -- Lua
    vim.keymap.set("n", "<leader>w", ":w<CR>", { silent = true })
    vim.keymap.set("v", "<leader>y", '"+y', { silent = true })
    vim.keymap.set("i", "jk", "<Esc>", { silent = true })

    Funções

    " Vimscript
    function! MyFunction()
      echo "Hello"
    endfunction
    
    function! MyFunc(arg)
      return a:arg * 2
    endfunction
    -- Lua
    local function my_function()
      print("Hello")
    end
    
    local function my_func(arg)
      return arg * 2
    end

    Condicionais

    " Vimscript
    if x > 0
      echo "positive"
    elseif x < 0
      echo "negative"
    else
      echo "zero"
    endif
    -- Lua
    if x > 0 then
      print("positive")
    elseif x < 0 then
      print("negative")
    else
      print("zero")
    end

    Diagrama de decisão

    flowchart TD
        A{Configurar Neovim?} --> B{Configuração simples?}
        B -->|Sim| C["Use Lua\n(init.lua)"]
        B -->|Não| D{Depurar Vimscript?}
        D -->|Sim| E["Vimscript\n(depuração)"]
        D -->|Não| F["Lua é recomendado\n(performance)"]

    Quando usar cada um

    SituaçãoRecomendado
    Configuração geralLua
    Plugin configLua
    DepuraçãoVimscript (comando)
    Comandos ExAmbos
    Filetype pluginsVimscript

    Você aprendeu

    • Comparação básica
    • Variáveis
    • Options
    • Keymaps
    • Funções

    Perguntas para reflexão

    1. O que Comparação básica resolve, e o que se perde sem isso?
    2. O que Variáveis resolve, e o que se perde sem isso?
    3. O que Options resolve, e o que se perde sem isso?
    4. Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?

    Artigos relacionados

    Veja também

    Referências