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


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 , а атрибуцію автора (Стефана Моньє) видалено. Тут корисно розмістити інформацію, але принаймні уточнити, хто написав код та посилання на цю сторінку вікі.
— Дрю

12
Просто ввічливо додавати атрибуцію, коли ви використовуєте чужу інформацію.
— nicael

2
Дякуємо Малабарбі за внесення змін. @KingShimkus: nicael пояснив, чому це краще.
— Дрю

2
Якщо ви публікуєте вміст, написаний кимось іншим , ви повинні підтвердити свої джерела.
— Жил "ТАК - перестань бути злим"

1
Зверніть увагу, що посилання на джерело змінено. Я відредагував це у відповіді.
— smonff

4

Моїм методом було б розміщення курсору в останньому рядку абзацу та натискання M-^декількох разів.

Краса цього ярлика полягає в тому, що поряд з з'єднанням ліній він зменшує будь-яку кількість проміжків відступу в єдине ціле.


AFAIK, ви можете це зробити, M-^і вам потрібно лише утримувати клавішу. Функція названа delete-indentation.
— rasmus

Що таке ім'я функції 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

У режимі Evil є Jприв'язка ключа normal modeвід VIM. Він з'єднує рядок нижче і поточний рядок в один рядок. Отже, натиснувши його кілька разів, ви можете скасувати абзац.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.