 
   # Register operation command.
   # command-name is automatically mapped to correspoinding class.
-  #  e.g.
-  # join -> Join
-  # scroll-down -> ScrollDown
+  # e.g.
+  #   join -> Join
+  #   scroll-down -> ScrollDown
   registerOperationCommands: (kind, names) ->
     commands = {}
     for name in names

              throw error
    @registerCommands(commands)

  # Private: Creates the plugin's bindings
  #
  # Returns nothing.
  init: ->
    @registerCommands
      'activate-normal-mode':               => @activateNormalMode()
      'activate-linewise-visual-mode':      => @activateVisualMode('linewise')
      'activate-characterwise-visual-mode': => @activateVisualMode('characterwise')
      'activate-blockwise-visual-mode':     => @activateVisualMode('blockwise')
      'reset-normal-mode':                  => @resetNormalMode()

      'set-count':         (e) => @count.set(e) # 0-9
      'set-register-name': => @register.setName() # "

      'reverse-selections':     => @reverseSelections() # o
      'undo': => @undo() # u

      'replace-mode-backspace': => @replaceModeUndo()

      # Temproal dev-help commands. Might be removed after refactoring finished.

      'report-key-binding': => @reportKeyBinding()
      'open-in-vim': => @openInVim()

    @registerOperationCommands InsertMode, [
      'insert-register'
      'copy-from-line-above', 'copy-from-line-below'
    ]

    @registerOperationCommands TextObjects, [
      'select-inside-word', 'select-a-word',
      'select-inside-whole-word', 'select-a-whole-word',
      'select-inside-double-quotes'  , 'select-around-double-quotes'
      'select-inside-single-quotes'  , 'select-around-single-quotes'
      'select-inside-back-ticks'     , 'select-around-back-ticks'
      'select-inside-paragraph'      , 'select-around-paragraph'
      'select-inside-curly-brackets' , 'select-around-curly-brackets'
      'select-inside-angle-brackets' , 'select-around-angle-brackets'
      'select-inside-square-brackets', 'select-around-square-brackets'
      'select-inside-parentheses'    , 'select-around-parentheses'
      'select-inside-tags'           , # why not around version exists?
    ]

    @registerOperationCommands Motions, [
      'move-to-beginning-of-line'
      'repeat-find', 'repeat-find-reverse'
      'move-down', 'move-up', 'move-left', 'move-right',
      'move-to-next-word'     , 'move-to-next-whole-word'    ,
      'move-to-end-of-word'   , 'move-to-end-of-whole-word'  ,
      'move-to-previous-word' , 'move-to-previous-whole-word',
      'move-to-next-paragraph', 'move-to-previous-paragraph' ,
      'move-to-first-character-of-line', 'move-to-last-character-of-line',
      'move-to-first-character-of-line-up', 'move-to-first-character-of-line-down',
      'move-to-first-character-of-line-and-down',
      'move-to-last-nonblank-character-of-line-and-down',
      'move-to-start-of-file', 'move-to-line',
      'move-to-top-of-screen', 'move-to-bottom-of-screen', 'move-to-middle-of-screen',
      'scroll-half-screen-up', 'scroll-half-screen-down',
      'scroll-full-screen-up', 'scroll-full-screen-down',
      'repeat-search'          , 'repeat-search-backwards'    ,
      'move-to-mark'           , 'move-to-mark-literal'       ,
      'find'                   , 'find-backwards'             ,
      'till'                   , 'till-backwards'             ,
      'search'                 , 'reverse-search'             ,
      'search-current-word'    , 'reverse-search-current-word',
      'bracket-matching-motion',
    ]

    @registerOperationCommands Operators, [
      'activate-insert-mode', 'insert-after'
      'activate-replace-mode'
      'substitute', 'substitute-line',
      'insert-at-beginning-of-line', 'insert-after-end-of-line',
      'insert-below-with-newline', 'insert-above-with-newline',
      'delete', 'delete-to-last-character-of-line'
      'delete-right', 'delete-left',
      'change', 'change-to-last-character-of-line'
      'yank', 'yank-line'
      'put-after', 'put-before'
      'upper-case', 'lower-case', 'toggle-case', 'toggle-case-now'
      'join'
      'indent', 'outdent', 'auto-indent',
      'increase', 'decrease'
      'repeat', 'mark', 'replace'
    ]

    @registerOperationCommands Scroll, [
      'scroll-down', 'scroll-up'
      'scroll-cursor-to-top', 'scroll-cursor-to-top-leave',
      'scroll-cursor-to-middle', 'scroll-cursor-to-middle-leave',
      'scroll-cursor-to-bottom', 'scroll-cursor-to-bottom-leave',
      'scroll-cursor-to-left', 'scroll-cursor-to-right'
      ]

