Skip to content

Commit 0b14fce

Browse files
committed
Add a couple of compound delete commands
1 parent 17ef56b commit 0b14fce

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

Lib/_pyrepl/reader.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@ def make_default_commands() -> dict[CommandName, type[Command]]:
170170
(r"o", "vi-open-below"),
171171
(r"O", "vi-open-above"),
172172

173+
# Delete commands
174+
(r"dw", "vi-delete-word"),
175+
(r"dd", "vi-delete-line"),
176+
(r"d0", "vi-delete-to-bol"),
177+
(r"d$", "vi-delete-to-eol"),
178+
173179
# Special keys still work in normal mode
174180
(r"\<left>", "left"),
175181
(r"\<right>", "right"),

Lib/_pyrepl/vi_commands.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Vi-specific commands for pyrepl.
33
"""
44

5-
from .commands import Command, MotionCommand
5+
from .commands import Command, MotionCommand, KillCommand
66

77

88
# ============================================================================
@@ -83,3 +83,38 @@ def do(self) -> None:
8383
self.reader.insert('\n')
8484
self.reader.pos -= 1
8585
self.reader.enter_insert_mode()
86+
87+
88+
# ============================================================================
89+
# Delete Commands
90+
# ============================================================================
91+
92+
class vi_delete_word(KillCommand):
93+
"""Delete from cursor to start of next word (dw)."""
94+
def do(self) -> None:
95+
r = self.reader
96+
for _ in range(r.get_arg()):
97+
end = r.vi_forward_word()
98+
if end > r.pos:
99+
self.kill_range(r.pos, end)
100+
101+
102+
class vi_delete_line(KillCommand):
103+
"""Delete entire line content (dd)."""
104+
def do(self) -> None:
105+
r = self.reader
106+
self.kill_range(r.bol(), r.eol())
107+
108+
109+
class vi_delete_to_bol(KillCommand):
110+
"""Delete from cursor to beginning of line (d0)."""
111+
def do(self) -> None:
112+
r = self.reader
113+
self.kill_range(r.bol(), r.pos)
114+
115+
116+
class vi_delete_to_eol(KillCommand):
117+
"""Delete from cursor to end of line (d$)."""
118+
def do(self) -> None:
119+
r = self.reader
120+
self.kill_range(r.pos, r.eol())

0 commit comments

Comments
 (0)