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


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: Никель объяснил, почему это лучше.
Дрю


1
Обратите внимание, что ссылка на источник изменилась. Я отредактировал это в ответе.
smonff

4

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

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


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)

Можете ли вы предоставить больше информации об этом @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 !


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.)


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.