LINUX.ORG.RU

Как выпрыгнуть из тега в insert mode?

 ,


0

3

Я использую для html/xml и прочего с тегами: Emmet. У меня он замаплен на jk в insert mode, что очень удобно.

Вопрос вот в чем, (какой бы вы плагин или методику не использовали для автозакрытия тега): как выпрыгнуть из тега не выходя из insert mode?

Например:

<article>This is <i>italic█</i>░</article>

█ — это курсор, ░ — куда мне нужно попасть.

Я, получается, вводил: ijk italic и оказался там, как теперь мне выпрыгнуть из тега <i> и продолжать писать далее в теге article?

Мапили как-то? Как решаете наиболее эффективно эту проблему?

я обычно пишу текст, а потом surround'ом обрамляю в теги.

habamax ★★ ()

В твоем случае могут помочь сниппеты. Тогда по табу сможешь вылезать за пределы тега.

habamax ★★ ()

Как вариант, замапить на что-нибудь команду в стиле <c-o>:normal! f>l<cr>.

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

пишу текст, а потом surround'ом

это же дольше и неудобнее, как по мне.

могут помочь сниппеты.

какие сниппеты?

Мне вполне подходит:

imap <F12> <C-o>f><C-o>a
просто интересно, как другие решают этот момент.

redhat ()
Ответ на: комментарий от xaizek

да-да, я использую сейчас:

imap <F12> <C-o>f><C-o>a
просто интересно, если ли более универсальное решение, либо же изкоробочные прыжки по тегам в insert mode.

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

Что-нибудь по такому принципу может быть удобнее (код не претендует ни на что, сделал для примера):

function! SkipClosingTag()
    let l:line = getline('.')
    let l:col = col('.') - 1
    if l:line[l:col] == '<' && l:line[l:col + 1] == '/'
        let l:r = "\<right>"
        for i in range(stridx(l:line[l:col :], '>'))
            let l:r .= "\<right>"
        endfor
        return l:r
    endif
    return '>'
endfunction

inoremap <expr> > SkipClosingTag()

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

ставишь плагин со сниппетами, если нет нужного сниппета, добавляешь.

Вешаешь его на i.

Потом пишешь This is i<tab>sparta<tab>

и в результате у тебя текст

This is <i>sparta</i>|

с курсором после закрывающего тега.

Но мне больше surround нравится.

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

в общем, на данный момент мне представляется наиболее удобной следующая конфигурация:

au FileType html,xhtml,xml      imap <F8>      <C-o>f><C-o>a
au FileType html,xhtml,xml      imap <F5>      <C-o>F<
т.е. F5 для прыжка до тега и F8 после него, в insert mode.

redhat ()

Я бы написал функцию (на подобии как у xaizek), замапленную на jk, в которой выбирал что использовать: сниппеты, Emmet, что-то своё — в зависимости от контекста. Но в этом случае придётся залезть во внутреннее устройство плагинов.

Алсо, можно писать текст в markdown/rst/etc и конвертировать в html/xml/etc.

salsa ()

Делать несколько действий в разных местах за один insert — зло. Как потом отменить одно из них?

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

тот уровень u , который при вышеуказанном маппинге предоставляется — вполне устраивает, например вот такой результат:

  <p>this is <i>italic</i> test</p>
откатывается на:
  <p>this is <i></i></p>
  <p>this is i</p>
  <p></p>
мне норм.

redhat ()
Ответ на: комментарий от salsa

слишком мудренно, что может быть проще нажатия одной кнопки?

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

Нажатию *другой* кнопки. А так у тебя один jk на всё что связано с сокращениями, аббревиатурами и подобным. Хотя мудренно, согласен.

salsa ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.