Naprzeciwko akapitu wypełnienia

25

Emacs ma funkcję fill-paragraph. Czy jest jakaś funkcja, która działa odwrotnie?

Mam akapit, który jest już wypełniony, a zamiast tego chcę go w postaci pojedynczego wiersza?

Sibi
źródło
1
fill-paragraphnie nie uzasadniają akapit, chyba że używasz argumentu prefiksu lub przekazać ją nie- nilpierwszy argument. Zobacz (emacs)Fill Commands .
Drew

Odpowiedzi:

20

Cytując z Emacs Wiki , Stefan Monnier:

Wypełnienie akapitu łączy wszystkie wiersze akapitu w jeden wiersz. Jest to sprzeczne z FillParagraph .

Działa tam, gdzie linia kończy się znakiem nowej linii („\ n”), a akapity są oddzielone pustymi liniami. Aby akapit kończył się pojedynczym znakiem nowej linii, użyj poniższej funkcji:

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

I aby powiązać go z kluczem:

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

Zobacz także UnfillRegion i UnwrapLine .

Luke
źródło
12
Jest to prosta kopia ze strony Emacs Wiki UnfillParagraph , z usuniętą informacją o autorze (Stefan Monnier). Pomocne jest opublikowanie informacji tutaj, ale przynajmniej wyjaśnienie, kto napisał kod i link do tej strony wiki.
Drew
12
Dodanie atrybucji jest po prostu grzeczne, gdy używasz cudzych informacji.
nicael
2
Dzięki Malabarba za dokonanie zmian. @KingShimkus: nicael wyjaśnił, dlaczego tak jest lepiej.
Drew
2
Jeśli publikujesz treści napisane przez kogoś innego , musisz potwierdzić swoje źródła.
Gilles „SO- przestań być zły”
1
Uwaga: zmieniono link do źródła . Zredagowałem to w odpowiedzi.
smonff,
4

Moją metodą byłoby umieszczenie kursora w ostatnim wierszu akapitu i kliknięcie M-^kilka razy.

Piękno tego skrótu polega na tym, że oprócz linii łączących, zmniejsza on dowolną liczbę wcięć w jednym.

Rajish
źródło
AFAIK, możesz to zrobić M-^i potrzebujesz tylko przytrzymać klawisz. Funkcja nosi nazwę delete-indentation.
rasmus
Jaka jest nazwa funkcji M-S-^, wydaje się, że nie działa dla mnie?
Sibi
Tak, funkcja jest taka, delete-indentationa skrót jest opisany w Emacsie jako M-^- shift ( S) został dodany przeze mnie, ponieważ i tak musisz go przytrzymać. Przepraszam za zamieszanie.
Rajish
2

Teraz jest na to unfillpakiet .

Udostępnia polecenia do jawnego wypełniania (tj. Rozpakowywania) akapitów i regionów, a także polecenia, które będą przełączać się między wypełnianiem i wypełnianiem bieżącego akapitu lub regionu.

Jest on oparty początkowo na Xah Lee przykładów , a później przerobione na podstawie artykułu autorstwa Artura Malabarba

Zapewnia następujące:

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

Dogodnie jest dodać dowolną przydatną klawiaturę, taką jak:

(global-set-key (kbd "<f8>") 'toggle-fill-unfill)
smonff
źródło
Czy możesz podać więcej informacji na temat tego @easyE?
smonff
1
Mój błąd: kod oparty na przykładach Xah Lee nie został włączony jako część Emacsa, ale [ jest zawarty jako pakiet MELPA] ( melpa.org/#/unfill ).
easyE
@easyE Przepraszam, nie rozumiem różnicy między twoim komentarzem a treścią mojej odpowiedzi.
smonff
Nie twierdziłem, że to różnica. Myliłem się, sądząc, że wypakowanie wypakowane zostało zawarte w Emacsie 25, a potem poprawiłem się.
easyE
1

Jak zawsze istnieje kilka sposobów, aby to zrobić, więc wrzucę kolejną odpowiedź w ringu:

  1. Zaznacz akapit: M-h

  2. Zapytanie zastąp znak nowej linii spacją w regionie:

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

itsjeyd
źródło
0

fill-columnWypełnienie biednego człowieka można również zrobić, ustawiając najpierw na absurdalnie wysoką wartość (używam 9999), a następnie wypełniając. Na przykład C-u 9999 C-x f M-q C-u 70 C-x f. (Również, może wolisz C-9 C-9 C-9 C-9, aby C-u 9999).

Mbork
źródło
0

W trybie zła Jklucz jest powiązany normal modez VIM. Łączy linię poniżej i bieżącą linię w jedną linię. Naciskając go wiele razy, możesz cofnąć wypełnienie akapitu.

Lenar Hoyt
źródło