- reinit v1
main
McAuley Penney 3 years ago
parent 1720fb50d0
commit 25715ac21f

@ -1,96 +1,35 @@
# tidy.nvim 🧹 # tidy.nvim 🧹
A function and autocommand pair that can A function and autocommand pair that removes all
- remove all empty lines at the top of the buffer - trailing whitespace
- remove all trailing whitespace - empty lines at the end of the buffer
- remove a variable amount of empty lines at the end of the buffer
- condense multiple empty lines into one
on every `BufWritePre`. on every `BufWritePre`.
![tidy](https://user-images.githubusercontent.com/59481467/142785684-96559135-88e7-4c50-a848-56f2c65262ef.gif) ![tidy](https://user-images.githubusercontent.com/59481467/142785684-96559135-88e7-4c50-a848-56f2c65262ef.gif)
## install
- Packer with default configuration and lazy-loading
```lua
use{
"mcauley-penney/tidy.nvim",
config = function()
require "tidy".setup{}
end,
event = "BufWritePre"
}
```
## Configuration ## install
- Packer
### default
Tidy comes with the below default configuration:
```lua ```lua
local M = { use "McAuleyPenney/tidy.nvim"
config = {
eof_quant = -1, -- the amount of empty lines to leave at the end of
-- the file; -1 = no lines, 0 = 1 line, no limit;
-- only applies if "eof" given to "fmts"
fmts = { -- the types of formattings to apply
"eof", -- removes lines at end of file
"multi", -- condenses multiple newlines into one
"sof", -- removes lines at start of file
"ws" -- removes trailing whitespace
}
}
}
``` ```
### how to customize or with lazy-loading
To customize which formattings will apply, give a list to the `setup` function:
```lua ```lua
use{ use{ "McAuleyPenney/tidy.nvim", event = "BufWritePre" }
"mcauley-penney/tidy.nvim",
config = function()
require "tidy".setup{
fmts = {
"eof",
"ws"
}
}
end,
event = "BufWritePre"
}
``` ```
### formatting styles
- `eof`: remove a variable amount of newlines at end of file
![eof](https://user-images.githubusercontent.com/59481467/146851029-d1c47cfa-a25f-4ea0-b33e-faac6153b5f6.gif)
- `multi`: condenses multiple newlines into one
![condense](https://user-images.githubusercontent.com/59481467/146851295-aa77bcb0-d5b3-4c0a-9857-5eb1043e48c9.gif)
- `sof`: removes lines at start of file ## Credits:
- [Vim Tips Wiki entry for removing unwanted spaces](https://vim.fandom.com/wiki/Remove_unwanted_spaces#Automatically_removing_all_trailing_whitespace)
![sof](https://user-images.githubusercontent.com/59481467/146851203-d7d7c3dd-8c2f-4267-bb71-fde1f95fc88f.gif)
- `ws`: remove whitespace
![whitespace](https://user-images.githubusercontent.com/59481467/146851131-c39e9ba8-851f-4a12-9eb5-609f8f7b29ab.gif) - ib., the author of [this stack overflow answer](https://stackoverflow.com/a/7501902)
## Credits:
- [Vim Tips Wiki entry](https://vim.fandom.com/wiki/Remove_unwanted_spaces#Automatically_removing_all_trailing_whitespace)
for removing unwanted spaces
- ib., the author of [this stack overflow answer](https://stackoverflow.com/a/7501902), for how to remove empty lines at the
end of the buffer
- @blackboardd for how to choose how many lines will be kept
- [This line](https://github.com/gpanders/editorconfig.nvim/blob/ae3586771996b2fb1662eb0c17f5d1f4f5759bb7/lua/editorconfig.lua#L180) - [This line](https://github.com/gpanders/editorconfig.nvim/blob/ae3586771996b2fb1662eb0c17f5d1f4f5759bb7/lua/editorconfig.lua#L180)
in [gpanders/editorconfig.nvim](https://github.com/gpanders/editorconfig.nvim) for exposing me to the `keepjumps` in [gpanders/editorconfig.nvim](https://github.com/gpanders/editorconfig.nvim) for exposing me to the `keepjumps`
and `keeppatterns` modifiers and `keeppatterns` modifiers
- [Vim Tips Wiki entry](https://vim.fandom.com/wiki/Remove_unwanted_empty_lines) for condensing multiple empty lines

@ -1,54 +1,20 @@
local M = { -- MP
config = {
eof_quant = -1,
fmts = {
"sof",
"eof",
"multi",
"ws"
}
}
}
function M.setup(user_config) local M = {}
-- integrate user configuration
M.config = vim.tbl_deep_extend("force", M.config, user_config or {})
vim.cmd[[
augroup Tidy
au!
au BufWritePre * lua require( "tidy" ).tidy_up()
augroup END
]]
end
function M.tidy_up() function M.tidy_up()
local cmd_mods = ":keepjumps keeppatterns silent! "
local patterns = {
-- delete all lines at end of buffer, see sources
eof = [[0;/^\%(\n*.\)\@!/ + ]] .. M.config.eof_quant .. ",$d",
-- compress all instances of multiple newlines into one, see sources
multi = [[:%s/\n\{2,}/\r\r/e]],
-- delete all new lines at beginning of file
sof = [[%s/\%^\n*/]],
-- delete all whitespace, see sources
ws = [[%s/\s\+$//e]]
}
-- get tuple of cursor position before making changes -- get tuple of cursor position before making changes
local pos = vim.api.nvim_win_get_cursor(0) local pos = vim.api.nvim_win_get_cursor( 0 )
-- execute chosen patterns -- delete all whitespace, see source 1
for _, fmt_type in ipairs(M.config.fmts) do vim.cmd[[:keepjumps keeppatterns %s/\s\+$//e]]
vim.cmd(cmd_mods .. patterns[fmt_type])
end -- delete all lines at end of buffer, see source 2
vim.cmd[[:keepjumps keeppatterns silent! 0;/^\%(\n*.\)\@!/,$d]]
-- get row count after line deletion -- get row count after line deletion
local end_row = vim.api.nvim_buf_line_count(0) local end_row = vim.api.nvim_buf_line_count( 0 )
--[[ --[[
if the row value in the original cursor if the row value in the original cursor
@ -63,7 +29,7 @@ function M.tidy_up()
pos[1] = end_row pos[1] = end_row
end end
vim.api.nvim_win_set_cursor(0, pos) vim.api.nvim_win_set_cursor( 0, pos )
end end
return M return M

@ -0,0 +1,4 @@
augroup Tidy
au!
au BufWritePre * lua require( "tidy" ).tidy_up()
augroup END
Loading…
Cancel
Save