команда vim для реструктуризации / принудительного преобразования текста в 80 столбцов
Я знаю, что есть способы автоматически установить ширину текста в vim с помощью set textwidth (как Vim 80 макет столбца касается). То, что я ищу, это что-то похожее на = (команда отступа строки) но обернуть до 80. В случае использования иногда вы редактируете текст с помощью textwidth, и после соединения строк или удаления/добавления текста он выходит плохо обернутым.
В идеале эта команда полностью реорганизует строки, которые я выбираю, и отрубает длинные строки при добавлении к коротким те. Пример:
long line is long!
short
после выполнения команды (предполагая, что обертка была 13 cols):
long line is
long! short
если это невозможно с истинной командой vim, возможно,есть программа командной строки, которая делает это, что я могу передать вход?
после поиска я нашел эту ссылку, которая имеет еще несколько вариантов: http://www.cs.swarthmore.edu/help/vim/reformatting.html
6 ответов:
Set
textwidthдо 80 (:set textwidth=80), переход к началу файла (можно сделать с помощью Ctrl -дома илиgg), и типаgqG.
gqGформаты текста, начиная с текущей позиции и до конца файла. Он будет автоматически соединять последовательные строки, когда это возможно. Вы можете разместить пустую строку между двумя строками, если вы не хотите, чтобы эти двое объединились.
решение Майкла является ключевым, но я чаще всего нахожу, что хочу переформатировать остальную часть текущий абзац; для этого поведения используйте
gq}.
можно использовать
gqС любыми операторами движения. Например, если вы хотите переформатировать только конец текущей строки (т. е. обернуть строку, на которой находится курсор), вы можете использоватьgq$вы также можете переформатировать, выбрав текст в визуальном режиме (используя `v и перемещение), а затем набрав gq.
есть и другие варианты для принудительного переноса линий.
если вы хотите, чтобы vim обернул ваши строки, Когда вы вставляете в них текст вместо того, чтобы подождите до конца, чтобы реструктурировать текст, вы найдете эти параметры полезными:
:set textwidth=80 :set wrapmargin=2(Не отвлекайтесь на
wrapиlinebreak, который только переформатирует текст, отображаемый на экране, и не изменяет текст в буфере)
благодаря комментарию от DonaldSmith я нашел это, как
textwidthопция не переформатировала мою длинную строку текста (я конвертировал игру с шестнадцатеричными преобразованиями в байт):
:%!fold -w 60это переформатировало весь файл (который был одной строкой для меня) в строки длиной 60.
если вы ищете non-Vim кстати, всегда есть команды UNIX fmt и par.
Примечания:
- я не могу комментировать Unicode, он может или не может вести себя по-другому.
- @nelstrom уже упоминал использование
parв его трансляции.вот как мы будем использовать как пример.
$ echo -e 'long line is long!\nshort' > 3033423.txt $ cat 3033423.txt long line is long! short $ fmt -w 13 3033423.txt long line is long! short $ par 13gr 3033423.txt long line is long! shortиспользовать внутри ВИМ:
:%! fmt -w 13 :%! par 13grвы также можете установить
:formatprgдля par или fmt и переопределитьgq. Для получения дополнительной информации, позвоните:help formatprgв Vim.