'Helper method that does the actual jump.'

def _jump(self, backwards=False):

    if self._should_update_textobjects:
        self._should_reset_visual = False
        self._cursor_moved()
    with _vim.toggle_opt('ve', 'onemore'):
        jumped = False
        stack_for_post_jump = self._csnippets[:]
        ntab_short_and_near = False
        if self._cs:
            snippet_for_action = self._cs
        elif stack_for_post_jump:
            snippet_for_action = stack_for_post_jump[(-1)]
        else:
            snippet_for_action = None
        if self._cs:
            ntab = self._cs.select_next_tab(backwards)
            if ntab:
                if self._cs.snippet.has_option('s'):
                    lineno = _vim.buf.cursor.line
                    _vim.buf[lineno] = _vim.buf[lineno].rstrip()
                _vim.select(ntab.start, ntab.end)
                jumped = True
                if ((self._ctab is not None) and ((ntab.start - self._ctab.end) == Position(0, 1)) and ((ntab.end - ntab.start) == Position(0, 1))):
                    ntab_short_and_near = True
                self._ctab = ntab
                self._visual_content.conserve_placeholder(self._ctab)
                self._cs.current_placeholder = self._visual_content.placeholder
                self._should_reset_visual = False
                self._csnippets[0].update_textobjects()
                self._vstate.remember_buffer(self._csnippets[0])
                if ((ntab.number == 0) and self._csnippets):
                    self._current_snippet_is_done()
            else:
                self._current_snippet_is_done()
                jumped = self._jump(backwards)
        if jumped:
            if self._ctab:
                self._vstate.remember_position()
                self._vstate.remember_unnamed_register(self._ctab.current_text)
            if (not ntab_short_and_near):
                self._ignore_movements = True
        if ((len(stack_for_post_jump) > 0) and (ntab is not None)):
            with use_proxy_buffer(stack_for_post_jump, self._vstate):
                snippet_for_action.snippet.do_post_jump(ntab.number, ((-1) if backwards else 1), stack_for_post_jump, snippet_for_action)
    return jumped
