Chỉnh sửa một tệp trong hai bộ đệm khác nhau trong emacs


28

Tôi muốn mở tệp foo.barhai lần (hoặc nhiều hơn) trong emacs, vì vậy tôi có thể chỉnh sửa đồng thời hai phần khác nhau của tệp. Có thể không? Có lẽ câu hỏi tốt hơn là, làm thế nào để làm điều đó? Có cách nào để mở từng thể hiện trong bộ đệm / khung của chính nó không?


Bạn có thể hiển thị cùng một bộ đệm trong các cửa sổ khác nhau. Nó không phải là một giải pháp cho vấn đề này?
Tom

Câu trả lời:


35

Bạn có thể mở cùng một bộ đệm trong nhiều hơn một cửa sổ (có thể trải rộng giữa các khung khác nhau), nhưng nó không thuận tiện lắm. Mỗi cửa sổ có một điểm riêng, nhưng tất cả đều có chung dấu, chế độ tệp, thu hẹp và các đặc điểm khác, vì ngoài điểm này, hầu hết các đặc điểm đều được gắn với bộ đệm. Ngoài ra, nếu bạn tình cờ ghé thăm một bộ đệm khác trong một cửa sổ, bạn sẽ mất vị trí của mình trong tệp.

Bạn có thể tạo một bộ đệm gián tiếp có điểm, dấu, chế độ riêng, v.v., nhưng cùng nội dung với bộ đệm ban đầu (và lưu bộ đệm ghi vào cùng một tệp). Để tạo bộ đệm thứ hai là bản sao của bộ đệm hiện tại, hãy chạy M-x clone-indirect-buffer RET. Để mở bộ đệm thứ hai trong một cửa sổ khác, bạn có thể gõ C-x 4 c.


3
Để làm rõ: C-x 4 cchạy clone-indirect-buffer-other-window, vì vậy điều này sẽ được sử dụng thay vì clone-indirect-buffer, không tuân theo lệnh đó. Tuy nhiên, trên hệ thống của tôi, cả hai lệnh này dường như làm cùng một việc.
SabreWolfy

Tôi ước tôi có thể tìm ra làm thế nào để ghi nhớ điều này: - /
pedz

@pedz C-x 4là tiền tố cho windows, cbản sao . Bạn có thể định nghĩa các ràng buộc khác nếu bạn thích. C-x ckhông được sử dụng trong cấu hình mặc định, bạn có thể sử dụng nó nếu bạn không sợ vô tình nhấn C-x C-cthay thế. Tôi xác định C-x 5 cđể sao chép trong một khung mới trong tệp init của tôi.
Gilles 'SO- ngừng trở nên xấu xa'

8

Chia chế độ màn hình: trong đó ctrl+ xcó nghĩa là nhấn và giữ phím ctrl và nhập x. Sau đó nhập số sau.

ctrl+ x2 (chia ngang)

hoặc là

ctrl+ x3 (chia dọc)

Sau đó, bạn có thể cuộn chúng độc lập trên cùng một tệp hoặc mở một bộ đệm khác nếu bạn muốn ở một trong số chúng.

Để trở về một kiểu xem duy nhất

ctrl+ x1

Nếu bạn muốn bạn có thể chia mỗi màn hình (phần) nhiều lần theo yêu cầu. Chọn màn hình bạn muốn tách đầu tiên và sau đó thực hiện phân chia ngang hoặc dọc trên màn hình.


Rất tiếc! Bạn không nên bao gồm điều hướng bàn phím giữa các khung? C-x ochạy other-windowvà quay vòng qua các "cửa sổ" có thể nhìn thấy trong mỗi "khung". (Sử dụng cấu hình emacs nơi cửa sổ quản lý cửa sổ được gọi là khung, và các tấm riêng biệt bên trong chúng được gọi là cửa sổ (Tôi biết, tôi biết, nhưng tôi không chịu trách nhiệm về nó).)
dmckee

Tôi có xu hướng sử dụng chuột.
Matt H

1

Emacs được thiên vị cho panes (windows), không phải khung. Nó thường được mong muốn để mở cùng một bộ đệm trong một khung khác, không chỉ là một cửa sổ khác trong cùng một khung. Nhưng C-x 5 ckhông bị ràng buộc theo mặc định. Mã này xác định clone-indirect-buffer-other-framehàm bị thiếu :

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.