这是当观察到不完全熟悉的人不自然的编辑器行为时出现的一个普遍问题vim
:
- 输入
insert
然后退出立即改变光标位置 - 删除并粘贴(错误地) a
[ ]word
会产生some[ ][ ]wordand the rest
(为了清晰起见,标记了空格[ ]
)
假设有一个vim
类似的编辑器,它定义了文本总是粘贴、插入、添加到光标位置左侧的约定,除非另有说明。当然,它需要允许将光标悬停在换行符上(例如允许删除它)。
这是否会使这样的编辑器设计不佳(例如与其自己的命令和动作不一致)?
换句话说,vim
约定是任意的还是精心设计的?
答案1
Sato Katsura 和 Julie Pelletier 已经消除了您的困惑,Vim 有大量命令和选项可供您使用。我将讨论插入模式如此工作的一些原因。
在终端中,一个字符是不是始终位于光标下方,例如:
- 光标可能位于 EOL 上方
- 光标可能位于换行符上,但换行符是终端中不显示的字符。
在 Vim 中,甚至normal mode
光标也可以位于没有字符的位置。要查看此行为,请注意a并i在空行上执行相同的操作。
采用不同输入方式的另一个原因insert-mode
是模式搜索将光标从当前光标位置移动到匹配的开头。由于您可以将光标移动到匹配的长度上,因此您希望插入命令在匹配之前进入插入模式。
还要注意,输入/会将normal-mode
光标暂时向前移动一个字符,这样可以重复搜索相同模式的新匹配。
答案2
我不明白你的困惑,但有非常严格的说明,vi
其中vim
扩展:
i: insert text before the cursor
I: insert text at the beginning of the line
a: append text after the cursor
A: append text at the end of the line
p: paste the buffer after the cursor
P: paste the buffer before the cursor
这样的例子不胜枚举。