2009-07-02 16 views
39

私はEmacsを初めて使っています。私はこれをグーグルで見つけましたが、そこには良い答えはありません。そのうちの1つが Ctrl-n Ctrl-aバックスペース これは機能しますが、愚かです。 1行のブロックを1行にまとめる素早く簡単な方法はありますか?Emacsでは、2行を1つに結合する方法は?

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

+1

アイデアのために、私はにバインドします。 – Ralph

+0

"元に戻す"コマンドは通常、C-_(コントロールアンダースコア)にバインドされています... – dmckee

+2

通常はC-e C-d – sharjeel

答えて

3

あなたは一時的に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文字が含まれている場合。

+9

埋める列を追い払ってくれるがなければ、それは だろう(defunの参加-ライン() (インタラクティブ) (みましょう((記入-列999999)) (フィル段落はnil))) – huaiyuan

+0

うん。これはもっと優雅なはずです。 – jcadam

+0

これはどうですか?レイとして (関数定義unfill-段落() ) "フィル段落の反対の動作をし、" (インタラクティブ((()(ポイント-MAX)列を記入してみましょう) (フィル段落nilを))) – Gyom

6

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

27

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

+0

はいです。できます。しかし、それはいくつかの行(3行以上)のブロックには役に立たない。この目的のために有用なコマンドですか? – jcadam

+8

しかし、ブロックの最後の行に行き、M- ^(結合線のキーバインド)を数回押すと、同じ効果が得られます。あなたが参加する数百の行を持っていない限り、私はそれを記入欄のハックよりも好むでしょう。さもなければ、Talが示唆するように、ブロックをマークし、改行(C-Q C-J)を何も置き換えないでください。 – danielpoe

+0

私はM-1にjoin-lineをバインドしようとしました。それはまたうまくいく。あなたが提案したように、ここでは多くのソリューションが目的のために用意されていますので、私はそれらをすべて柔軟な方法で使用しようとします。どうもありがとうございました! – jcadam

158
どこでも加入必要なラインのグループの 最後行に

置き点と、すべての行がマージされるまで、繰り返し

M-^ 

を呼び出します。

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

+0

通常はM- ^と結びついていますか? – stsquad

+0

stsquad:あなたはMeta + Shift + 6を押す必要があります(Shift + 6はあなたに^を与えます) –

+0

ああ、日々の喜びは私のEmacsfuを改善します。それだけで、私は、別の結合線の機能を持つことに不思議に思うことができます。 –

4

私は崇高なテキストは、コマンドJとのラインに参加する方法を好きなので、私はそれをこのように実行します。M- ^と組み合わせる

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

Multiple Cursorsは削除されたすべての余分な空白を持つ一つに、選択したすべての行を崩壊します。

1つのラインに崩壊し、複数のカーソルモードを起動し、バッファ全体を選択し、複数のカーソルモードを無効にするには、例えば

C-x h 
M-x mc/edit-lines 
M-^ 
C-g 
+0

複数のカーソルが好きです。 – Bae

0

「どのように私はそれがUNDOせずに元に戻すために得ることができる?」:

(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) 
3

私は以下の関数を使用して、 'M-J'にバインドします。

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

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

2

"join"のEmacsの従来の名前は "fill"です。はい、あなたは 2つのの行をM-^と結合することができます - それは便利ですが、より一般的には に参加したいですn行に参加します。このために、など、など fill-regionなどfill*コマンド、fill-paragraphを参照してください

その後、充填することができるものを選択する上でより多くの情報 ためthisを参照してください。

+0

これを慣用的に正しい答えに投票しますか – JohnDoe