web-dev-qa-db-ja.com

Emacsで、2行を1つに結合する方法は?

Emacsは初めてです。私はこれをググってみましたが、良い答えはありません。それらの1つはCtrl-n Ctrl-aバックスペースですこれは動作しますが愚かです。行のブロックを単一の行に結合する迅速で簡単な方法はありますか?

実際、Esc-qを使用して段落を自動入力できるようになりましたが、元に戻すことなく元に戻すにはどうすればよいですか?

46
jcadam

Esc-qコマンドを使用する前に、一時的に塗り幅を調整して、このための新しいコマンドを定義できます。

;; -- define a new command to join multiple lines together --
(defun join-lines () (interactive)
 (setq fill-column 100000)
 (fill-paragraph nil)
 (setq fill-column 78)
)

明らかにこれは、段落が100000文字未満の場合にのみ機能します。

3
Ralph

参加して呼び出す必要がある行のグループのlast行の任意の場所にポイントを配置します

M-^

すべての行がマージされるまで繰り返し。

注:現在結合されているすべての行の間に1つのスペースが残ります。

177
Ray Vega

M-x join-lineは2行を結合します。便利なキーストロークにバインドするだけです。

32
pgs

改行を何も置き換えないでください。

8
Tal Pressman

Multiple Cursors M- ^と組み合わせると、選択されたすべての行が1つに折りたたまれ、余分な空白がすべて削除されます。

たとえば、バッファ全体を選択し、複数カーソルモードを呼び出し、1行に折りたたみ、次に複数カーソルモードを無効にします。

C-x h
M-x mc/edit-lines
M-^
C-g
7
huntar

SublimeのテキストJで行を結合する方法が好きなので、次のようにします。

(defun join-lines (arg)
  (interactive "p")
  (end-of-line)
  (delete-char 1)
  (delete-horizontal-space)
  (insert " "))
5
Mark

Emacsの「結合」の慣習的な名前は「フィル」です。はい、2つの行をM-^で結合できます-これは便利です-より一般的にはn lines。これについては、fill*fill-regionなどのfill-paragraphコマンドを参照してください。

入力できるものを選択する方法の詳細については、 this を参照してください。

4
Micah Elliott

以下の関数を使用して「M-J」にバインドします。

(defun concat-lines ()
  (interactive)
  (next-line)
  (join-line)
  (delete-horizontal-space))

カーソル位置を保持したい場合は、 save-excursion を使用できます。

3
yuki morphs

「元に戻すことなく元に戻すにはどうすればよいですか?」:

(defun toggle-fill-paragraph ()
  ;; Based on http://xahlee.org/emacs/modernization_fill-paragraph.html
  "Fill or unfill the current paragraph, depending upon the current line length.
When there is a text selection, act on the region.
See `fill-paragraph' and `fill-region'."
  (interactive)
  ;; We set a property 'currently-filled-p on this command's symbol
  ;; (i.e. on 'toggle-fill-paragraph), thus avoiding the need to
  ;; create a variable for remembering the current fill state.
  (save-excursion
    (let* ((deactivate-mark nil)
           (line-length (- (line-end-position) (line-beginning-position)))
           (currently-filled (if (eq last-command this-command)
                                 (get this-command 'currently-filled-p)
                               (< line-length fill-column)))
           (fill-column (if currently-filled
                            most-positive-fixnum
                          fill-column)))
      (if (region-active-p)
          (fill-region (region-beginning) (region-end))
        (fill-paragraph))
      (put this-command 'currently-filled-p (not currently-filled)))))
(global-set-key (kbd "M-q") 'toggle-fill-paragraph)
0
CodyChan

From EmacsWiki:Unfill Paragraph から

 ;;; Stefan Monnier <foo at acm.org>. It is the opposite of fill-paragraph    
    (defun unfill-paragraph (&optional region)
      "Takes a multi-line paragraph and makes it into a single line of text."
      (interactive (progn (barf-if-buffer-read-only) '(t)))
      (let ((fill-column (point-max))
            ;; This would override `fill-column' if it's an integer.
            (emacs-LISP-docstring-fill-column t))
        (fill-paragraph nil region)))
0
Marduk

join-lineは2行の間に1つのスペースを残します。また、2行の結合のみをサポートします。スペースを1つ残さずに多くの行を結合したい場合は、次のように「検索置換」モードを使用して解決できます。

  1. C-%
  2. クエリ:入力C-q C-jEnter
  3. 置換:Enter
  4. 交換を実行します。 Enter

できました。

0
user5698801