function! sj#vim#Split() if sj#BlankString(getline('.')) return 0 endif let new_line = sj#GetMotion('vg_') if sj#BlankString(new_line) return 0 else let add_whitespace = 1 if col('.') > 1 let pair = strpart(getline('.'), col('.') - 2, 2) if pair =~ '\s' " we're breaking on whitespace, so make sure to add some: let add_whitespace = 1 elseif pair =~ '^\S\S$' " we're breaking a word, so make sure not to have any: let add_whitespace = 0 endif endif if add_whitespace let new_line = "\n\\ ".sj#Trim(new_line) else let new_line = "\n\\".sj#Trim(new_line) endif call sj#ReplaceMotion('vg_', new_line) call sj#Keeppatterns('s/\s\+$//e') return 1 endif endfunction function! sj#vim#Join() let continuation_pattern = '^\s*\\' let current_lineno = line('.') let next_lineno = current_lineno + 1 let next_line = getline(next_lineno) if next_lineno > line('$') || next_line !~ continuation_pattern return 0 endif if next_line =~ continuation_pattern.'\s' " Then there's some whitespace after the \, rely on :join keeppatterns exe next_lineno.'s/'.continuation_pattern.'//' exe current_lineno.','.next_lineno.'join' else " No whitespace, let's join them directly keeppatterns exe current_lineno.'s/\n'.continuation_pattern.'//' endif if sj#settings#Read('normalize_whitespace') call sj#CompressWhitespaceOnLine() endif return 1 endfunction function! sj#vim#SplitIfClause() let line = getline('.') let pattern = '\v^\s*if .{-} \| .{-} \|\s*endif' if line !~# pattern return 0 endif let line_no = line('.') let lines = split(line, '|') let lines = map(lines, 'sj#Trim(v:val)') let replacement = join(lines, "\n") call sj#ReplaceLines(line_no, line_no, replacement) return 1 endfunction function! sj#vim#JoinIfClause() let line = getline('.') let pattern = '\v^\s*if' if line !~# pattern return 0 endif let if_line_no = line('.') let endif_line_pattern = '^'.repeat(' ', indent(if_line_no)).'endif' let endif_line_no = search(endif_line_pattern, 'W') if endif_line_no <= 0 return 0 endif if endif_line_no - if_line_no != 2 return 0 endif let lines = sj#GetLines(if_line_no, endif_line_no) let lines = map(lines, 'sj#Trim(v:val)') let replacement = join(lines, ' | ') call sj#ReplaceLines(if_line_no, endif_line_no, replacement) return 1 endfunction