Напротив заполнения абзаца

25

Emacs имеет функцию fill-paragraph. Есть ли функция, которая будет делать противоположное этому?

У меня есть абзац, который уже заполнен, и вместо этого я хочу, чтобы он был одной строкой?

Сиби
источник
1
fill-paragraphэто не оправдывает пункт, если вы не используете префикс аргумент или передать его не- nilпервый аргумент. Смотрите (emacs)Fill Commands .
Дрю

Ответы:

20

Цитата из Emacs Wiki , Стефана Монье:

Незаполнение абзаца объединяет все строки абзаца в одну строку. Это противоположность FillParagraph .

Это работает, когда строка заканчивается символом новой строки (”\ n”), а абзацы разделяются пустыми строками. Чтобы завершить абзац новой строкой, используйте функцию ниже:

;;; It is the opposite of fill-paragraph    
(defun unfill-paragraph ()
  "Takes a multi-line paragraph and makes it into a single line of text."
  (interactive)
  (let ((fill-column (point-max)))
    (fill-paragraph nil)))

И привязать его к ключу:

 ;; Handy key definition
 (define-key global-map "\M-Q" 'unfill-paragraph)

Смотрите также UnfillRegion и UnwrapLine .

Люк
источник
12
Это прямая копия со страницы Emacs Wiki UnfillParagraph с удаленным указанием автора (Stefan Monnier). Полезно разместить информацию здесь, но, по крайней мере, поясните, кто написал код и ссылку на эту вики-страницу.
Дрю
12
Просто вежливо добавлять атрибуцию, когда вы используете чужую информацию.
Никель
2
Спасибо Малабарбе за внесение изменений. @KingShimkus: Никель объяснил, почему это лучше.
Дрю
2
Если вы публикуете материалы, написанные кем-то другим , вы должны подтвердить свои источники.
Жиль "ТАК - перестань быть злым"
1
Обратите внимание, что ссылка на источник изменилась. Я отредактировал это в ответе.
smonff
4

Мой метод - поместить курсор в последнюю строку абзаца и нажать M-^несколько раз.

Прелесть этого ярлыка в том, что помимо соединительных линий он сводит любое количество отступов в единое целое.

Rajish
источник
AFAIK, вы можете сделать, M-^и вам нужно только удерживать клавишу. Функция названа delete-indentation.
Расмус
Как называется функция M-S-^, у меня она не работает?
Сиби
Да, функция delete-indentationи ярлык описан в Emacs какM-^ - shift ( S) был добавлен мной, потому что вы все равно должны его удерживать. Извините за недопонимание.
Раджиш
2

Есть unfillпакет для этого сейчас.

Предоставляет команды для явного незаполнения (т. Е. Разворачивания) абзацев и областей, а также команду, которая будет переключаться между заполнением и незаполнением текущего абзаца или области.

Он основан первоначально на XAH Ли примеры , а затем переписан на основе статьи Артура Malabarba

Это обеспечивает следующее:

M-x unfill-region
M-x unfill-paragraph
M-x unfill-toggle
M-x toggle-fill-unfill

Удобно добавить удобную комбинацию клавиш по вашему выбору, например:

(global-set-key (kbd "<f8>") 'toggle-fill-unfill)
smonff
источник
Можете ли вы предоставить больше информации об этом @easyE?
Smonff
1
Моя ошибка: код , основанный на примерах XAH Ли уже не была включена как часть Emacs, но [ это включено в пакет MELPA] ( melpa.org/#/unfill ).
easyE
@easyE Я не понимаю разницы между вашим комментарием и содержанием моего ответа, извините.
Smonff
Я не утверждал, что это разница. Я ошибался, полагая, что незаполненный пакет был включен в Emacs 25, а затем я исправил себя.
easyE
1

Как всегда, есть несколько способов сделать это, поэтому я добавлю еще один ответ:

  1. Отметить абзац: M-h

  2. Запрос заменить символ новой строки пробелом в регионе:

    M-% C-q C-j RET SPC RET !

itsjeyd
источник
0

Заполнение для бедного может также быть выполнено, сначала установив fill-columnкакое-то смехотворно высокое значение (я использую 9999), а затем заполняя. Так , например, C-u 9999 C-x f M-q C-u 70 C-x f. (Кроме того , вы можете предпочесть , C-9 C-9 C-9 C-9чтобы C-u 9999.)

mbork
источник
0

В режиме Зла есть Jпривязка клавиш normal modeиз VIM. Он соединяет строку ниже и текущую строку в одну строку. Таким образом, нажав его несколько раз, вы можете отменить заполнение абзаца.

Ленар Хойт
источник