mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-25 00:52:43 +00:00 
			
		
		
		
	utility/surround: vendor keybindings for surround
Adds an opioniated set of keybindings for nvim-surround that avoids conflicts with nvim-leap by default and an option to disable those.
This commit is contained in:
		
					parent
					
						
							
								570eb32a5c
							
						
					
				
			
			
				commit
				
					
						997a345cda
					
				
			
		
					 2 changed files with 52 additions and 23 deletions
				
			
		|  | @ -6,7 +6,7 @@ | |||
| with lib; | ||||
| with builtins; let | ||||
|   cfg = config.vim.utility.surround; | ||||
|   self = import ./surround.nix {inherit lib;}; | ||||
|   self = import ./surround.nix {inherit lib config;}; | ||||
|   mappingDefinitions = self.options.vim.utility.surround.mappings; | ||||
|   mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; | ||||
| in { | ||||
|  | @ -22,20 +22,20 @@ in { | |||
| 
 | ||||
|       maps = { | ||||
|         insert = mkMerge [ | ||||
|           (mkSetBinding mappings.insert "<Plug>(nvim-surround-insert)") | ||||
|           (mkSetBinding mappings.insertLine "<Plug>(nvim-surround-insert-line)") | ||||
|           (mkIf (mappings.insert != null) (mkSetBinding mappings.insert "<Plug>(nvim-surround-insert)")) | ||||
|           (mkIf (mappings.insertLine != null) (mkSetBinding mappings.insertLine "<Plug>(nvim-surround-insert-line)")) | ||||
|         ]; | ||||
|         normal = mkMerge [ | ||||
|           (mkSetBinding mappings.normal "<Plug>(nvim-surround-normal)") | ||||
|           (mkSetBinding mappings.normalCur "<Plug>(nvim-surround-normal-cur)") | ||||
|           (mkSetBinding mappings.normalLine "<Plug>(nvim-surround-normal-line)") | ||||
|           (mkSetBinding mappings.normalCurLine "<Plug>(nvim-surround-normal-cur-line)") | ||||
|           (mkSetBinding mappings.delete "<Plug>(nvim-surround-delete)") | ||||
|           (mkSetBinding mappings.change "<Plug>(nvim-surround-change)") | ||||
|           (mkIf (mappings.normal != null) (mkSetBinding mappings.normal "<Plug>(nvim-surround-normal)")) | ||||
|           (mkIf (mappings.normalCur != null) (mkSetBinding mappings.normalCur "<Plug>(nvim-surround-normal-cur)")) | ||||
|           (mkIf (mappings.normalLine != null) (mkSetBinding mappings.normalLine "<Plug>(nvim-surround-normal-line)")) | ||||
|           (mkIf (mappings.normalCurLine != null) (mkSetBinding mappings.normalCurLine "<Plug>(nvim-surround-normal-cur-line)")) | ||||
|           (mkIf (mappings.delete != null) (mkSetBinding mappings.delete "<Plug>(nvim-surround-delete)")) | ||||
|           (mkIf (mappings.change != null) (mkSetBinding mappings.change "<Plug>(nvim-surround-change)")) | ||||
|         ]; | ||||
|         visualOnly = mkMerge [ | ||||
|           (mkSetBinding mappings.visual "<Plug>(nvim-surround-visual)") | ||||
|           (mkSetBinding mappings.visualLine "<Plug>(nvim-surround-visual-line)") | ||||
|           (mkIf (mappings.visual != null) (mkSetBinding mappings.visual "<Plug>(nvim-surround-visual)")) | ||||
|           (mkIf (mappings.visualLine != null) (mkSetBinding mappings.visualLine "<Plug>(nvim-surround-visual-line)")) | ||||
|         ]; | ||||
|       }; | ||||
|     }; | ||||
|  |  | |||
|  | @ -1,59 +1,88 @@ | |||
| {lib, ...}: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   ... | ||||
| }: | ||||
| with lib; | ||||
| with builtins; { | ||||
|   options.vim.utility.surround = { | ||||
|     enable = mkEnableOption "nvim-surround: add/change/delete surrounding delimiter pairs with ease"; | ||||
|     enable = mkOption { | ||||
|       type = types.bool; | ||||
|       default = false; | ||||
|       description = "nvim-surround: add/change/delete surrounding delimiter pairs with ease. Note that the default mappings deviate from upstreeam to avoid conflicts with nvim-leap."; | ||||
|     }; | ||||
|     useVendoredKeybindings = mkOption { | ||||
|       type = types.bool; | ||||
|       default = true; | ||||
|       description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap"; | ||||
|     }; | ||||
|     mappings = { | ||||
|       insert = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "<C-g>s"; | ||||
|         default = "<C-g>z"; | ||||
|         description = "Add surround character around the cursor"; | ||||
|       }; | ||||
|       insertLine = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "<C-g>S"; | ||||
|         default = "<C-g>Z"; | ||||
|         description = "Add surround character around the cursor on new lines"; | ||||
|       }; | ||||
|       normal = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "ys"; | ||||
|         default = "gz"; | ||||
|         description = "Surround motion with character"; | ||||
|       }; | ||||
|       normalCur = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "yss"; | ||||
|         default = "gZ"; | ||||
|         description = "Surround motion with character on new lines"; | ||||
|       }; | ||||
|       normalLine = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "yS"; | ||||
|         default = "gzz"; | ||||
|         description = "Surround line with character"; | ||||
|       }; | ||||
|       normalCurLine = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "ySS"; | ||||
|         default = "gZZ"; | ||||
|         description = "Surround line with character on new lines"; | ||||
|       }; | ||||
|       visual = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "S"; | ||||
|         default = "gz"; | ||||
|         description = "Surround selection with character"; | ||||
|       }; | ||||
|       visualLine = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "gS"; | ||||
|         default = "gZ"; | ||||
|         description = "Surround selection with character on new lines"; | ||||
|       }; | ||||
|       delete = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "ds"; | ||||
|         default = "gzd"; | ||||
|         description = "Delete surrounding character"; | ||||
|       }; | ||||
|       change = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "cs"; | ||||
|         default = "gzr"; | ||||
|         description = "Change surrounding character"; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
|   config.vim.utility.surround = let | ||||
|     cfg = config.vim.utility.surround; | ||||
|   in { | ||||
|     mappings = mkIf (! cfg.useVendoredKeybindings) (mkDefault { | ||||
|       insert = null; | ||||
|       insertLine = null; | ||||
|       normal = null; | ||||
|       normalCur = null; | ||||
|       normalLine = null; | ||||
|       normalCurLine = null; | ||||
|       visual = null; | ||||
|       visualLine = null; | ||||
|       delete = null; | ||||
|       change = null; | ||||
|     }); | ||||
|   }; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kalle Jepsen
				Kalle Jepsen