Rất nhiều chức năng Emacs sẽ tự động chia màn hình. Tuy nhiên, tất cả đều làm như vậy theo chiều dọc, (tức là, chúng tạo ra hai cửa sổ, một cửa sổ trên đầu kia). Có cách nào để làm cho họ tất cả chia theo chiều ngang (side-by-side) theo mặc định để thay thế?Đặt Emacs Split thành Horizontal
Trả lời
(setq split-height-threshold nil)
(setq split-width-threshold 0)
GNU Emacs Lisp Reference Manual: Choosing Window Options
Lưu ý rằng những tác phẩm này vì chúng ảnh hưởng đến chức năng chia đôi cửa sổ ưa thích và chức năng tách cửa sổ được đặt thành - nếu bạn đọc tài liệu, bạn có thể tìm hiểu cách các biến này được đặt ảnh hưởng đến mọi thứ. Đối với những người trong chúng ta, những người thích chia tách dọc theo mặc định, chúng tôi chỉ có thể sử dụng (setq split-width-threshold nil) không cho phép hệ thống chia cửa sổ theo chiều ngang. –
Sau khi đọc lên các tài liệu và chơi xung quanh một chút, tôi đã thiết lập chiều cao-split-ngưỡng thành nil và chiều rộng-split-threshold thành 80 để nó đầu tiên sẽ nhìn thấy nếu nó có thể chia theo chiều ngang và chỉ sau đó thử theo chiều dọc. Có nó chỉ chia theo chiều dọc thường chỉ xấu xí khi cửa sổ trở nên hẹp. – Nikwin
Điều này nghe có vẻ hợp lý. Tuy nhiên, điều này không làm việc cho sự tích hợp GDB/GUD trong các emacs. Nếu tôi có một cửa sổ đơn thì bắt đầu trình gỡ rối, các emac luôn tách nhau theo chiều dọc. Có bất kỳ cài đặt cụ thể GUD/GDB nào cho điều đó không? – mefiX
(setq split-height-threshold 0) (setq split-width-threshold 0)
là những gì tôi đã phải sử dụng để có được những hành vi mong muốn (không tách ngang)
câu trả lời đơn giản của thiết 2 biến để nil và 0 không làm việc cho tôi, vì vậy tôi đã viết 2 chức năng đơn giản: chỉ chia nhỏ cửa sổ thành bộ đệm dọc NX và mở tệp có tên (ví dụ) tệp.1 tệp.2 ... tệp.NX trong từng tệp và một tệp khác không suy nghĩ tương tự, ngoại trừ nó trong 2D (NY hàng bởi NX cột f hoặc mở tập tin f.1 f.2 ... f. [NX * NY]). Để cài đặt, thêm mã này vào emacs:
(defun grid-files-h (nx wx pfx)
"Using dotimes, split the window into NX side-by-side buffers of width WX and load files starting with prefix PFX and ending in numbers 1 through NX"
(let (ox fn k) ; ox is not used, but fn is used to store the filename, and k to store the index string
(dotimes (x (- nx 1) ox) ; go through buffers, x goes from 0 to nx-2 and ox is not used here
; (print x)
(setq k (number-to-string (+ x 1))) ; k is a string that goes from "1" to "nx-1"
; (print k)
(setq fn (concat pfx k)) ; fn is filename - concatenate prefix with k
; (print fn)
(find-file fn) ; open the filename in current buffer
(split-window-horizontally wx) ; split window (current buffer gets wx-columns)
(other-window 1) ; switch to the next (right) buffer
)
(setq k (number-to-string nx)) ; last (rightmost) buffer gets the "nx" file
(setq fn (concat pfx k)) ; fn = "pfx"+"nx"
(find-file fn) ; open fn
(other-window 1) ; go back to the first buffer
)
)
(defun grid-files-sq (ny wy nx wx pfx)
"Using dotimes, split the window into NX columns of width WX and NY rows of height WY and load files starting with prefix PFX and ending in numbers 1 through NX*NY"
(let (oy ox fn k)
(dotimes (y ny oy) ; go through rows, y goes from 0 to ny-1 and oy is not used here
(split-window-vertically wy) ; create this row
(dotimes (x (- nx 1) ox) ; go through columns, x goes from 0 to nx-2 and ox is not used here
(setq k (number-to-string (+ 1 (+ x (* y nx))))) ; k must convert 2 indecies (x,y) into one linear one (like sub2ind in matlab)
(setq fn (concat pfx k)) ; filename
(find-file fn) ; open
(split-window-horizontally wx) ; create this column in this row (this "cell")
(other-window 1) ; go to the next buffer on the right
)
(setq k (number-to-string (+ nx (* y nx)))) ; rightmost buffer in this row needs a file too
(setq fn (concat pfx k)) ; filename
(find-file fn) ; open
(other-window 1) ; go to next row (one buffer down)
)
)
)
và sau đó sử dụng một dọc, tôi đi đến * cào * (C-x b *scratch* RET
, C-x 1
), gõ vào (grid-files-h 3 20 "file.")
sau đó C-x C-e
, hoặc nếu bạn muốn kiểm tra quảng trường qrid một, C-x 1
, gõ (grid-files-sq 2 15 3 20 "f.")
và sau đó C-x C-e
và bạn sẽ thấy một cái gì đó giống như
này có lẽ có thể được thực hiện tốt hơn/hiệu quả hơn, nhưng đó là một sự khởi đầu và nó làm những gì tôi cần nó để làm gì (hiển thị một loạt các tệp nhỏ có tên tuần tự). Vui lòng cải thiện hoặc sử dụng lại.
Đôi khi chúng ta cần thay đổi giữa Ngang và Dọc theo hiển thị hiện tại và yêu cầu của chúng tôi (nhiều dòng hoặc nhiều cột hơn).
Tôi recommand vĩ đại ToggleWindowSplit, Và tôi gắn chìa khóa để "Cc y"
Hoặc [transpose-frame] (https://www.emacswiki.org/emacs/transpose-frame.el), thanh lịch hơn. – xuhdev
Hai giải pháp ở đây, sử dụng bất kỳ một trong những bạn thích:
A: chiều dọc (trái/phải) theo mặc định:
(setq split-height-threshold nil)
(setq split-width-threshold 0)
B: cửa sổ Tự động phân chia theo chiều dọc (trái/phải) nếu cửa sổ hiện tại là rộng đủ
(defun display-new-buffer (buffer force-other-window)
"If BUFFER is visible, select it.
If it's not visible and there's only one window, split the
current window and select BUFFER in the new window. If the
current window (before the split) is more than 100 columns wide,
split horizontally(left/right), else split vertically(up/down).
If the current buffer contains more than one window, select
BUFFER in the least recently used window.
This function returns the window which holds BUFFER.
FORCE-OTHER-WINDOW is ignored."
(or (get-buffer-window buffer)
(if (one-window-p)
(let ((new-win
(if (> (window-width) 100)
(split-window-horizontally)
(split-window-vertically))))
(set-window-buffer new-win buffer)
new-win)
(let ((new-win (get-lru-window)))
(set-window-buffer new-win buffer)
new-win))))
;; use display-buffer-alist instead of display-buffer-function if the following line won't work
(setq display-buffer-function 'display-new-buffer)
Đặt bất kỳ cái nào trong bạn .emacs/init.el
tệp. Bạn có thể thay đổi "100" thành giá trị bạn thích, tùy thuộc vào màn hình của bạn.
Nếu bạn có hai cửa sổ trong một khung hình, và bạn muốn thay đổi cách bố trí từ dọc sang câu ngang hoặc ngược, đây là một giải pháp:
(defun toggle-window-split()
(interactive)
(if (= (count-windows) 2)
(let* ((this-win-buffer (window-buffer))
(next-win-buffer (window-buffer (next-window)))
(this-win-edges (window-edges (selected-window)))
(next-win-edges (window-edges (next-window)))
(this-win-2nd
(not (and (<= (car this-win-edges)
(car next-win-edges))
(<= (cadr this-win-edges)
(cadr next-win-edges)))))
(splitter
(if (= (car this-win-edges)
(car (window-edges (next-window))))
'split-window-horizontally
'split-window-vertically)))
(delete-other-windows)
(let ((first-win (selected-window)))
(funcall splitter)
(if this-win-2nd (other-window 1))
(set-window-buffer (selected-window) this-win-buffer)
(set-window-buffer (next-window) next-win-buffer)
(select-window first-win)
(if this-win-2nd (other-window 1))))))
;; C-x 4 t 'toggle-window-split
(define-key ctl-x-4-map "t" 'toggle-window-split)
Đặt nó trong tập tin .emacs/init.el
của bạn, Sử dụng C-x 4 t
để chuyển đổi bố cục cửa sổ của bạn.
Tôi sử dụng nhiều khung (cửa sổ OSX) trong các emacs thường xuyên cho các dự án khác nhau. Dưới đây là cách tôi thiết lập một vài khung hình ban đầu được chia thành cửa sổ bên trái và bên phải.
(defun make-maximized-split-frame (name)
(let ((f (make-frame (list (cons 'name name)))))
(maximize-frame f)
(split-window (frame-root-window f) nil t)
))
(make-maximized-split-frame "DocRaptor")
(make-maximized-split-frame "Gauges")
(make-maximized-split-frame "Instrumental")
- 1. ediff-split-window-function horizontal == vertical?
- 2. Đặt con trỏ emacs thành một dòng
- 3. WPF horizontal DataGrid
- 4. Horizontal Stackpanel Fill Parent Control
- 5. Silverlight DataGrid Header Horizontal Alignment
- 6. Visual Studio 2012 XAML Designer Vertical Split không thể được đặt làm mặc định?
- 7. Split() bị phản đối
- 8. Nút radio trong Bootstrap .form-horizontal
- 9. Đặt hình nền Emacs
- 10. IntelliJ Split Window Navigation
- 11. java regex split chuỗi
- 12. Wix Bind Substring hoặc Split
- 13. .NET String Split()
- 14. boost :: tokenizer vs boost :: split
- 15. emacs - tự động hoàn thành trong chế độ Emacs Lisp
- 16. Tự động hoàn thành Emacs X11 (intellisense)
- 17. Xslt có hàm split() không?
- 18. split chuỗi dựa trên regexp
- 19. Vim split trừ khi mở
- 20. Matlab split chuỗi nhiều delimiters
- 21. gdb split view with code
- 22. split() nhưng giữ dấu phân tách
- 23. Cái gì đó tương tự như split()?
- 24. Emacs ruby biểu tượng từ hoàn thành
- 25. Emacs/TextMate hoàn thành mã cho Erlang?
- 26. Hoàn thành toàn bộ dòng trong Emacs?
- 27. cách tốt nhất để cài đặt chế độ tự động hoàn thành emacs
- 28. Split FirstName và LastName trong sqlite
- 29. Bỏ đặt trọng ràng buộc trong emacs
- 30. Emacs: Đặt tệp psvn.el ở đâu?
Tôi sẽ trao đổi cách sử dụng ngang và dọc trong câu hỏi này - Tôi muốn nói hành vi mặc định là chia theo chiều ngang (phần chia là đường ngang trên màn hình). – Skilldrick
C-x 3 chạy lệnh chia cửa sổ theo chiều ngang, cho lệnh cung cấp các cửa sổ cạnh nhau, vì vậy tôi đang sử dụng giống nhau. – Nikwin
@Skilldrick "Dọc" và "ngang" không rõ ràng và có thể được diễn giải khác nhau; họ có thể mô tả cách phân chia được định hướng hoặc cách phân vùng được định hướng. Độ nghiêng bình thường của tôi là đồng ý với từ ngữ của câu hỏi ban đầu (tức là, tôi thường giải thích "chia theo chiều dọc" thành "chia tách không gian dọc"). – jamesdlin