An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
Configurando Neovim com Fennel
Tudo comea na Lua
Uma das funcionalidades mais aguardadas e amadas pelos usurios do Neovim o suporte lua.
Esse suporte veio, oficialmente, na verso 0.5 do Neovim, o que passou a permitir que os usurios pudessem jogar no lixo deixar de usar seus init.vim
e configurar o Neovim usando um belo init.lua
.
E uma feliz consequncia disso que, no s podemos usar lua, mas podemos usar pacotes do ecossistema lua e linguagens que compilam
para lua
Hello, Peter Fennel
Fennel uma dessas linguagens que compilam para lua, o que significa que voc vai escrever cdigo fennel, o compilador vai gerar cdigo lua, que vai ser lido e executado pelo Neovim.
Fennel -> Lua -> Neovim
Mas, por que Fennel?
Essa uma pergunta bastante comum que as pessoas fazem quando eu digo que uso Fennel.
Na verdade, uma pergunta comum que as pessoas fazem para todos que usam Fennel, pelo que parece, porque no site oficial do Fennel tem a resposta para, exatamente, essa pergunta.
Vou resumir a resposta deles em alguns pontos.
Fennel menos propenso alguns erros
Lua uma tima linguagem, porm existem alguns pontos que podem facilitar a ocorrncia de erros.
Um dos pontos a facilidade com que voc acessa ou altera uma varivel global.
Se voc criar uma varivel sem a palavra chave local
ela j uma varivel global. E para acessar o valor dessa varivel, basta digitar o nome da varivel, o que pode causar comportamentos inesperados, por exemplo:
-- settings.luamyVar = 'this is global'-- init.lualocal myVal = 'local'print('this is the value of local: ' . myVar)
Repare que, por um erro de digitao da palavra myVal
, trocando o l
pelo r
acabamos acessando o valor de uma varivel global definida em outro lugar.
Erros como esse podem ser difceis de descobrir.
Fennel previne erros como esse permitindo que o acesso variveis globais sejam feitos apenas atravs da tabela _G
.
Ao tentar simular o caso acima em Fennel, o compilador nos alertar que a varivel myVar
no existe.
Outro ponto a falta de validao do nmero de argumentos de uma funo, ou seja, se voc tem uma funo que espera receber 3 parmetros e voc s passa 2, o cdigo vai rodar sem nenhuma indicao de erro.
Em Fennel, podemos usar a palavra chave lambda
para criar funes que validam o nmero de parmetros.
(((Sintaxe) do) Lisp!)
Esse um ponto um pouco polmico porque algumas pessoas no gostam da sintaxe do Lisp, mas ela traz alguns benefcios:
- Tudo uma expresso, ou seja, no temos statements
- Quando lidamos com operadores, no h ambiguidade do que vem primeiro, no temos "precedncia de operadores". (Em lua, por exemplo,
A or B and C or D
)
Esses pontos tornam Fennel uma linguagem muito simples de se programar e de se dar manuteno.
Modernidade e facilidades
Alm dos pontos mencionados acima, vale a pena ressaltar algumas funcionalidades interessantes que o Fennel traz para facilitar a nossa vida.
Com Fennel, temos desestruturao, pattern matching, macros e mais.
Desestruturao
-- Lualocal var = require'module'.varlocal var2 = require'module'.var2
; Fennel(local {: var : var2} (require :module))
Pattern matching
-- Lualocal function get_desc(key) if (key == "k1") then return "Key 1" elseif (key == "k2") then return "Key 2" elseif (key == "k3") then return "Key 3" else return nilend
; Fennel(lambda get-desc [key] (match key :k1 "Key 1" :k2 "Key 2" :k3 "Key 3"))
Como comear a usar
Agora que eu te convenci (pelo menos espero) a usar fennel, vamos ver como comear a usa-lo para configurar o Neovim!
Vamos usar dois plugins para isso:
tangerine
udayvir-singh / tangerine.nvim
Sweet Fennel integration for Neovim
About
Tangerine provides a painless way to add fennel to your config.
Features
- BLAZING fast, compile times in milliseconds
- 200% support for interactive evaluation
- Control over when and how to compile
- Natively loads
nvim/init.fnl
Comparison to other plugins
HOTPOT
- Abstracts too much away from user.
- Hooks onto lua package searchers to compile [harder to debug]
ANISEED
- Excessively feature rich to be used for dotfiles.
- Blindly compiles all files that it founds, resulting in slow load times.
Installation
- Create file
plugin/0-tangerine.lua
to bootstrap tangerine:
-- ~/.config/nvim/plugin/0-tangerine.lua-- pick your plugin manager, default [standalone]local pack = "tangerine" or "packer" or "paq"local function bootstrap (url) local name = url:gsub(".*/", "") local path = vim.fn
hibiscus
udayvir-singh / hibiscus.nvim
Flavored Fennel Macros for Neovim
Hibiscus.nvim
Highly opinionated macros to elegantly write your neovim config.
Companion library for tangerinebut it can also be used standalone.
Rational
- Syntactic eye candy over hellscape of lua api
- Provides missing features in both fennel and nvim api
Installation
- Create file
plugin/1-tangerine.lua
to bootstrap hibiscus:
-- ~/.config/nvim/plugin/tangerine.lua-- pick your plugin manager, default [standalone]local pack = "tangerine" or "packer" or "paq"local function bootstrap (url) local name = url:gsub(".*/", "") local path = vim.fn.stdpath [[data]] .. "/site/pack/".. pack .. "/start/" .. name if vim.fn.isdirectory(path) == 0 then print(name .. ": installing in data dir...") vim.fn.system {"git", "clone", "--depth"
O tangerine integra de maneira bem transparente o Fennel com o Neovim, compilando os arquivos fennel para lua e trazendo umas ferramentas interessantes.
O hibiscus traz vrias macros relacionadas ao ecossistema do Neovim que nos ajudam a escrever menos
O primeiro passo criar o arquivo ~/.config/nvim/plugin/0-tangerine.lua
com o contedo:
local function bootstrap (name, url, path) if vim.fn.isdirectory(path) == 0 then print(name .. ": installing in data dir...") vim.fn.system {"git", "clone", "--depth", "1", url, path} vim.cmd [[redraw]] print(name .. ": finished installing") endendbootstrap ( "tangerine.nvim", "https://github.com/udayvir-singh/tangerine.nvim", vim.fn.stdpath "data" .. "/site/pack/packer/start/tangerine.nvim")bootstrap ( "hibiscus.nvim", "https://github.com/udayvir-singh/hibiscus.nvim", vim.fn.stdpath "data" .. "/site/pack/packer/start/hibiscus.nvim")require'tangerine'.setup{ compiler = { verbose = false, hooks = { "onsave", "oninit" } }}
Essa configurao supe que voc usa o Packer para gerenciar seus plugins, se voc no usa, verifique no repositrio do tangerine como instalar no seu gerenciador.
Com isso, ao reiniciar o Neovim, o tangerine e o hibiscus vo ser baixados e inicializados.
Isso significa que voc j pode comear a configurar o Neovim em Fennel, criando um arquivo ~/.config/nvim/init.fnl
Quando voc salvar esse arquivo, o tangerine j vai compila-lo e gerar o arquivo lua para ser carregado pelo Neovim, no sendo necessrio fazer nenhuma configurao adicional para isso.
Dicas para comear com Fennel
A documentao sua amiga!
As duas melhores fontes para entender como o Fennel funciona o tutorial e a referncia do Fennel.
Vou adiantar algumas coisas simples para voc j entender o bsico.
Parnteses
Voc vai ver muitos parnteses no Fennel, eles servem para delimitar onde uma expresso comea e termina.
Por exemplo, para declarar uma varivel no escopo local, em lua, voc usa a palavra chave local
, j em fennel, voc chama a funo local
:
(local myVar "myValue")
Se o valor da varivel resultado de uma concatenao, no vamos usar o operador ..
, mas sim, a funo ..
:
(local name "Fennel")(local myVar (.. "Hello, " name))
Resumindo, toda a funo que voc chamar, voc vai colocar entre parnteses.
API do Neovim
Tudo o que voc faz com lua, voc faz com fennel, ento a mesma chamada que voc faz para uma API do Neovim em lua, voc vai fazer em Fennel.
-- Luaprint(vim.fn.stdpath"config")
(print (vim.fn.stdpath :config))
:symbol
Voc j deve ter reparado que, em alguns casos, eu escrevi algumas strings em lua usando :
em fennel (se no reparou, basta olhar para o ltimo exemplo)
Isso, basicamente, outro jeito de escrever uma string. No entanto, para escrever nesse formato, a string no pode conter espaos.
(= :str "str") ; true
Agora contigo
A partir daqui, voc j est preparado para se divertir usando Fennel (e divertido mesmo).
Qualquer dvida, pergunta aqui nos comentrios!
Happy Vimming!
Original Link: https://dev.to/dmass/configurando-neovim-com-fennel-489o
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To