Emacs - Nhiều cột một bộ đệm


165

Tôi đang cố gắng chỉnh sửa một số mã lắp ráp có xu hướng được định dạng trong các danh sách dài nhưng mỏng. Tôi muốn có thể sử dụng một số mẫu không gian ngang mà tôi có và xem thêm mã trên màn hình cùng một lúc. Có phương pháp nào để nhận Emacs (hoặc thực sự là một trình soạn thảo khác) để hiển thị cho tôi nhiều cột tất cả chỉ vào cùng một bộ đệm không?

Cx 3 (emacs) và: vsplit (vim) rất tuyệt vời cho nhiều chế độ xem riêng biệt vào mã, nhưng tôi muốn nó chuyển từ cột này sang cột khác (như văn bản trên một tờ báo).


1
Cx 3 và: vsplit rất tuyệt vời cho nhiều chế độ xem riêng biệt vào mã, nhưng tôi muốn nó chuyển từ cột này sang cột khác (như văn bản trên một tờ báo)
user119857

1
Cảm ơn! Tôi đã yêu thích việc xem mã 4 - 6 cột mà tôi đã thử định dạng tất cả mã của mình thành 30-40 ký tự và tôi cực kỳ yêu kết quả - bằng cách làm cho tất cả các dòng ngắn, không chỉ các dòng ngắn tự nhiên, ít không gian hơn bị lãng phí và tất cả không gian màn hình của tôi được sử dụng để hiển thị văn bản; Ngoài ra, các khối mã trở nên 2 chiều hơn, giảm bớt sự hiểu biết trực quan và giám sát cấu trúc.
Erik Kaplun

Câu trả lời:


248

Xem chế độ theo dõi . Trích đoạn:

Chế độ theo dõi là chế độ nhỏ tạo ra hai cửa sổ, cả hai đều hiển thị cùng một bộ đệm, cuộn dưới dạng một cửa sổ ảo cao cao duy nhất. Để sử dụng chế độ Theo dõi, hãy chuyển đến một khung chỉ có một cửa sổ, chia nó thành hai cửa sổ cạnh nhau bằng Cx 3, sau đó nhập chế độ theo dõi Mx. Từ đó trở đi, bạn có thể chỉnh sửa bộ đệm trong một trong hai cửa sổ hoặc cuộn một trong hai; cửa sổ khác theo sau nó. Trong chế độ Theo dõi, nếu bạn di chuyển điểm bên ngoài phần hiển thị trong một cửa sổ và vào phần hiển thị trong cửa sổ khác, thì chọn lại cửa sổ kia, coi hai phần đó như là một phần của một cửa sổ lớn.

3
Tôi có thể sử dụng cái này với nhiều hơn hai cửa sổ không? Tôi có thể có bốn cửa sổ bằng cách này không?
Yktula

Tôi tự hỏi nếu có thể chỉnh sửa hai cột của cùng một nguồn theo một cách riêng lẻ, không bị chia tách trong hai cửa sổ. Đây không phải là ví dụ tốt nhất nhưng hãy tưởng tượng rằng tôi có một cột cho mã script và cột kia để nhận xét thì nếu tôi ở cột thứ hai tôi muốn nhấn "enter" và tiếp tục ở dòng tiếp theo nhưng ở cột thứ hai. Điều này có thể với Emacs hoặc trình soạn thảo văn bản khác không?
sw.

Nó rất hữu ích để chỉnh sửa chức năng hoặc phương thức dài dài. Tôi luôn tìm thấy chế độ này và mở hai bộ đệm và tự mình làm điều này, cảm ơn huaiyuan
Yuan He

17

Tôi sử dụng chức năng này để gọi follow-mode, mặc dù nó sẽ cần tùy chỉnh cho một kích thước màn hình khác:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))

Thêm 1 cho chỉ ra (cửa sổ cân bằng) một mình! Tôi đoán mặc dù bạn có thể làm cho nó phân chia một số lần tham số và làm cho chức năng tương tác. Ngoài ra, thiết lập scroll-marginđể 0có ý nghĩa trong follow-mode.
Erik Kaplun


2

Vim có thể thực hiện việc này bằng cách sử dụng :vsplit- và bạn có thể mở cùng một bộ đệm trong nhiều "cửa sổ" (thực sự là các phần trong một "cửa sổ").

Tài liệu ở đây


3
emacs cũng có thể làm điều đó, như đã đề cập trong câu hỏi, nhưng đó không phải là điều đang được hỏi.
justinhj

1
Kết hợp điều đó với :scrollbind, và bạn đang ở đó.
bastibe

@Kragen - Phương pháp để thực hiện việc này là: 1. chia cửa sổ theo chiều dọc, do đó, bộ đệm đơn có thể nhìn thấy trong hai cửa sổ 2. cuộn trong cửa sổ thứ hai để dòng đầu tiên trong cửa sổ thứ hai xuất hiện sau dòng cuối cùng trong cửa sổ thứ nhất, 3. phát lệnh :set scrollbindtrong mỗi cửa sổ. Bây giờ các cửa sổ sẽ cuộn lại với nhau như mong muốn. (Lưu ý: scrollopt phải chứa tùy chọn 'ver'.)
Herbert Sitz

Hmm, đó là loại công việc. Mát mẻ! Cảm ơn! Ai đó nên viết một kịch bản vim để làm điều này tự động.
Kragen Javier Sitaker

-1

Nhìn nhanh vào wiki emacs không hiển thị chế độ như bạn mô tả. Tuy nhiên, không quá khó để viết một ... Bạn chỉ cần chia cửa sổ với Cx 3 và di chuyển văn bản trong cửa sổ khác xuống và bất cứ khi nào bạn di chuyển văn bản, hãy làm tương tự với cửa sổ khác. ..

Vấn đề có thể xảy ra khi bạn xuống dưới cùng của bộ đệm, bạn có muốn con trỏ ngay lập tức đi đến cửa sổ khác ở trên cùng không?

Hmm, có lẽ nó không dễ dàng như vậy. Nhưng nó vẫn có thể làm được ...


1
... và vì vậy Elisp được thêm vào danh sách những thứ tôi cần tìm hiểu :) Rất cám ơn Brian;)
user119857

Rõ ràng, ai đó đã làm điều đó, nhưng vâng, elisp là một công cụ tuyệt vời!
Brian Postow

-5

đây là hành vi mặc định của emacs khi chia cửa sổ (Cx 3 cho phân chia dọc) bạn nhận được hai cột mà cả hai đều có bộ đệm hiện tại mở


1
Nhưng trong trường hợp đó, nó không ở chế độ theo dõi. Chế độ theo dõi sẽ đảm bảo rằng mỗi bộ đệm sẽ được định vị ở "trang tiếp theo" để bạn có thể đọc qua bộ đệm bằng cách di chuyển mắt thay vì di chuyển điểm.
jrockway

-7

Sử dụng phân chia dọc với Cx 3. Điều này sẽ chia bộ đệm hiện tại thành hai cột mà bạn có thể chuyển đổi giữa với Cx o.


2
Điều này không tự động chảy từ cột này sang cột khác.
kmarsh
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.