From 7c2114f57909d9546184aaf7d0b833ce1cc0f4e8 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 29 Oct 2017 03:38:46 -0400 Subject: better handling of backspacing inside brackets after pressing enter --- vimrc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'vimrc') diff --git a/vimrc b/vimrc index a67b20e..b7f66d7 100644 --- a/vimrc +++ b/vimrc @@ -479,6 +479,7 @@ let g:pair_bs_maps = { \ '(': "maybe_remove_empty_pair(')')", \ '[': "maybe_remove_empty_pair(']')", \ '{': "maybe_remove_empty_pair('}')", +\ '': "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 "\" . (l:diff[0] + 1) . "Ji" . "\\\" 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 "\" + endif + + let l:prev_line_char = getline(l:prev_line_idx)[col([l:prev_line_idx, '$'])-2] + if l:prev_line_char !~ '[([{]' + return "\" + endif + + let l:end = searchpos('[^ \t]', 'cnWz') + if l:end == [0, 0] + return "\" + 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 "\" + endif + + return "\\" +endfunction function s:skip_closing_char(char) if s:nextchar() == a:char return "\la" -- cgit v1.2.3-54-g00ecf