18

我有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.

有没有办法禁用它,或者至少有一种解决方法?

4

7 回答 7

8

直到两天前我才遇到这个确切的问题。

没有办法禁用它,但幸运的是,您不需要这样做,因为相反

S使用或进入插入模式cc。再次S进入插入模式 将进入具有适当缩进级别的插入模式,使得 Vim 删除缩进的事实变得不重要。

注意:我发现这个技巧在大多数地方都对我有用。但由于某种原因,它不适用于 Python 文件。我猜这与 Python 文件类型与它自己的缩进函数或类似的东西有关。

编辑:

另一个技巧,您可以定义 cpoptions ,如果您在带有缩进的行上并移动 cursor,它将保留缩进。这不会立即解决您的击球问题Esc,但它是一个可能也困扰您的相关问题。

于 2012-04-28T19:44:09.270 回答
4

一个简单的方法是按'。(或任何字符),转义,然后按 x 删除字符。缩进应该保留。

于 2012-04-28T14:08:55.747 回答
4

好吧,我想通了。

根据 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

现在,当我按Sor时cc,它将插入与前一个非空行相同的缩进。

于 2012-04-30T08:45:45.887 回答
3

考虑我使用 'o' 开始换行。我在 _vimrc 中添加以下配置(注意我有 ':set autoindent')

" ugly hack to start newline and keep indent
nnoremap o ox<BS>
nnoremap O Ox<BS>
于 2015-06-10T07:21:17.053 回答
1

键入您的文本,然后==在该行中按正常模式

于 2012-04-28T18:37:52.057 回答
1

值得注意的是,使用适当的插件S并且cc似乎再次正常工作。很可能是 python-mode 正在解决这个问题。

https://github.com/klen/python-mode

于 2013-07-06T23:50:19.117 回答
0

我本来想达到同样的效果,但是因为我希望显示缩进的插件能够正常工作。这是我的解决方法:我发现<enter>在正常模式下几乎没用。它只会将光标向下移动一行,这可以通过j.

所以我在我的.vimrc

nmap <cr> o.<c-h><esc>

每当我需要一个空行来缩进时,我都会使用它<enter>

于 2014-03-21T02:49:02.327 回答