mirror of
				https://github.com/tiyn/tidy.nvim.git
				synced 2025-10-31 03:01:22 +01:00 
			
		
		
		
	docs, feat, refactor:
- add user configuration ability
    - add two new patterns
        - remove empty lines at top of buffer
        - condense all multiple empty lines into
          one
    - update README
        - GIFs displaying formatting options
        - default config and how to modify
        - new packer entry
        - credits
    - remove vim file and integrate aucmd into lua
			
			
This commit is contained in:
		
							
								
								
									
										78
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								README.md
									
									
									
									
									
								
							| @@ -9,26 +9,86 @@ on every `BufWritePre`. | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## install | ||||
| - Packer | ||||
| - Packer with default configuration and lazy-loading | ||||
|  | ||||
| ```lua | ||||
| use "McAuleyPenney/tidy.nvim" | ||||
| use{ | ||||
|     "mcauley-penney/tidy.nvim", | ||||
|      config = function() | ||||
|         require "tidy".setup{} | ||||
|     end, | ||||
|     event  = "BufWritePre" | ||||
| } | ||||
| ``` | ||||
|  | ||||
| or with lazy-loading | ||||
| ## Configuration | ||||
|  | ||||
| ### default | ||||
|  | ||||
| Tidy comes with the below default configuration: | ||||
|  | ||||
| ```lua | ||||
| use{ "McAuleyPenney/tidy.nvim", event = "BufWritePre" } | ||||
| 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 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ### 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 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) | ||||
|      | ||||
| - [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) | ||||
| 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,24 +1,55 @@ | ||||
| -- MP | ||||
| local M = { | ||||
|     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() | ||||
|     local cmd_mods = ":keepjumps keeppatterns silent! " | ||||
|  | ||||
|     local patterns = { | ||||
|         -- delete all new lines at beginning of file | ||||
|  | ||||
|         sof = [[%s/\%^\n*/]], | ||||
|         -- delete all lines at end of buffer, see source 2 | ||||
|  | ||||
|         eof = [[0;/^\%(\n*.\)\@!/ + ]] .. M.config.eof_quant ..  ",$d", | ||||
|         -- compress all instances of multiple newlines into one | ||||
|  | ||||
|         multi = [[:%s/\n\{2,}/\r\r/e]], | ||||
|         -- delete all whitespace, see source 1 | ||||
|         ws = [[%s/\s\+$//e]] | ||||
|     } | ||||
|  | ||||
|     -- get tuple of cursor position before making changes | ||||
|     local pos = vim.api.nvim_win_get_cursor(0) | ||||
|  | ||||
|     -- 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]] | ||||
|     for _, fmt_type in ipairs(M.config.fmts) do | ||||
|         vim.cmd(cmd_mods .. patterns[fmt_type]) | ||||
|     end | ||||
|  | ||||
|     -- get row count after line deletion | ||||
|     local end_row = vim.api.nvim_buf_line_count(0) | ||||
|  | ||||
|  | ||||
|     --[[ | ||||
|         if the row value in the original cursor | ||||
|         position tuple is greater than the | ||||
| @@ -35,5 +66,4 @@ function M.tidy_up() | ||||
|     vim.api.nvim_win_set_cursor(0, pos) | ||||
| end | ||||
|  | ||||
|  | ||||
| return M | ||||
|   | ||||
| @@ -1,5 +0,0 @@ | ||||
|  | ||||
| augroup Tidy | ||||
|     au! | ||||
|     au BufWritePre * lua require( "tidy.init" ).tidy_up() | ||||
| augroup END | ||||
		Reference in New Issue
	
	Block a user