it-swarm-id.com

Emacs, beralih ke jendela sebelumnya

Di Emacs, C-x o membawaku ke jendela berikutnya.

Makro keyboard apa yang membawa saya ke jendela sebelumnya di Emacs?

91

Itu pasti C-- C-x o

Dengan kata lain, C-x o dengan argumen -1. Anda dapat menentukan berapa banyak jendela yang akan dipindahkan dengan memasukkan argumen numerik di antaranya C-u dan perintah, seperti pada C-u 2 C-x o. (C-- adalah jalan pintas untuk C-u - 1)

84
JB.

Anda mungkin juga ingin mencoba menggunakan windmove yang memungkinkan Anda menavigasi ke jendela pilihan Anda berdasarkan geometri. Saya memiliki yang berikut ini di file .emacs saya untuk mengubah windows menggunakan tombol panah C-x.

(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)
98
Nate

Secara pribadi saya lebih suka menggunakan window-number.el

Untuk memilih jendela yang berbeda, gunakan Ctrl-xCtrl-j  n

Di mana n adalah nomor jendela, modeline dari setiap jendela menunjukkan nomor itu, seperti yang ditunjukkan pada tangkapan layar.

Cukup unduh window-number.el , letakkan di jalur beban emacs Anda dan gunakan yang berikut ini di .emacs Anda

 (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)

Ada mode serupa lainnya yang disebut switch-window.el yang memberi Anda angka besar di windows ... (menekan nomor akan mengubah jendela dan membalikkan tampilan.)

http://tapoueh.org/images/emacs-switch-window.png

29
ocodo

Jika Anda bekerja dengan banyak emacs windows (> 3) banyak dan Anda ingin menyimpan beberapa penekanan tombol tambahkan ini ke file init Anda dan Anda akan lebih baik:

(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)

Sekarang hanya siklus cepat melalui jendela dengan M-o

12
octi

Ada beberapa jawaban yang sangat bagus dan lengkap di sini, tetapi untuk menjawab pertanyaan dengan gaya minimalis:

 (defun prev-window ()
   (interactive)
   (other-window -1))

 (define-key global-map (kbd "C-x p") 'prev-window)
11
bnzmnzhnz

M-n dan M-p paling masuk akal bagi saya, karena mereka analog dengan C-n (baris berikutnya) dan C-p (baris sebelumnya):

(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)

(terinspirasi oleh ini dan itu )

4
Tshepang

Hanya untuk menambahkan ke @Nate, @aspirin dan @ Troydm's jawaban saya menemukan ini menjadi tambahan yang sangat membantu jika Anda memutuskan untuk mengikat perintah windmove ke kombinasi tombol apa pun yang Anda pilih:

(setq windmove-wrap-around t)

Dengan konfigurasi default Anda akan mendapatkan kesalahan ketika Anda mencoba untuk pindah ke jendela yang tidak ada yang menjadi semacam menjengkelkan setelah beberapa saat. Namun ketika windmove-wrap-around diatur kemudian mencoba untuk pindah dari bagian bawah bingkai misalnya akan memilih jendela paling atas dalam bingkai. Ini mungkin perilaku yang lebih intuitif untuk Anda.

4
Hal

Berdasarkan ide dari @Nate tetapi sedikit dimodifikasi untuk mendukung siklus mundur antar windows

;; 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)
4
Troydm
(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 dan altk akan menggulir melalui buffer visibles Anda. Maju dan mundur, tepatnya.

2
sjas

Mengacu pada jawaban Nate, saya mengganti arrow keys untuk menggunakan p tradisional untuk up, n untuk menjadi down, f untuk menjadi right dan b untuk menggunakan left Saya juga mengganti Ctrl dengan kunci Super karena C-p, C-n, C-f and C-b adalah kunci gerakan default. Kombinasi ini dengan M memungkinkan Anda melompati karakter dan garis alih-alih hanya melalui satu per satu setelah setiap penekanan tombol. Jadi kunci Super merasakan pilihan terbaik untuk menjaganya agar tetap menjadi kunci yang mudah diikat. Juga, sekarang Anda tidak perlu melepaskan tangan dari barisan rumah lagi!

(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)

Semoga ini bisa membantu!

2

Sudah ada paket yang memungkinkan Anda beralih windows dengan menggunakan M-. periksa situs web ini . Tambahkan ini ke file init Anda:

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt
1
aspirin
(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"
0
user9618991