summaryrefslogtreecommitdiffstats
path: root/vimrc
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2017-10-29 03:38:46 -0400
committerJesse Luehrs <doy@tozt.net>2017-10-29 03:39:14 -0400
commit7c2114f57909d9546184aaf7d0b833ce1cc0f4e8 (patch)
treef3213d84a34561aa7251fa16ca1ada6ae1b78331 /vimrc
parent5f503174cf23edd484508ab0a4fd6950e4614741 (diff)
downloadconf-7c2114f57909d9546184aaf7d0b833ce1cc0f4e8.tar.gz
conf-7c2114f57909d9546184aaf7d0b833ce1cc0f4e8.zip
better handling of backspacing inside brackets after pressing enter
Diffstat (limited to 'vimrc')
-rw-r--r--vimrc29
1 files changed, 29 insertions, 0 deletions
diff --git a/vimrc b/vimrc
index a67b20e..b7f66d7 100644
--- a/vimrc
+++ b/vimrc
@@ -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"