目前在 Vim 中,当我到达一个新行(或在正常模式下按 'p' 或 'o')时,会出现一个可爱的自动缩进,当我退出插入模式而没有添加任何内容时,它也会消失。
是否有一种方法可以绑定在我退出插入模式之前执行某些操作,例如插入一个幻像字符然后将其删除?
目前在 Vim 中,当我到达一个新行(或在正常模式下按 'p' 或 'o')时,会出现一个可爱的自动缩进,当我退出插入模式而没有添加任何内容时,它也会消失。
是否有一种方法可以绑定在我退出插入模式之前执行某些操作,例如插入一个幻像字符然后将其删除?
啊,我两天前刚看到这个东西,但是我不记得在哪里看到了。
无论如何,诀窍是在<CR>
后立即输入一个字符并立即删除它。有很多方法可以做到:
<CR>a<Esc>x
<CR>a<C-w>
<CR>a<BS>
--编辑--
由于Vim非常灵活,可能还有许多其他的方法。
要自动化这些操作,您需要在您的 .vimrc 文件中添加一个映射:
inoremap <CR> <CR>a<BS> " insert mode mapping for <CR>
nnoremap o oa<BS> " normal mode mapping for o
但我不确定你是否应该这样覆盖默认设置。
--编辑--
然而,Vim的默认行为很烦人,因为你可能需要在非缩进行上输入一些文本之前进行一些<Tab><Tab><Tab><Tab>
或者在完成后使用==
,或者依赖于下一个<CR>
时自动缩进规则。
通过使用<S-S>
,所有这些都可以跳过,直接将你放入正确的缩进级别并进入插入模式。
p
代表“put”,在使用p
后不需要进入INSERT模式。你试过我的三个建议吗?你尝试过<S-s>
吗?还有,为什么在使用o
之后要按<Esc>
?如果你想在代码块之间插入空白行,则行首是否有空格并不重要,对吗?你确定在这种情况下oa<BS>
无法使用吗?你的tabstop
、softtabstop
、expandtab
、shiftwidth
、shiftround
和smarttab
设置是什么? - romainl在正常模式下,尝试使用cc
或S
来根据缩进更改一行。无需虚拟字符。
:h cc
:h S
imap <esc> <esc>:s/\s\+$//<CR>
这个功能可以在插入模式下按下 esc 键后删除末尾的字符。