function! sj#scss#SplitNestedDefinition()
  if search('{\s*$', 'Wn', line('.')) <= 0
    return 0
  endif

  if search('\s\zs\S\+', 'Wbc', line('.')) <= 0
    return 0
  endif

  let prefix = sj#Trim(strpart(getline('.'), 0, col('.') - 2))
  let suffix = sj#Trim(strpart(getline('.'), col('.') - 2, col('$')))
  let suffix = substitute(suffix, '\s*{$', '', '')

  if prefix == '' || suffix == ''
    return 0
  endif

  call sj#ReplaceMotion('V', prefix.' {')
  normal! f{
  let body = sj#GetMotion('vi{')
  call sj#ReplaceMotion('vi{', suffix." {\n".body."}\n")

  return 1
endfunction

function! sj#scss#JoinNestedDefinition()
  if search('{\s*$', 'We', line('.')) <= 0
    return 0
  endif

  let outer_start_lineno = line('.')

  " find end point
  normal! %
  let outer_end_lineno = line('.')
  let inner_end_lineno = prevnonblank(outer_end_lineno - 1)
  if inner_end_lineno == 0
    " No inner end } found
    return 0
  endif
  if getline(inner_end_lineno) !~ '^\s*}\s*$'
    " not a } character
    return 0
  endif

  exe inner_end_lineno
  normal! 0f}%
  let inner_start_lineno = line('.')

  if prevnonblank(inner_start_lineno - 1) != outer_start_lineno
    " the inner start is not immediately after the outer start
    return 0
  endif

  let outer_definition = sj#Trim(substitute(getline(outer_start_lineno), '{\s*$', '', ''))
  let inner_definition = sj#Trim(substitute(getline(inner_start_lineno), '{\s*$', '', ''))

  " currently on inner start, so let's take its contents:
  let body = sj#Trim(sj#GetMotion('vi{'))

  " jump on outer start
  exe outer_start_lineno
  call sj#ReplaceMotion('V', outer_definition.' '.inner_definition. ' {')
  normal! 0f{
  call sj#ReplaceMotion('va{', "{\n".body."\n}")

  return 1
endfunction