ใน Emacs C-x oพาฉันไปที่หน้าต่างถัดไป
มาโครแป้นพิมพ์ใดที่พาฉันไปยังหน้าต่างก่อนหน้าใน Emacs
ใน Emacs C-x oพาฉันไปที่หน้าต่างถัดไป
มาโครแป้นพิมพ์ใดที่พาฉันไปยังหน้าต่างก่อนหน้าใน Emacs
คำตอบ:
นั่นจะเป็น C-- C-x o
กล่าวอีกนัยหนึ่งC-x oโดยมีอาร์กิวเมนต์ -1 คุณสามารถระบุจำนวนหน้าต่างที่จะย้ายโดยการแทรกอาร์กิวเมนต์ตัวเลขระหว่างC-uและคำสั่งเช่นเดียวกับในC-u 2 C-x o. ( C--เป็นทางลัดสำหรับC-u - 1)
คุณอาจต้องการลองใช้ windmove ซึ่งช่วยให้คุณไปยังหน้าต่างที่คุณเลือกตามรูปทรงเรขาคณิต ฉันมีสิ่งต่อไปนี้ในไฟล์. macs ของฉันเพื่อเปลี่ยนหน้าต่างโดยใช้ปุ่มลูกศร 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)
จะผูกฟังก์ชันเหล่านี้กับ SHIFT + ขึ้น / ลง / ซ้าย / ขวาซึ่งฉันคิดว่าสะดวกกว่าC-x
การเชื่อมโยงของคุณ(ซึ่งขัดแย้งกับการโยงเริ่มต้นที่มีประโยชน์สำหรับprevious-buffer
และnext-buffer
lkahtz: (kbd)
ฟังก์ชันนี้ให้คุณระบุคีย์ในรูปแบบสตริง ในรูปแบบอื่น ๆ อีกมากมายสามารถอ่านได้ซึ่งยังถูกใช้โดย Emacs เมื่อคุณใช้C-h k
หรือC-h c
เพื่ออธิบายผลผูกพัน.
windmove-default-keybindings
ระบุตัวปรับแต่งอื่นเพื่อใช้ร่วมกับปุ่มลูกศร เพื่อให้ฟังก์ชันนั้นยังคงมีประโยชน์สำหรับผู้ที่ใช้ shift-selection-mode
โดยส่วนตัวแล้วฉันชอบที่จะใช้ window-number.el
ในการเลือกหน้าต่างอื่นให้ใช้Ctrl- x, Ctrl- j n
โดยที่nคือหมายเลขของหน้าต่างโมเดลของแต่ละหน้าต่างจะแสดงหมายเลขดังที่แสดงในภาพหน้าจอ
เพียงดาวน์โหลดwindow-number.elวางไว้ใน emacs load-path และใช้สิ่งต่อไปนี้ในไฟล์.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)
มีโหมดที่คล้ายกันอีกโหมดหนึ่งที่เรียกว่าswitch-window.el
ซึ่งให้ตัวเลขจำนวนมากในหน้าต่าง ... (การกดหมายเลขจะเป็นการสลับหน้าต่างและย้อนกลับการแสดงผล)
(ที่มา: tapoueh.org )
C-x C-j
เป็นที่เริ่มต้นผูกพันถ้าคุณdired-jump
(require 'dired-x)
(ดูM-x customize-group RET dired-keys RET
ถ้าคุณต้องการที่จะแทนที่ที่.)
switch-window.el
ใช้มันใช้C-x o
แทนและเมื่อมีเพียงสองหน้าต่างที่ใช้งานอยู่มันก็เลือกหน้าต่างอื่น ฉันคิดว่ามันเป็นไปได้ทุกอย่าง rebind C-x o
ที่จะทำเคล็ดลับคุณค่อนข้างถูกต้องเกี่ยวกับwindow-number
dired-jump
โดยส่วนตัวแล้วฉันทำการสลับหน้าต่างน้อยลงและใช้งานด้วยC-x b
ตัวเอง แต่การได้รับการปรับปรุงC-x o
นั้นค่อนข้างน่าพอใจ
หากคุณทำงานกับหน้าต่าง emacs หลาย ๆ หน้าต่าง (> 3) เป็นจำนวนมากและคุณต้องการบันทึกการกดแป้นพิมพ์บางอย่างเพิ่มสิ่งนี้ลงในไฟล์ init ของคุณและคุณจะดีกว่า
(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)
ตอนนี้เพียงแค่หมุนอย่างรวดเร็วผ่านหน้าต่างด้วย Mo
other-window
เพื่อให้ใช้งานได้
มีคำตอบที่ดีและสมบูรณ์อยู่ที่นี่ แต่เพื่อตอบคำถามแบบมินิมอล:
(defun prev-window ()
(interactive)
(other-window -1))
(define-key global-map (kbd "C-x p") 'prev-window)
previous-window
สร้างขึ้นแล้ว
M-x
ดังนั้นควรตอบสนองวัตถุประสงค์ที่แตกต่างออกไป
อิงไอเดียจาก @Nate แต่ปรับเปลี่ยนเล็กน้อยเพื่อรองรับการหมุนย้อนกลับระหว่างหน้าต่าง
;; 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)
เพียงเพื่อเพิ่มคำตอบของ @Nate, @aspirin และ @ Troydm ฉันพบว่านี่เป็นประโยชน์เพิ่มเติมหากคุณตัดสินใจที่จะผูกคำสั่ง windmove กับคีย์ผสมที่คุณเลือก:
(setq windmove-wrap-around t)
ด้วยการกำหนดค่าเริ่มต้นคุณจะได้รับข้อผิดพลาดเมื่อคุณพยายามย้ายไปยังหน้าต่างที่ไม่มีอยู่ซึ่งจะกลายเป็นเรื่องที่น่ารำคาญหลังจากนั้นสักครู่ อย่างไรก็ตามเมื่อตั้งค่า windmove-wrap-around แล้วพยายามที่จะเลื่อนออกจากด้านล่างของเฟรมตัวอย่างเช่นจะเลือกหน้าต่างบนสุดในเฟรมแทน นี่อาจเป็นพฤติกรรมที่เข้าใจง่ายกว่าสำหรับคุณ
M-n
และM-p
ถูกใช้แล้วในเทอร์มินัล (gdb, python, ielm ฯลฯ ) ดังนั้นคุณจะต้องเปลี่ยนกลับไปใช้วิธีอื่นเพื่อกระโดดออกจากเทอร์มินัลบัฟเฟอร์
ในการอ้างอิงถึงคำตอบของเนทผมเข้ามาแทนที่arrow keys
การใช้แบบดั้งเดิมp
สำหรับการไปup
, n
สำหรับการไปdown
, f
สำหรับการไปright
และสำหรับการไปb
left
ฉันยังแทนที่Ctrl
ด้วยSuper
คีย์เช่นเดียวกับคีย์C-p, C-n, C-f and C-b
การเคลื่อนไหวเริ่มต้น การผสมผสานนี้M
ช่วยให้คุณสามารถข้ามอักขระและบรรทัดแทนที่จะผ่านทีละตัวหลังจากการกดแป้นพิมพ์แต่ละครั้ง ดังนั้นSuper
คีย์จึงเป็นทางเลือกที่ดีที่สุดในการทำให้การผูกคีย์ทำได้ง่าย ตอนนี้คุณไม่ต้องละมือจากแถวบ้านอีกต่อไป!
(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)
หวังว่าจะช่วยได้!
(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)))
altjและaltkจะวนไปตามบัฟเฟอร์ที่มองเห็นได้ของคุณ ไปข้างหน้าและข้างหลังให้ถูกต้อง
มีแพ็คเกจที่ให้คุณสลับหน้าต่างโดยใช้ M- อยู่แล้ว ตรวจสอบเว็บไซต์นี้ เพิ่มสิ่งนี้ลงในไฟล์ init ของคุณ:
(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"
วิธีที่เร็วที่สุดที่ฉันได้พบสำหรับการสลับไปที่หน้าต่างก่อนหน้านี้คือการบดกุญแจคู่กันเป็น"กุญแจสำคัญคอร์ด" ต่อไปนี้ให้คุณใช้นิ้วก้อย + นิ้วนางข้างซ้ายพร้อมกันเพื่อไปที่หน้าต่างก่อนหน้า:
(key-chord-define-global "qw" 'prev-window)
(key-chord-define-global "'y" 'other-window) ; bonus for my colemak, adjust otherwise
(key-chord-define-global ";'" 'other-window) ; probably normal
(เป็นไปได้เพราะคีย์คอร์ดของ Emacs มีลำดับอิสระซึ่งหมายความว่าqw
เหมือนกับwq
)
C-x z
เพื่อทำซ้ำคำสั่งสุดท้ายเพื่อสลับหน้าต่างอย่างรวดเร็ว