我有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.
有没有办法禁用此功能,或者至少是一种解决方法?
答案 0 :(得分:6)
直到两天前我才遇到这个问题。
没有方法可以禁用此功能,但幸运的是,您不需要,因为相反:
使用S
或cc
输入插入模式。再次使用S
进入插入模式将进入具有适当缩进级别的插入模式,这使得Vim删除了不重要的缩进。
注意:我发现这个技巧对我来说很有用。但出于某种原因,它确实不使用Python文件。我猜这与使用自己的缩进函数的Python文件类型有关,或类似的东西。
编辑:
另一个技巧是,你可以用一种方式定义cpoptions,如果你在一个缩进的行上并且移动光标,它将保留缩进。此不会立即解决您遇到Esc
的问题,但这是一个可能也会困扰您的相关问题。
答案 1 :(得分:3)
好吧,我想出来了。
根据Edan Maor的回答, S 或 cc 应进入具有适当缩进程度的插入模式。
......除非它没有:)
这在两种情况下有效。
cindent
时,它将根据C格式规则插入缩进
编辑非C类文件时,这可能会很烦人。indentexpr
时。我发现最好的解决方案就是让我的.vimrc
set autoindent
set indentexpr=GetIndent()
function GetIndent()
let lnum = prevnonblank(v:lnum - 1)
let ind = indent(lnum)
return ind
endfunction
现在,当我按 S 或 cc 时,它将插入与前一个非空白行相同的缩进。
答案 2 :(得分:2)
考虑我使用&#39; o&#39;开始换行。我在_vimrc中添加了以下配置(注意我有&#39;:设置autoindent&#39;)
" ugly hack to start newline and keep indent
nnoremap o ox<BS>
nnoremap O Ox<BS>
答案 3 :(得分:1)
一种简单的方法是按'。' (或任何字符),转义,然后按x删除字符。缩进应该保留。
答案 4 :(得分:1)
键入您的文字,然后在该行的正常模式下按==
答案 5 :(得分:1)
值得注意的是,使用适当的插件S
和cc
似乎再次正常工作。很可能是python-mode正在解决这个问题。
答案 6 :(得分:0)
我想要达到同样的效果,但因为我希望the plugin showing indent正常工作。这是我的解决方法:我发现在正常模式下<enter>
几乎没用。它只将光标向下移动一行,这可以通过j
实现。
所以我在.vimrc
中添加了这个:
nmap <cr> o.<c-h><esc>
每当我需要一个空行来缩进时,我会改为使用<enter>
。