diff options
author | Jesse Luehrs <doy@tozt.net> | 2017-10-29 03:38:46 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2017-10-29 03:39:14 -0400 |
commit | 7c2114f57909d9546184aaf7d0b833ce1cc0f4e8 (patch) | |
tree | f3213d84a34561aa7251fa16ca1ada6ae1b78331 /vimrc | |
parent | 5f503174cf23edd484508ab0a4fd6950e4614741 (diff) | |
download | conf-7c2114f57909d9546184aaf7d0b833ce1cc0f4e8.tar.gz conf-7c2114f57909d9546184aaf7d0b833ce1cc0f4e8.zip |
better handling of backspacing inside brackets after pressing enter
Diffstat (limited to 'vimrc')
-rw-r--r-- | vimrc | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -479,6 +479,7 @@ let g:pair_bs_maps = { \ '(': "<SID>maybe_remove_empty_pair(')')", \ '[': "<SID>maybe_remove_empty_pair(']')", \ '{': "<SID>maybe_remove_empty_pair('}')", +\ '': "<SID>maybe_collapse_pair()", \} function s:maybe_remove_matching_pair() return eval(g:pair_bs_maps[s:prevchar()]) @@ -511,6 +512,34 @@ function s:maybe_remove_empty_pair(char) return "\<Esc>" . (l:diff[0] + 1) . "Ji" . "\<BS>\<BS>\<Del>" endif endfunction +let g:pair_chars = { +\ '(': ')', +\ '[': ']', +\ '{': '}', +\} +function s:maybe_collapse_pair() + let l:prev_line_idx = line('.') - 1 + if l:prev_line_idx < 1 + return "\<BS>" + endif + + let l:prev_line_char = getline(l:prev_line_idx)[col([l:prev_line_idx, '$'])-2] + if l:prev_line_char !~ '[([{]' + return "\<BS>" + endif + + let l:end = searchpos('[^ \t]', 'cnWz') + if l:end == [0, 0] + return "\<BS>" + endif + + let l:next_nonblank = getline(l:end[0])[l:end[1] - 1] + if l:next_nonblank != g:pair_chars[l:prev_line_char] + return "\<BS>" + endif + + return "\<BS>\<Del>" +endfunction function s:skip_closing_char(char) if s:nextchar() == a:char return "\<Esc>la" |