def run_cmd(self, util, direction=1):
        view = self.view

        separators = SettingsManager.get("sbp_word_separators", default_sbp_word_separators)

        # determine the direction
        count = util.get_count() * direction
        forward = count > 0
        count = abs(count)

        def call_find_by_class(point, classes, separators):
          '''
          This is a small wrapper that maps to the right find_by_class call
          depending on the version of ST installed
          '''
          if _ST3:
            return self.find_by_class_native(view, point, forward, classes, separators)
          else:
            return self.find_by_class_fallback(view, point, forward, classes, separators)

        def move_word0(cursor, first=False):
            point = cursor.b
            if forward:
                if not first or not util.is_word_char(point, True, separators):
                    point = call_find_by_class(point, sublime.CLASS_WORD_START, separators)
                point = call_find_by_class(point, sublime.CLASS_WORD_END, separators)
            else:
                if not first or not util.is_word_char(point, False, separators):
                    point = call_find_by_class(point, sublime.CLASS_WORD_END, separators)
                point = call_find_by_class(point, sublime.CLASS_WORD_START, separators)

            return sublime.Region(point, point)

        for c in range(count):
            util.for_each_cursor(move_word0, first=(c == 0))

#
# Advance to the beginning (or end if going backward) word unless already positioned at a word
# character. This can be used as setup for commands like upper/lower/capitalize words. This ignores
# the argument count.
#
dataset/ETHPy150Open grundprinzip/sublemacspro/jove.py/SbpMoveWordCommand.run_cmd/original