Я знаю, что есть способы автоматически устанавливать ширину текста в vim set textwidth
(например, в колонках Vim 80 ). То, что я ищу, - это что-то похожее =
(команда indent line), но для переноса на 80. Вариант использования: иногда вы редактируете текст с текстовой шириной, и после объединения строк или удаления / добавления текста получается плохо обернутый.
В идеале эта команда полностью реорганизует выбранные строки и отсекает длинные строки, добавляя короткие. Пример:
long line is long!
short
После запуска команды (при условии, что упаковка была 13 столбцов):
long line is
long! short
Если это невозможно с настоящей командой vim, возможно, есть программа командной строки, которая делает это, к которому я могу направить ввод?
После поиска я нашел эту ссылку, у которой есть еще несколько вариантов: http://www.cs.swarthmore.edu/help/vim/reformatting.html
par
. Это фантастика!gq
- Gentleman's Quarterly . (Извиняюсь за антропоморфизацию самца, но мнемоника работает.)Ответы:
Установите
textwidth
значение 80 (:set textwidth=80
), перейдите к началу файла (можно сделать с помощью Ctrl- Homeилиgg
) и введитеgqG
.gqG
форматирует текст, начиная с текущей позиции и до конца файла. Он будет автоматически соединять последовательные строки, когда это возможно. Вы можете поместить пустую строку между двумя строками, если не хотите, чтобы эти две линии были соединены вместе.источник
V}gq
. Таким образом, вы видите, что вы собираетесь отформатировать перед тем, как его отформатировать.q
сам по себе?set tw=80
вместо того,set textwidth=80
чтобы сэкономить времяset textwidth=76
ваши строки будут автоматически переноситься при вводе текста. Моя жалоба состоит в том, что это ничего не делает с существующими строками, которые редактируются. НоV}gq
чрезвычайно полезен в этом отношении.V
входит в режим визуального выбора,}
выбирает следующий разрыв абзаца иgq
запускает на нем текущий форматер (или используетgw
для явного вызова форматера vi). Также{
выберут вверх. Вы можете выбрать весь документ и формат,ggVGgq
хотя, возможно, есть более простой способ. Сохраните это как макрос, используя@
для облегчения. Используйтеvipgq
для поиска текущего абзаца.Решение Майкла является ключевым, но я чаще всего нахожу, что хочу переформатировать оставшуюся часть текущего параграфа; для этого поведения используйте
gq}
.источник
Вы можете использовать
gq
с любыми операторами движения. Например, если вы хотите переформатировать только до конца текущей строки (то есть, чтобы обернуть строку, на которой находится ваш курсор), вы можете использоватьgq$
Вы также можете переформатировать, выбрав текст в визуальном режиме (используя `v и перемещение), а затем набрав gq.
Есть и другие варианты принудительного переноса строк.
Если вы хотите, чтобы vim переносил строки во время вставки в них текста вместо того, чтобы ждать до конца, чтобы реструктурировать текст, вы найдете следующие опции полезными:
(Не отвлекайтесь на
wrap
и иlinebreak
, которые только переформатируют текст, отображаемый на экране, и не меняйте текст в буфере)источник
wrapmargin
справки: Когда 'textwidth' не равен нулю, эта опция не используется.Благодаря комментарию от DonaldSmith я нашел это, поскольку
textwidth
опция не переформатировала мою длинную строку текста (я конвертировал игру с шестнадцатеричными преобразованиями)::%!fold -w 60
Это переформатировало весь файл (который был для меня одной строкой) в строки длиной 60.
источник
Если вы ищете способ без Vim , всегда есть команды UNIX fmt и par .
Ноты:
par
в своей веб-трансляции.Вот как мы могли бы использовать оба для вашего примера.
Чтобы использовать изнутри Vim:
Вы также можете установить
:formatprg
par или fmt и переопределитьgq
. Для получения дополнительной информации звоните:help formatprg
в Vim.источник
Почти всегда использую
gq
в визуальном режиме. Я говорю своим ученикам, что это означает «Джентльменский квартал», журнал для привередливых людей.источник