kylechui / nvim-surround

Add/change/delete surrounding delimiter pairs with ease. Written with :heart: in Lua.
MIT License
3.29k stars 63 forks source link

[Feedback wanted] Add new surround actions #58

Closed abenz1267 closed 2 years ago

abenz1267 commented 2 years ago

vim-surround let's you insert surroundings in insert-mode by pressing either ctrl+s or ctrl+ss where ctrl+ss will also add a new-line in between the surroundings. This way you can easily create html-tags in insert mode. Just do ctrl+s<div> and you'll get <div>|</div>.

kylechui commented 2 years ago

Note to self: Check out vim-surround's docs

kylechui commented 2 years ago

To minimize the number of posts I'll have to make in the breaking changes thread, I would like to get a complete, locked-in interface for naming all of the various keybindings. I propose the following, but would definitely like feedback:

Let the _cur suffix denote that the mapping applies to the current line (not including leading/trailing whitespace), and the _line suffix denote that the mapping will put the delimiters on new lines.

Consider the following names, with their vim-surround counterparts (all mappings in normal mode unless otherwise stated): nvim-surround key vim-surround mapping
insert <C-g>s in insert mode
insert_line <C-g>S in insert mode
add normal ys
add_cur normal_cur yss
add_line normal_line yS
add_cur_line normal_cur_line ySs or ySS
visual S in visual mode
visual_line gS in visual mode
delete ds
change cs

Bonus: As suggested by #79, add yt for "you toggle"---While it would be easier to just cycle through an alias table (builtin ytq and yts), it would be nice to have ytb to toggle between [, (, { without needing to disable b as an insert alias for (. Perhaps this warrants a refactor that isolates single-char aliases from tabular aliases, which would also reduce some complexity.

CC: @andrewferrier @noahtheduke @akinsho since y'all seem to be pretty active (if you would like to not be tagged next time, feel free to just let me know). In a related vein I'm not quite sure how to get more community feedback on certain things, since discussions don't notify anybody :/ Also unsure if anybody actually checks the issues page unless they have a problem themselves.

Edit: Changed the normal mode mappings to normal instead of add; to show your support for the new naming scheme, leave a :heart: on this comment instead of :+1:

kylechui commented 2 years ago

Update: Would it be better to change all instances of add to normal? That way we could have it be insert/normal/visual for "adding" surrounds, as opposed to insert/add/visual. I'm currently leaning towards this new suggestion, with add being reserved as an "umbrella term" of sorts to refer to any of insert/normal/visual.

kylechui commented 2 years ago

Sorry for the late-ish work on this, but a mediocre version of this should be up and running on the linked branch add-more-keymaps. It is mostly just a "proof of concept" that adds the keymaps yS and ySS from vim-surround, and there is much more work to be done. In particular:

Thanks everybody for your patience while I work things out!

kylechui commented 2 years ago

Note to self: Adding visual block support (to surround around the block on every line) probably makes sense to add in with this PR

Edit: Added in the latest commit.

kylechui commented 2 years ago

@abenz1267 You should be able to try it out on branch add-more-keymaps now by setting

keymaps = {
    insert = "<C-s>",
    insert_line = "<C-s><C-s>",
}

in your setup function. You can then enter <C-s>tdiv id="test div" to insert an HTML pair.

abenz1267 commented 2 years ago

Yes, that works, but indentation is broken.

kylechui commented 2 years ago

Yes, I'm now aware of that. I'm trying to figure out a "sane" way to indent as per #76, and make it uniform/consistent across visual-line mode surrounds, as well as _line suffixed surrounds. Thanks for pointing it out!

kylechui commented 2 years ago

@abenz1267 The indentation should be fixed, but the code is quite bad. I'll need to fix that later before merging this branch into main.

kylechui commented 2 years ago

@rorj If you could test out the latest commit on add-new-keymaps that would be very much appreciated, thanks!

kylechui commented 2 years ago

I don't know if formatting after normal mode surrounds is going to be possible since formatting overwrites the last action (breaking dot-repeats), but I'll keep trying.

Edit: I've given up on this for now and have just merged it into main. If anybody cares enough about this, they can open up a new issue specifically for this case.