     cursorWord = @editor.getTextInBufferRange(bufferRange)
     {pattern: ///\b#{_.escapeRegExp(cursorWord)}\b///g, bufferRange}
 
+
+# Repeat
+# =========================
+class Repeat extends Operator
+  @extend()
+  requireTarget: false
+  recordable: false
+
+  execute: ->
+    @editor.transact =>
+      @countTimes =>
+        if operation = @vimState.operationStack.getRecorded()
+          operation.setRepeated()
+          operation.execute()
+
 # Select
 # When text-object is invoked from normal or viusal-mode, operation would be
 #  => Select operator with target=text-object

  @description: "Change surround character, from char is auto-detected from enclosed and forwarding area"
  target: "AAnyPairAllowForwarding"

# Yank
# -------------------------
class Yank extends Operator
  @extend()
  hover: icon: ':yank:', emoji: ':clipboard:'
  trackChange: true
  stayOnLinewise: true

  mutateSelection: (selection) ->
    @setTextToRegisterForSelection(selection)
    @restorePoint(selection)

class YankLine extends Yank
  @extend()
  target: 'MoveToRelativeLine'

  mutateSelection: (selection) ->
    if @isMode('visual')
      swrap(selection).expandOverLine()
      swrap(selection).preserveCharacterwise()
    super

class YankToLastCharacterOfLine extends Yank
  @extend()
  target: 'MoveToLastCharacterOfLine'

# -------------------------
# FIXME
# Currently native editor.joinLines() is better for cursor position setting

    selection.insertText(text, {@autoIndent})
    @restorePoint(selection) if @setPoint

class ToggleCase extends TransformString
  @extend()
  @registerToSelectList()
