laughing-hipster/.atom/packages/vim-mode/lib/operators/replace-operator.coffee

30 lines
1.1 KiB
CoffeeScript

_ = require 'underscore-plus'
{OperatorWithInput} = require './general-operators'
{ViewModel} = require '../view-models/view-model'
{Range} = require 'atom'
module.exports =
class Replace extends OperatorWithInput
constructor: (@editorView, @vimState, {@selectOptions}={}) ->
super(@editorView, @vimState)
@viewModel = new ViewModel(@, class: 'replace', hidden: true, singleChar: true)
execute: (count=1) ->
pos = @editor.getCursorBufferPosition()
currentRowLength = @editor.lineLengthForBufferRow(pos.row)
# Do nothing on an empty line
return unless currentRowLength > 0
# Do nothing if asked to replace more characters than there are on a line
return unless currentRowLength - pos.column >= count
@undoTransaction =>
start = @editor.getCursorBufferPosition()
_.times count, =>
point = @editor.getCursorBufferPosition()
@editor.setTextInBufferRange(Range.fromPointWithDelta(point, 0, 1), @input.characters)
@editor.moveCursorRight()
@editor.setCursorBufferPosition(start)
@vimState.activateCommandMode()