LINUX.ORG.RU

Vim умные переносы. Как?

 ,


0

2

Хочется умных переносов, учитывающих отступ первой строки.

For example rather than

<p>
    <a href="http://www.example.com">
        This is a bogus link, used to demonstrate
an example
    </a>
</p>

it would appear as

<p>
    <a href="somelink">
        This is a bogus link, used to demonstrate
        an example
    </a>
</p>

Есть ориентировочное решение. Правда, оно требует пересборки vim'а, чего не хочется, ибо, дебиан и при следующем обновлении процедуру надо будет повторять.

Может ЛОР знает решения на основе плагина или ещё какого-нибудь трюка, который не требует пересборки?

P.S. перенос строк не должен сохраняться в исходном файле, как это происходит при использовании textwidth, wrapmargin, а лишь отображаться на экране.

  test test test
  test test test
  test

Поставил

set autoindent
set smartindent
"Для проверки:
set textwidth=20

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

Хм, без установки textwidth первый отступ не учитывает, с учётом же textwidth=xx переносит как и хотелось, но не учитывает установленный символ переноса (set showbreak=~\).

Жёстко ограничивать длину строки, конечно, не хочется, но как вариант принимается.

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

Жёстко ограничивать длину строки, конечно, не хочется, но как вариант принимается.

Посмотри :help 'wm. Вроде то же, но отсчитывается от правого края.

В смысле сделал себе окошко как хочешь и попёр набирать.

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

Хм. У меня оно так по умолчанию. Gentoo.

version 7.3.762                                                                                          
by Bram Moolenaar et al.                                                                                     
Modified by Gentoo-7.3.762

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

А чего в генте такая старая версия? Дебиан: 7.4.225

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

Есть новее, просто я на стабильной ветке. Кстати, оказалось, что у меня по умолчанию

set autoindent
включено, так что ничего патчеспецифичного.

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

Погуглил и оказалось, что существует два способа переносить текст. Через «set wrap», при этом сам текст не изменяется, изменяется всего лишь его отображение на экране. При этом перенос всегда идёт в начало строки. И есть второй способ, через textwidth и marginwidth, который вставляет переносы строк в местах переноса слов.

Таким образом, напечатав test test test из первого поста, получив текст с переносом, сохранив результат, в файле мы получим «отформатированный» текст с переносами строк.

В общем, остаюсь на set wrap; set smartindent.

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

включено, так что ничего патчеспецифичного.

Вопрос не в наличии переноса строк, а в том, чтобы перенос учитывал вложенность переносимого текста т.е., учитывал бы первый отступ текста (см. положение «an example» из темы).

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

В общем, остаюсь на set wrap

Так переноса-то по факту не будет. Набери длинную строку и подвигай границы окошка (в терминале или gvim).

Это типа «показывать весь текст на экране». Т.е. строки длиннее переносятся только для вида. Обычно в начале такие строки помечаются символом «>» как раз что бы не путали.

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

Так ведь «set wrap» лишь создаёт видимость переноса длинной строки, а «set autoindent» как раз учитывает отступ при переносе. Или я тебя не совсем понимаю и мы говорим о разном?

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

Так переноса-то по факту не будет.

Это и нужно, чтобы строки переносились только на экране. Но, таким образом, чтобы переносимые строки начинались не с начала строки, а с того же символа, что и начало строки.

1 if var == 10                           |
2     print “Очень очень большая строка, |
~     без символов переноса."            |
3       if b == 5                        |
4           print "Вторая очень длинная  | 
~           строка. Перенос уже с другим |
~           отступом."                   |
5       end                              |
6 end                                    |

Сейчас переносимые строки строки сейчас начинаются с начала строки, что очень неудобно, когда в латехе оформляешь вложенный нумерованный список.

Подход к оформлению исходного текста в латехе: одна строка исходного текста - один абзац.

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

Я может очевидную глупость скажу, но возможно тебе при set tw=xx нужно выделить шифт-v и потом Q? Также gqap, gql какое-нибудь?

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

set tw=xx

textwidth вставляет переносы в сам файл, чего мне не надо т.к., файлы редактируются на разных мониторах (больших и малых).

Jurik_Phys ★★★★★ ()

Обраружен костыль в виде плагина к виму. Работоспособность не исследована.

Ключевые слова для поиска breakindent

Jurik_Phys ★★★★★ ()

Решение с патчем из топика работает хорошо. Инструкцию по сборке deb-пакетов vim'а с данным патчем описал здесь.

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

тут кроме как патчем ИМХО никак. А паке vim посто заблокируй, что-бы он сам не обновлялся.

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

Собственно, так и пришлось сделать (поставить холд на пакеты vim'a).

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