<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Lua on Cesar Gimenes</title><link>https://crg.eti.br/tags/lua/</link><description>Recent content in Lua on Cesar Gimenes</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>crg@crg.eti.br (Cesar Gimenes)</managingEditor><webMaster>crg@crg.eti.br (Cesar Gimenes)</webMaster><lastBuildDate>Sat, 15 Feb 2025 18:31:26 -0300</lastBuildDate><atom:link href="https://crg.eti.br/tags/lua/index.xml" rel="self" type="application/rss+xml"/><item><title>LQS: A Practical Tool for Testing and Debugging SQL</title><link>https://crg.eti.br/pub/lqs-uma-ferramenta-prtica-para-testar-sql/</link><pubDate>Sat, 15 Feb 2025 18:31:26 -0300</pubDate><author>crg@crg.eti.br (Cesar Gimenes)</author><guid>https://crg.eti.br/pub/lqs-uma-ferramenta-prtica-para-testar-sql/</guid><description>&lt;p>It&amp;rsquo;s very common to need to embed SQL code strings in the source of other languages. The problem is that SQL is an interpreted language, so it can contain errors that we only notice at runtime.&lt;/p>
&lt;h2 id="testing-sql">Testing SQL&lt;/h2>
&lt;p>LQS was created to work together with Neovim and allow you to test SQL while editing, without having to copy and paste into another file or SQL client.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Test SQL with embedded metadata:&lt;/strong>
Insert configurations directly in your SQL script, such as the connection string, JSON output option, or even an extra query to generate parameters.
Example:&lt;/p></description></item><item><title>Sorting and Removing Duplicate Lines with Neovim</title><link>https://crg.eti.br/pub/nvim-sort/</link><pubDate>Sun, 09 Feb 2025 14:32:33 -0300</pubDate><author>crg@crg.eti.br (Cesar Gimenes)</author><guid>https://crg.eti.br/pub/nvim-sort/</guid><description>&lt;p>Good organization makes code easier to read. Disorganized lists make it difficult to maintain a project, and they also give your code an unprofessional look.&lt;/p>
&lt;p>These two functions sort and remove duplicate lines in selected text blocks in &lt;em>Neovim&lt;/em>.&lt;/p>
&lt;p>The &lt;code>sort_lines&lt;/code> function sorts the selected lines:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-lua" data-lang="lua">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">function&lt;/span> &lt;span style="color:#6639ba">sort_lines&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> start_pos &lt;span style="color:#0550ae">=&lt;/span> vim.fn&lt;span style="color:#1f2328">.&lt;/span>getpos&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#39;&amp;lt;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> end_pos &lt;span style="color:#0550ae">=&lt;/span> vim.fn&lt;span style="color:#1f2328">.&lt;/span>getpos&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#39;&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> start_line &lt;span style="color:#0550ae">=&lt;/span> start_pos&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0550ae">2&lt;/span>&lt;span style="color:#1f2328">]&lt;/span> &lt;span style="color:#0550ae">-&lt;/span> &lt;span style="color:#0550ae">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> end_line &lt;span style="color:#0550ae">=&lt;/span> end_pos&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0550ae">2&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> lines &lt;span style="color:#0550ae">=&lt;/span> vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_buf_get_lines&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> start_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> table.sort&lt;span style="color:#1f2328">(&lt;/span>lines&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_buf_set_lines&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> start_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">false&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">end&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>sort_and_uniq_lines&lt;/code> function sorts and removes duplicate lines:&lt;/p></description></item><item><title>Bookmarks in Neovim</title><link>https://crg.eti.br/pub/nvim-bookmarks/</link><pubDate>Sun, 09 Feb 2025 11:52:14 -0300</pubDate><author>crg@crg.eti.br (Cesar Gimenes)</author><guid>https://crg.eti.br/pub/nvim-bookmarks/</guid><description>&lt;p>I go through many files when I work, especially when debugging or tracing behaviors. I created a bookmark system in &lt;em>Neovim&lt;/em> to quickly jump between files. This system differs from the default &lt;em>Neovim&lt;/em> system because it focuses on marking files and lines, not just positions within the same file.&lt;/p>
&lt;h2 id="how-it-works">How It Works&lt;/h2>
&lt;p>The system records the file path and the current line in a text file. I use the &lt;code>&amp;lt;leader&amp;gt;o&lt;/code> key to open all marked files. I use the &lt;code>&amp;lt;leader&amp;gt;m&lt;/code> key to mark a file. I also use the &lt;code>:Clearmarks&lt;/code> command to clear all bookmarks when I finish a task or start a new one.&lt;/p></description></item><item><title>Static Compilation of the Lua Interpreter: Consistency and Portability</title><link>https://crg.eti.br/pub/compilacao-estatica-da-lingagem-lua/</link><pubDate>Sun, 19 Jan 2025 11:21:08 -0300</pubDate><author>crg@crg.eti.br (Cesar Gimenes)</author><guid>https://crg.eti.br/pub/compilacao-estatica-da-lingagem-lua/</guid><description>&lt;p>Lua is my favorite language for writing small scripts and configurations. It is easy to embed in other projects and has a clean, simple syntax. It is easy to extend and a great language for configuring systems.&lt;/p>
&lt;p>I recently started a project that requires the Lua interpreter to be installed. That is usually not a problem. But to have full control, I decided to compile my own statically linked version of the interpreter. This ensures that differences in the libc version or other libraries won&amp;rsquo;t interfere with my system. I&amp;rsquo;ve run into plenty of problems with systems that failed to load because of mismatched glibc versions. Beyond the practical reasons, I believe all software should be statically compiled. The memory savings and easier updates of dynamic linking don&amp;rsquo;t make up for the problems it can cause.&lt;/p></description></item><item><title>Customizing Neovim: Sorting and Removing Duplicate Lines with Lua</title><link>https://crg.eti.br/pub/personalizando_neovim_ordenacao_e_remocao_de_linhas_duplicadas_com_lua/</link><pubDate>Fri, 29 Nov 2024 00:31:30 -0300</pubDate><author>crg@crg.eti.br (Cesar Gimenes)</author><guid>https://crg.eti.br/pub/personalizando_neovim_ordenacao_e_remocao_de_linhas_duplicadas_com_lua/</guid><description>&lt;p>Continuing my Neovim customizations, here are two functions I use frequently: &lt;code>sort_lines&lt;/code> and &lt;code>sort_and_uniq_lines&lt;/code>. As the names suggest, they sort the content of the selected lines and, in the case of &lt;code>sort_and_uniq_lines&lt;/code>, also remove duplicates.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-lua" data-lang="lua">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">function&lt;/span> &lt;span style="color:#6639ba">sort_lines&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Get the start and end position of the selection&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> start_pos &lt;span style="color:#0550ae">=&lt;/span> vim.fn&lt;span style="color:#1f2328">.&lt;/span>getpos&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#39;&amp;lt;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> end_pos &lt;span style="color:#0550ae">=&lt;/span> vim.fn&lt;span style="color:#1f2328">.&lt;/span>getpos&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#39;&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Convert the position to the line index&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Adjust start_pos because lines in Lua start at 0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> start_line &lt;span style="color:#0550ae">=&lt;/span> start_pos&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0550ae">2&lt;/span>&lt;span style="color:#1f2328">]&lt;/span> &lt;span style="color:#0550ae">-&lt;/span> &lt;span style="color:#0550ae">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- No need to adjust end_line&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> end_line &lt;span style="color:#0550ae">=&lt;/span> end_pos&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0550ae">2&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Get the selected lines&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> lines &lt;span style="color:#0550ae">=&lt;/span> vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_buf_get_lines&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> start_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Sort the lines&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> table.sort&lt;span style="color:#1f2328">(&lt;/span>lines&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Replace the original lines&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_buf_set_lines&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> start_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">false&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">function&lt;/span> &lt;span style="color:#6639ba">sort_and_uniq_lines&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> start_pos &lt;span style="color:#0550ae">=&lt;/span> vim.fn&lt;span style="color:#1f2328">.&lt;/span>getpos&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#39;&amp;lt;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> end_pos &lt;span style="color:#0550ae">=&lt;/span> vim.fn&lt;span style="color:#1f2328">.&lt;/span>getpos&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#39;&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> start_line &lt;span style="color:#0550ae">=&lt;/span> start_pos&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0550ae">2&lt;/span>&lt;span style="color:#1f2328">]&lt;/span> &lt;span style="color:#0550ae">-&lt;/span> &lt;span style="color:#0550ae">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> end_line &lt;span style="color:#0550ae">=&lt;/span> end_pos&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0550ae">2&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> lines &lt;span style="color:#0550ae">=&lt;/span> vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_buf_get_lines&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> start_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> table.sort&lt;span style="color:#1f2328">(&lt;/span>lines&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#57606a">-- Remove duplicate lines&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> uniq_lines &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">local&lt;/span> last_line &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#cf222e">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">for&lt;/span> _&lt;span style="color:#1f2328">,&lt;/span> line &lt;span style="color:#cf222e">in&lt;/span> ipairs&lt;span style="color:#1f2328">(&lt;/span>lines&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">if&lt;/span> line &lt;span style="color:#0550ae">~=&lt;/span> last_line &lt;span style="color:#cf222e">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> table.insert&lt;span style="color:#1f2328">(&lt;/span>uniq_lines&lt;span style="color:#1f2328">,&lt;/span> line&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> last_line &lt;span style="color:#0550ae">=&lt;/span> line
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_buf_set_lines&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> start_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end_line&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#cf222e">false&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> uniq_lines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_set_keymap&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0a3069">&amp;#39;v&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0a3069">&amp;#39;&amp;lt;Leader&amp;gt;s&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0a3069">&amp;#39;:lua sort_lines()&amp;lt;CR&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">{&lt;/span> noremap &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#cf222e">true&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> silent &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#cf222e">true&lt;/span> &lt;span style="color:#1f2328">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vim.api&lt;span style="color:#1f2328">.&lt;/span>nvim_set_keymap&lt;span style="color:#1f2328">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0a3069">&amp;#39;v&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0a3069">&amp;#39;&amp;lt;Leader&amp;gt;u&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0a3069">&amp;#39;:lua sort_and_uniq_lines()&amp;lt;CR&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">{&lt;/span> noremap &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#cf222e">true&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> silent &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#cf222e">true&lt;/span> &lt;span style="color:#1f2328">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://crg.eti.br/pub/personalizando_neovim_ordenacao_e_remocao_de_linhas_duplicadas_com_lua/sort_lines.lua">sort_lines.lua&lt;/a>&lt;/p></description></item><item><title>Building a Bookmark System in Neovim with Lua</title><link>https://crg.eti.br/pub/criando-sistema-de-bookmarks-no-neovim-com-lua/</link><pubDate>Mon, 25 Nov 2024 00:25:27 -0300</pubDate><author>crg@crg.eti.br (Cesar Gimenes)</author><guid>https://crg.eti.br/pub/criando-sistema-de-bookmarks-no-neovim-com-lua/</guid><description>&lt;p>Continuing our series of articles aimed at reducing the cognitive effort involved in programming tasks, here is my small bookmark script for Neovim.&lt;/p>
&lt;p>Neovim is incredibly customizable. Without having to build full plugins, you can add a lot of functionality with just a few Lua functions.&lt;/p>
&lt;p>In my day-to-day work, I often need to return to the same files to fix and test problems. Opening those files directly at the right line, without wasting time navigating, is essential.&lt;/p></description></item></channel></rss>