Skip to content

Instantly share code, notes, and snippets.

@lopesivan
Last active April 17, 2022 01:59
Show Gist options
  • Save lopesivan/60fa98e309a626e58ed10bfb7cc54c99 to your computer and use it in GitHub Desktop.
Save lopesivan/60fa98e309a626e58ed10bfb7cc54c99 to your computer and use it in GitHub Desktop.
Dica: Bloco de código em markdown.

Dica de aprimoramento de codificação número 1

Objetivo

Criar um comando que permita ao usuário envolver um bloco de código com ```.

exemplo:

Antes: 2 2 sin(x) + cos(x) =1

Depois:

   2        2
sin(x) + cos(x) =1

Na pasta ftplugin crio o arquivo markdown.lua, com o seguinte código:

-- Retorna a primeira e última linha do bloco visual.
--
local function get_line_range_of_visual_block()
	local _, first_line, _, _ = unpack(vim.fn.getpos("'<"))
	local _, last_line, _, _ = unpack(vim.fn.getpos("'>"))
	return first_line-1, last_line+1
end

-- Adiciona acima e abaixo do bloco visual o texto definido
-- em t.
local function code_block()
	local first, last = get_line_range_of_visual_block()

	local t = {"```", ""}
	vim.api.nvim_buf_set_text(0, first, 0, first, 0, t)
	vim.api.nvim_buf_set_text(0, last, 0, last, 0, t)
end
vim.api.nvim_create_user_command('CodeBlock', code_block, { range = true })

Refatorando o código

-- Retorna a o dicionário "tabela" com a primeira e última linha
-- do bloco visual.
local function get_line_range_of_visual_block()
	local _, first_line, _, _ = unpack(vim.fn.getpos("'<"))
	local _, last_line, _, _ = unpack(vim.fn.getpos("'>"))
	return {first_line-1, last_line+1}
end

-- Adiciona acima e abaixo do bloco visual o texto definido
-- em t.
local function code_block()
	local range = get_line_range_of_visual_block()

	local t = {"```", ""}
	for line = 1, 2 do
	  vim.api.nvim_buf_set_text(0, range[line], 0, range[line], 0, t)
	end
end
vim.api.nvim_create_user_command('CodeBlock', code_block, { range = true })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment