我有set autoindent
我转到一行,按下A和<CR>
,这会让我转到下一行并插入缩进。但是,如果我按Esc,光标会跳到该行的开头,缩进消失。
我得四处走动,按下制表符才能再次到达正确的地方。
我知道那帮人说:
If you do not type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again.
有没有办法禁用它,或者至少有一个变通办法?
7条答案
按热度按时间wvyml7n51#
两天前我也遇到了同样的问题。
没有方法可以禁用此功能,但幸运的是,您不需要这样做,因为相反:
**使用
S
或cc
**进入插入模式。使用S
再次进入插入模式将进入具有适当缩进级别的插入模式,使得Vim删除缩进的事实变得不重要。**注:**我发现这个技巧在大多数地方都有效。但由于某种原因,它 * 不 * 适用于Python文件。我猜这与Python文件类型干扰了它自己的缩进函数有关,或者沿着的东西。
编辑:
另一个技巧是,你可以定义一种方式,如果你在一个有缩进的行上移动光标,它会保持缩进。这不会解决你马上点击
Esc
的问题,但这是一个相关的问题,可能也会困扰你。vaj7vani2#
一个简单的方法是按'.'(或任何字符),退出,然后按x删除字符。缩进应该保留。
2skhul333#
Alright, I figured this out.
Based on Edan Maor's answer, S or cc should enter insert mode with the proper level of indentation.
...except when it doesn't :)
This works under two circumstances.
cindent
is set, it will insert indent based on C formatting rulesThis may prove annoying when editing non C-like files.
indentexpr
is set.I found that the best solution is to have this is my
.vimrc
Now when I press S or cc, it will insert the same indent as on the previous non-blank line.
ql3eal8s4#
假设我使用'o'来开始一个新行。我在_vimrc中添加了下面的config(注意我有':set autoindent')
ee7vknir5#
键入您文本,然后在正常模式下在该行中按
==
xzabzqsa6#
值得注意的是,使用正确的插件
S
和cc
似乎可以再次正常工作。很可能是python模式修复了这个问题。https://github.com/klen/python-mode
pu3pd22g7#
我本来想达到同样的效果,但因为我想让the plugin showing indent正常工作。这是我的解决方法:我发现
<enter>
在普通模式下几乎没用,它只会把光标向下移动一行,这可以用j
来实现。所以我在我的
.vimrc
中添加了这个:每当我需要一个空行作为缩进时,我就会使用
<enter>
。