30 lines
1.1 KiB
CoffeeScript
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()
|