LINUX.ORG.RU

vim и выравнивание новой строки между тегами

 ,


0

1

Короче. В других редакторах данное поведение давно реализовано.
Я нуб в Vim и скорее всего не нашел нормального решения, а искал долго.

До:

<div>|</div>

После нажатия CR:
<div>
|</div>

А хочу вот так:
<div>
    |
</div>

Просмотрены темы: https://vi.stackexchange.com/questions/18114/indent-on-new-line-between-html-xml-tags
https://stackoverflow.com/questions/18057421/vim-cursor-position-after-expanding-html-tag

Решения странные и неудобные.

Я пользуюсь таким решением. Оно?

inoremap <expr> <CR> Expander()

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
lead_bro ()

Если у тебя «совсем новый вим», то попробуй:

inoremap <expr> <CR> search('\%.c</', 'n') ? "\<CR>\<ESC>O" : "\<CR>"

С обычным надо подставлять колонку:

inoremap <expr> <CR> search('\%'.col('.').'c</', 'n') ? "\<CR>\<ESC>O" : "\<CR>"

https://i.imgur.com/3wDeurC.gif

habamax ★★★ ()
Последнее исправление: habamax (всего исправлений: 3)
Ответ на: комментарий от theLORdweller

я твою Аву встречал в паре плагинов Vim, пишешь?

да, балуюсь.

Тогда подправь, где ты считаешь, что функция сбоит. Будем признательны.

Эту функцию лень править, вон выше мой вариант.

habamax ★★★ ()
Ответ на: комментарий от habamax

Хм, я два года даже не вспоминал про эту функцию. Проблем с юникодом не встречал.

У меня neovim. Может, с этим связано?

lead_bro ()
Последнее исправление: lead_bro (всего исправлений: 1)
Ответ на: комментарий от habamax

Расшифруй «совсем новый».

Спасибо большое. Vim не из git, поэтому второй вариант. Но планирую собрать и попробовать первый.

Ну и удачи в баловстве. Нужное дело. Я тоже балуюсь, но немного в другом направлении. Я нуб в редакторе.

theLORdweller ()
Ответ на: комментарий от lead_bro

Там col() используется которая дает колонку в байтах, а не символах.

Хотя у тебя потом опять же байтовый доступ до строки, хз, проверять надо. Забей.

habamax ★★★ ()
Последнее исправление: habamax (всего исправлений: 1)