我在 Vi 模式下使用 Zsh。
当$KEYMAP == vicmd
(即command-mode)时,我想按退格键将光标向左移动一个字符,而不删除任何内容。[在职的]
当$KEYMAP == viins && $ZLE_STATE == *insert*
(即insert-mode)时,我想按退格键将光标向左移动一个字符,删除该行上紧接的前一个字符。[在职的]
当$KEYMAP == viins && $ZLE_STATE == *overwrite*
(即覆盖模式/替换模式)时,我想按退格键将光标向左移动一个字符,将行上的前一个字符恢复为进入覆盖模式之前最初存在的字符. [不工作]
这是一个例子:
# [COMMAND MODE] We start with the following string on the command line:
$ Hello, world!
^
cursor position
# [REPLACE MODE] Now, I hit "R" to enter replace-mode and I type "stuff".
$ Helstufforld!
^
cursor position
# [REPLACE MODE] Finally, I hit backspace 3 times.
$ Helst, world!
^
cursor position
上面的例子显示了当我在覆盖模式下
按退格键时我想要发生的事情;但是,真正发生的情况如下:
# [COMMAND MODE] We start with the following string on the command line:
$ Hello, world!
^
cursor position
# [REPLACE MODE] Now, I hit "R" to enter replace-mode and I type "stuff".
$ Helstufforld!
^
cursor position
# [REPLACE MODE] Finally, I hit backspace 3 times.
$ Helstworld!
^
cursor position
请注意,在第二个示例中按下退格键时,不是恢复刚刚被覆盖的原始 3 个字符(即", w"
),而是删除了替换这些字符的最后 3 个字符(即"uff"
),以及光标右侧的字符被移到了左边。
如何获得我想要的行为?