Trong Emacs, C-x ođưa tôi đến cửa sổ tiếp theo.
Macro bàn phím nào đưa tôi đến cửa sổ trước đó trong Emacs?
Trong Emacs, C-x ođưa tôi đến cửa sổ tiếp theo.
Macro bàn phím nào đưa tôi đến cửa sổ trước đó trong Emacs?
Câu trả lời:
Bạn cũng có thể muốn thử sử dụng windmove cho phép bạn điều hướng đến cửa sổ bạn chọn dựa trên hình học. Tôi có phần sau trong tệp .emacs của mình để thay đổi cửa sổ bằng phím mũi tên Cx.
(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)
(windmove-default-keybindings)liên kết các hàm này với SHIFT + lên / xuống / trái / phải, điều này tôi nghĩ thuận tiện hơn các C-xràng buộc của bạn (xung đột với các ràng buộc mặc định cũng hữu ích cho previous-buffervà next-buffer. Lkahtz: (kbd)hàm cho phép bạn chỉ định các khóa trong ký hiệu chuỗi theo cú pháp dễ đọc hơn, cũng được Emacs sử dụng khi bạn sử dụng C-h khoặc C-h cđể mô tả một ràng buộc.
windmove-default-keybindingschỉ định một công cụ sửa đổi khác để sử dụng cùng với các phím mũi tên; để chức năng đó vẫn có thể hữu ích cho những người sử dụng chế độ chọn-thay-đổi.
Cá nhân tôi thích sử dụng window-number.el
Để chọn một cửa sổ khác, hãy sử dụng Ctrl- x, Ctrl- j n
Trong đó n là số của cửa sổ, mô hình của mỗi cửa sổ hiển thị số của nó, như được hiển thị trong ảnh chụp màn hình.

Chỉ cần tải xuống window-number.el , đặt nó vào đường dẫn tải emacs của bạn và sử dụng phần sau trong.emacs
(autoload 'window-number-mode "window-number"
"A global minor mode that enables selection of windows according to
numbers with the C-x C-j prefix. Another mode,
`window-number-meta-mode' enables the use of the M- prefix."
t)
Có một chế độ tương tự khác được gọi là switch-window.elcung cấp cho bạn những con số lớn trong cửa sổ ... (nhấn vào số sẽ chuyển cửa sổ và hoàn nguyên màn hình.)

(nguồn: tapoueh.org )
C-x C-j, vì đó là ràng buộc mặc định cho dired-jumpnếu bạn (require 'dired-x). (Xem M-x customize-group RET dired-keys RETnếu bạn muốn ghi đè lên đó.)
switch-window.el, C-x othay vào đó nó sẽ sử dụng và khi chỉ có hai cửa sổ hoạt động, nó chỉ chọn cửa sổ khác. Tôi nghĩ khôn ngoan nhất là rebind C-x ođể thực hiện window-numberthủ thuật, bạn hoàn toàn đúng về điều đó dired-jump. Cá nhân tôi ít chuyển đổi cửa sổ hơn và sử dụng C-x bbản thân mình, nhưng có cải tiến C-x olà khá hài lòng.
Nếu bạn làm việc với nhiều cửa sổ emacs (> 3) và bạn sẽ muốn lưu một số tổ hợp phím, hãy thêm nó vào tệp init của bạn và bạn sẽ tốt hơn:
(defun frame-bck()
(interactive)
(other-window-or-frame -1)
)
(define-key (current-global-map) (kbd "M-o") 'other-window-or-frame)
(define-key (current-global-map) (kbd "M-O") 'frame-bck)
Bây giờ chỉ cần nhanh chóng lướt qua các cửa sổ với Mo
other-windowđể làm cho nó hoạt động.
Có một số câu trả lời rất hay và đầy đủ ở đây, nhưng để trả lời câu hỏi theo cách tối giản:
(defun prev-window ()
(interactive)
(other-window -1))
(define-key global-map (kbd "C-x p") 'prev-window)
previous-windowđược xây dựng trong.
M-xvì vậy nên phục vụ một mục đích khác.
Dựa trên ý tưởng từ @Nate nhưng được sửa đổi một chút để hỗ trợ quay ngược giữa các cửa sổ
;; Windows Cycling
(defun windmove-up-cycle()
(interactive)
(condition-case nil (windmove-up)
(error (condition-case nil (windmove-down)
(error (condition-case nil (windmove-right) (error (condition-case nil (windmove-left) (error (windmove-up))))))))))
(defun windmove-down-cycle()
(interactive)
(condition-case nil (windmove-down)
(error (condition-case nil (windmove-up)
(error (condition-case nil (windmove-left) (error (condition-case nil (windmove-right) (error (windmove-down))))))))))
(defun windmove-right-cycle()
(interactive)
(condition-case nil (windmove-right)
(error (condition-case nil (windmove-left)
(error (condition-case nil (windmove-up) (error (condition-case nil (windmove-down) (error (windmove-right))))))))))
(defun windmove-left-cycle()
(interactive)
(condition-case nil (windmove-left)
(error (condition-case nil (windmove-right)
(error (condition-case nil (windmove-down) (error (condition-case nil (windmove-up) (error (windmove-left))))))))))
(global-set-key (kbd "C-x <up>") 'windmove-up-cycle)
(global-set-key (kbd "C-x <down>") 'windmove-down-cycle)
(global-set-key (kbd "C-x <right>") 'windmove-right-cycle)
(global-set-key (kbd "C-x <left>") 'windmove-left-cycle)
Chỉ để thêm vào câu trả lời của @Nate, @aspirin và @ Troydm, tôi thấy đây là một bổ sung rất hữu ích nếu bạn quyết định liên kết các lệnh windmove với bất kỳ tổ hợp phím nào bạn chọn:
(setq windmove-wrap-around t)
Với cấu hình mặc định, bạn sẽ gặp lỗi khi cố gắng di chuyển đến một cửa sổ không tồn tại, điều này sẽ trở nên khó chịu sau một thời gian. Tuy nhiên, khi thiết lập windmove-wrap-around thì việc cố gắng di chuyển ra khỏi phần dưới cùng của khung, thay vào đó sẽ chọn cửa sổ trên cùng trong khung. Đây có thể là một hành vi trực quan hơn cho bạn.
M-nvà M-pcó ý nghĩa nhất đối với tôi, vì chúng tương tự với C-n( dòng tiếp theo ) và C-p( dòng trước ):
(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)
M-nvà M-pđã được sử dụng trong các thiết bị đầu cuối (gdb, python, ielm, v.v.), vì vậy bạn sẽ phải chuyển trở lại phương thức khác để nhảy ra khỏi bộ đệm đầu cuối.
Để tham khảo câu trả lời của Nate, tôi đã thay thế arrow keysđể sử dụng truyền thống pđể đi up, nđi down, fđi rightvà bđi left. Tôi cũng đã thay thế phím Ctrlbằng Superphím như C-p, C-n, C-f and C-bcác phím di chuyển mặc định. Sự kết hợp này với Mcho phép bạn chuyển các ký tự và dòng thay vì chỉ lướt qua từng ký tự sau mỗi lần nhấn phím. Vì vậy, Superchìa khóa cảm thấy là sự lựa chọn tốt nhất để giữ cho nó trở thành một chiếc chìa khóa dễ ràng buộc. Ngoài ra, bây giờ bạn không cần phải rời tay khỏi hàng nhà nữa!
(global-set-key (kbd "s-p") `windmove-up)
(global-set-key (kbd "s-n") `windmove-down)
(global-set-key (kbd "s-f") `windmove-right)
(global-set-key (kbd "s-b") `windmove-left)
Hy vọng nó giúp!
(global-unset-key (kbd "M-j"))
(global-unset-key (kbd "M-k"))
(global-set-key (kbd "M-j") (lambda () (interactive) (other-window 1)))
(global-set-key (kbd "M-k") (lambda () (interactive) (other-window -1)))
altjvà altksẽ chuyển động qua bộ đệm hiển thị của bạn. Chính xác là tiến và lùi.
Đã có một gói cho phép bạn chuyển đổi cửa sổ bằng cách sử dụng M-. kiểm tra trang web này . Thêm cái này vào tệp init của bạn:
(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt
(global-set-key (kbd "C-x a") 'ace-swap-window)
(global-set-key (kbd "C-x q") 'ace-select-window)
download ace-window from the melpa repo if you don't know how to do that
put this in your .emacs file if you don't have one create it
(package-initialize)
(require 'package)
(add-to-list 'package-archives '("melpa" , "http://melpa.org/packages/"))
(package-initialize)
then "m-x list-packages"
C-x zđể lặp lại lệnh cuối cùng để chuyển đổi nhanh các cửa sổ.