在vim中,如果处于块插入模式(Ctrl-V, Shift-I
)并使用Ctrl-C
(而不是)退出Esc
,它将取消块编辑(仅编辑第一行)。
为什么是这样?在几乎所有其他情况下,Ctrl-C
并且Esc
是同义的。(理想情况下,有一种方法可以解决此问题-我现在已经习惯了Ctrl-C
,如果我必须重新学习,那真是太可惜了……)
在vim中,如果处于块插入模式(Ctrl-V, Shift-I
)并使用Ctrl-C
(而不是)退出Esc
,它将取消块编辑(仅编辑第一行)。
为什么是这样?在几乎所有其他情况下,Ctrl-C
并且Esc
是同义的。(理想情况下,有一种方法可以解决此问题-我现在已经习惯了Ctrl-C
,如果我必须重新学习,那真是太可惜了……)
Answers:
Ctrl-c并且Esc不能保证是同义词,并且经常会有所不同。例如,在“ 插入”模式下,Esc将触发缩写并进入“ 普通”模式,而Ctrl-c不会触发缩写,也不会触发InsertLeave
自动命令并直接进入“ 普通”模式。另一个示例是在旧的vi
命令行模式下,Esc实际上将执行命令,就好像您已经点击了Enter。Vim的故意改变了这一点,因为这种行为被认为是不直观和令人惊讶的,但你仍然可以通过添加启用它x
来'cpoptions'
。
对于逐块可视运算符,blockwise-operators
help标记具有以下文档:
Visual-block Insert *v_b_I*
With a blockwise selection, I{string}<ESC> will insert {string} at the start
of block on every line of the block, provided that the line extends into the
block. Thus lines that are short will remain unmodified. TABs are split to
retain visual columns.
请注意,仅Esc
提及,未提及Ctrl-c
。
因此,不,Ctrl-c并且Esc不是等效的。放弃自己的误解永远都不可耻。一旦意识到这一点,就可以决定下一步要做什么。显而易见的选择是学习差异并使用正确的键,或者确定您不需要其中一个键的功能,然后重新映射以匹配另一个键。
尝试:map ^C esc
通过 CTRL+ v然后CTRL+ 输入“ ^ C”的位置c。
:!cat
仍然似乎在映射后具有所需的效果。如果遇到问题,可以尝试,例如stty intr \^k
在shell提示符下,将终端的中断字符更改为CTRL-k。
vnoremap <C-c> <Esc>
记住您的讲话。