команда 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 202

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.

почти всегда я использую gq в визуальном режиме. Я говорю своим студентам, что это означает "джентльменский квартал", журнал для привередливых людей.