|
2 | 2 | Vi-specific commands for pyrepl. |
3 | 3 | """ |
4 | 4 |
|
5 | | -from .commands import Command, MotionCommand |
| 5 | +from .commands import Command, MotionCommand, KillCommand |
6 | 6 |
|
7 | 7 |
|
8 | 8 | # ============================================================================ |
@@ -83,3 +83,38 @@ def do(self) -> None: |
83 | 83 | self.reader.insert('\n') |
84 | 84 | self.reader.pos -= 1 |
85 | 85 | 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