扩展html标签后的Vim光标位置

Dan*_*ang 12 vim indentation

我大多数IDE和现代文本编辑器(Sublime Text 3)在html标记(也称为"扩展"标记)之间插入换行符后,光标正确缩进:

之前:

<div>|</div>
Run Code Online (Sandbox Code Playgroud)

按下CR后:

<div>
    |
</div>
Run Code Online (Sandbox Code Playgroud)

但在Vim中,这就是我得到的:

<div>
|</div>
Run Code Online (Sandbox Code Playgroud)

如何在Vim中获得与大多数其他编辑器相同的行为(见上文)?

rom*_*inl 8

插入模式中唯一正确的行为<CR>是打破光标处的行.

你想要的是一种增强的行为,你需要在你的配置中添加一些内容来获取它:一个映射,一个简短的函数或一个完整的插件.

当我开始使用vim时,这种行为实际上是我添加到vimrc的第一件事.我过去曾多次改变它,但这种映射已经很长时间了:

inoremap <leader><CR> <CR><C-o>==<C-o>O
Run Code Online (Sandbox Code Playgroud)

我习惯于<leader><CR>保持正常的行为<CR>.


这是一个小功能,似乎做你想要的:

function! Expander()
  let line   = getline(".")
  let col    = col(".")
  let first  = line[col-2]
  let second = line[col-1]
  let third  = line[col]

  if first ==# ">"
    if second ==# "<" && third ==# "/"
      return "\<CR>\<C-o>==\<C-o>O"

    else
      return "\<CR>"

    endif

  else
    return "\<CR>"

  endif

endfunction

inoremap <expr> <CR> Expander()
Run Code Online (Sandbox Code Playgroud)