Skip to content

Commit 9d15fbc

Browse files
lieryanjonathanslenders
authored andcommitted
Implement repeat last substitution
1 parent a090d5f commit 9d15fbc

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

pyvim/commands/commands.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,8 +710,16 @@ def set_scroll_offset(editor, value):
710710

711711

712712
def substitute(editor, range_start, range_end, search, replace, flags):
713+
if editor.last_substitute_text and replace is None:
714+
replace = editor.last_substitute_text
715+
else:
716+
editor.last_substitute_text = replace
717+
713718
if not search:
714719
search = editor.application.current_search_state.text
720+
else:
721+
editor.application.current_search_state.text = search
722+
715723
if flags == 'g':
716724
transform_callback = lambda s: re.sub(search, replace, s)
717725
else:

pyvim/editor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ def key_pressed(_):
129129
# Command line previewer.
130130
self.previewer = CommandPreviewer(self)
131131

132+
self.last_substitute_text = ''
133+
132134
def load_initial_files(self, locations, in_tab_pages=False, hsplit=False, vsplit=False):
133135
"""
134136
Load a list of files.

tests/test_substitute.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,17 @@ def test_substitute_from_search_history(editor, editor_buffer):
6767
assert 'Violets are pretty,' in editor_buffer.buffer.text
6868

6969

70+
def test_substitute_with_repeat_last_substitution(editor, editor_buffer):
71+
given_sample_text(editor_buffer, 'Violet is Violet\n')
72+
editor.application.current_search_state.text = 'Lily'
73+
74+
handle_command(editor, ':s/Violet/Rose')
75+
assert 'Rose is Violet' in editor_buffer.buffer.text
76+
77+
handle_command(editor, ':s')
78+
assert 'Rose is Rose' in editor_buffer.buffer.text
79+
80+
7081
def test_substitute_flags_empty_flags(editor, editor_buffer):
7182
given_sample_text(editor_buffer, 'Violet is Violet\n')
7283
handle_command(editor, ':s/Violet/Rose/')

0 commit comments

Comments
 (0)