mirror of
				https://github.com/tiyn/tidy.nvim.git
				synced 2025-10-31 03:01:22 +01:00 
			
		
		
		
	fix:
- reinit v1
This commit is contained in:
		
							
								
								
									
										87
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,96 +1,35 @@ | ||||
|  | ||||
| # 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 | ||||
|     - remove all trailing whitespace | ||||
|     - remove a variable amount of empty lines at the end of the buffer | ||||
|     - condense multiple empty lines into one | ||||
|     - trailing whitespace | ||||
|     - empty lines at the end of the buffer | ||||
|  | ||||
| on every `BufWritePre`. | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## install | ||||
| - Packer with default configuration and lazy-loading | ||||
| - Packer | ||||
|  | ||||
| ```lua | ||||
| use{ | ||||
|     "mcauley-penney/tidy.nvim", | ||||
|      config = function() | ||||
|         require "tidy".setup{} | ||||
|     end, | ||||
|     event  = "BufWritePre" | ||||
| } | ||||
| use "McAuleyPenney/tidy.nvim" | ||||
| ``` | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| ### default | ||||
|  | ||||
| Tidy comes with the below default configuration: | ||||
| or with lazy-loading | ||||
|  | ||||
| ```lua | ||||
| local M = { | ||||
|     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 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| use{ "McAuleyPenney/tidy.nvim", event = "BufWritePre" } | ||||
| ``` | ||||
|  | ||||
| ### how to customize | ||||
|  | ||||
| To customize which formattings will apply, give a list to the `setup` function: | ||||
|  | ||||
| ```lua | ||||
| use{ | ||||
|     "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 | ||||
|  | ||||
|  | ||||
|  | ||||
| - `multi`: condenses multiple newlines into one | ||||
|  | ||||
|  | ||||
|  | ||||
| - `sof`: removes lines at start of file | ||||
|  | ||||
|  | ||||
|  | ||||
| - `ws`: remove whitespace | ||||
|  | ||||
|  | ||||
|  | ||||
| ## 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 | ||||
| - [Vim Tips Wiki entry for removing unwanted spaces](https://vim.fandom.com/wiki/Remove_unwanted_spaces#Automatically_removing_all_trailing_whitespace) | ||||
|  | ||||
| - ib., the author of [this stack overflow answer](https://stackoverflow.com/a/7501902) | ||||
|  | ||||
| - [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` | ||||
| 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 = { | ||||
|     config = { | ||||
|         eof_quant = -1, | ||||
|         fmts = { | ||||
|             "sof", | ||||
|             "eof", | ||||
|             "multi", | ||||
|             "ws" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| -- MP | ||||
|  | ||||
| function M.setup(user_config) | ||||
|     -- 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 | ||||
| local M = {} | ||||
|  | ||||
| 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 | ||||
|     local pos = vim.api.nvim_win_get_cursor(0) | ||||
|     local pos = vim.api.nvim_win_get_cursor( 0 ) | ||||
|  | ||||
|     -- execute chosen patterns | ||||
|     for _, fmt_type in ipairs(M.config.fmts) do | ||||
|         vim.cmd(cmd_mods .. patterns[fmt_type]) | ||||
|     end | ||||
|     -- delete all whitespace, see source 1 | ||||
|     vim.cmd[[:keepjumps keeppatterns %s/\s\+$//e]] | ||||
|  | ||||
|     -- delete all lines at end of buffer, see source 2 | ||||
|     vim.cmd[[:keepjumps keeppatterns silent! 0;/^\%(\n*.\)\@!/,$d]] | ||||
|  | ||||
|     -- 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 | ||||
| @@ -63,7 +29,7 @@ function M.tidy_up() | ||||
|         pos[1] = end_row | ||||
|     end | ||||
|  | ||||
|     vim.api.nvim_win_set_cursor(0, pos) | ||||
|     vim.api.nvim_win_set_cursor( 0, pos ) | ||||
| end | ||||
|  | ||||
| return M | ||||
|   | ||||
							
								
								
									
										4
									
								
								plugin/tidy.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								plugin/tidy.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| augroup Tidy | ||||
|     au! | ||||
|     au BufWritePre * lua require( "tidy" ).tidy_up() | ||||
| augroup END | ||||
		Reference in New Issue
	
	Block a user