Emacs, önceki pencereye geç


93

Emacs'ta C-x obeni bir sonraki pencereye götürür.

Hangi klavye makrosu beni Emacs'ta önceki pencereye götürür?

Yanıtlar:


88

Bu olurdu C-- C-x o

Başka bir deyişle, C-x o-1 bağımsız değişkeniyle. İçinde C-uolduğu gibi ve komut arasına sayısal bir argüman ekleyerek kaç pencere hareket ettirileceğini belirtebilirsiniz C-u 2 C-x o. ( C--kısayolu C-u - 1)


Ve C-x zpencereleri hızla değiştirmek için son komutu tekrarlamak için kullanabilirsiniz .
Ivan Huang

105

Ayrıca, geometriye dayalı olarak seçtiğiniz pencereye gitmenizi sağlayan windmove kullanmayı da deneyebilirsiniz. Cx ok tuşunu kullanarak pencereleri değiştirmek için .emacs dosyamda aşağıdakilere sahibim.

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

11
Not öyle demeyi (windmove-default-keybindings)SHIFT bağlanan bu işlevleri + yukarı / aşağı / sol / sağ, ben senin daha rahat olduğunu düşünüyorum hangi C-xiçin de-kullanışlı varsayılan bağları ile hangi çatışma (bağlamaları previous-bufferve next-bufferlkahtz. (kbd)Fonksiyonu dize gösterimde anahtarlarını belirtmenizi sağlar Bir bağlamayı kullandığınızda C-h kveya C-h caçıklamak için Emacs tarafından da kullanılan daha okunaklı sözdiziminde .
phils

4
Ok tuşlarını kullanmayı onaylamıyorum. Ama yine de yardım için oy verdim. : kendini beğenmiş:
Bjorn

2
@phils SHIFT + <keys>, varsayılan olarak Emacs 23'ten (shift-selection-mode) etkinleştirilen vardiya seçimine karışır.
legends2k

2
legends2k: Doğru; windmove-default-keybindingsok tuşlarıyla birlikte kullanmak üzere farklı bir değiştirici belirtmek için bir bağımsız değişken de iletebilirsiniz ; ancak; böylece bu işlev, vardiya-seçim modunu kullanan kişiler için hala kullanışlı olabilir.
phils

1
@phils Kabul edildi, meta iyi bir alternatif gibi görünüyor; Emacs Wiki'de görüldüğü gibi .
legends2k

30

Şahsen kullanmayı tercih ederim window-number.el

Farklı bir pencere seçmek için Ctrl- x, Ctrl- n tuşlarını kullanınj

Burada n, ekran görüntüsünde görüldüğü gibi pencere sayısı, her bir pencere gösterir 's numarası kipsatırı vardır.

Sadece window-number.el dosyasını indirin , emacs yükleme yolunuza yerleştirin ve aşağıdakileri kullanın:.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.elPencerelerde size büyük sayılar veren benzer bir mod daha var ... (sayıya basmak pencereyi değiştirir ve ekranı geri döndürür.)


(kaynak: tapoueh.org )


2
Güzel, ancak sizin C-x C-jiçin varsayılan bağlayıcı olduğu için bir şeyi bağlamanızı öneririm . ( Bunu geçersiz kılmak isteyip istemediğinize bakın .)dired-jump(require 'dired-x)M-x customize-group RET dired-keys RET
phils

1
Bunu gönderdikten sonra bir şans vermeye karar verdim switch-window.el, onun C-x oyerine kullanıyor ve sadece iki pencere aktif olduğunda, sadece diğer pencereyi seçiyor. Bence hile C-x oyapmak için yeniden başlamanın en akıllıca olduğunu düşünüyorum window-number, oldukça haklısınız dired-jump. Şahsen ben daha az pencere değiştirme C-x byapıyorum ve kendimi kullanıyorum, ancak geliştirilmiş C-x oolana sahip olmak oldukça memnun edici.
ocodo

İlk ekran görüntüsünde harika Emacs teması vay. onu nasıl alabilirim?
semente

Benim Emacs ilgili sayfada @semente jasonm23.github.com/EmacsFodder/Emacs/2012/06/29/...
ocodo

1
@petrux emacsfodder.github.io/blog/two-new-emacs24-themes Bunun muhtemelen iki temadan biri olduğunu düşünüyorum. - btw. Harika bir mod hattı için gist.github.com/jasonm23/8554119'u
ocodo

13

Birden çok emacs penceresiyle (> 3) çok çalışıyorsanız ve bazı tuş vuruşlarını kaydetmek istiyorsanız bunu başlangıç ​​dosyanıza ekleyin ve daha iyi durumda olacaksınız:

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

Şimdi Mo ile pencerelerden hızla geç


1
Bu tam da ihtiyacım olan çözüm. Tek istediğim, pencere değiştirme komutunun tekrar eden tek bir tuş vuruşu olmasıydı. Teşekkürler! Bilginize, çalışması için diğer pencereyi veya çerçeveyi başka pencereye çevirmem gerekti. Emacs 24.2.1 kullanıyorum.
Geoff

Bunların çok iyi bağlamalar olduğunu düşünüyorum (özellikle 2+ pencereniz olduğunda), teşekkürler. Dediğim gibi, other-windowçalışmasını sağlamak için değiştirilecek şapka .
dolzenko

11

Burada bazı çok iyi ve eksiksiz cevaplar var, ancak soruyu minimalist bir tarzda cevaplamak için:

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

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

2
Ne zamandan beri bilmiyorum ama emacs artık previous-windowyerleşik.
Arne

@Arne Bu çağrılabilir bir işlev değildir, M-xbu nedenle farklı bir amaca hizmet etmelidir.
Ivan Huang

4

@Nate'in fikrine dayanıyor ancak pencereler arasında geriye doğru geçişi desteklemek için biraz değiştirildi

;; 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

Sadece @Nate, @aspirin ve @ Troydm'un cevabına eklemek için, windmove komutlarını seçtiğiniz tuş kombinasyonuna bağlamaya karar verirseniz, bunu çok yararlı bir ekleme olarak görüyorum:

(setq windmove-wrap-around t)

Varsayılan yapılandırmayla, bir süre sonra sinir bozucu hale gelen, var olmayan bir pencereye geçmeye çalıştığınızda bir hata alırsınız. Bununla birlikte, windmove-wrap-around ayarlandığında, örneğin çerçevenin altından çıkmaya çalışmak, bunun yerine çerçevedeki en üstteki pencereyi seçecektir. Bu sizin için daha sezgisel bir davranış olabilir.


4

M-nve ( sonraki satır ) ve ( önceki satır ) M-pile benzer oldukları için bana en mantıklı geliyor :C-nC-p

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

(üzere esinlenerek bu ve bu )


Bu yapılandırmayı onayladım ve kullandım. Sorun şu ki M-nve M-pzaten terminallerde (gdb, python, ielm vb.) Kullanılıyor, bu yüzden terminal tamponundan atlamak için başka bir yönteme geri dönmeniz gerekecek.
mihai

Bu ortamlarda ne için kullanılıyorlar?
tshepang

Şu an gördüğüm en iyisi bu, diğer şeylere aykırı değil ve çekicilik gibi çalışıyor! Teşekkürler!
aurelien

2

Nate'in yanıta referans, ben yerini arrow keysgeleneksel kullanmak pgidiş için up, ngidiş için down, fgidiş rightve bgidiş için left. Ben de yerini Ctrlile Superanahtar olarak C-p, C-n, C-f and C-bvarsayılan hareket anahtarları. Bu kombinasyon, Mher tuş vuruşundan sonra tek tek geçmek yerine karakterleri ve satırları atlamanızı sağlar. Böylelikle Superkey, onu kolay bir tuş bağlama olarak tutmak için en iyi seçim olduğunu hissetti. Ayrıca, artık elinizi ev sırasından çekmenize gerek yok!

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

Umarım yardımcı olur!


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

altjve altkgörünür tamponlarınız arasında geçiş yapacaktır. Tam olarak ileri ve geri.


Mk oldukça kullanışlı bir kısayol. başka alternatif var mı?
A_P

1

Zaten M- kullanarak pencereler arasında geçiş yapmanıza izin veren bir paket var. bu web sitesini kontrol edin . Bunu başlangıç ​​dosyanıza ekleyin:

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt

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

Ben önceki pencereye geçiş için bulduk en hızlı yöntem etmektir birlikte birkaç anahtarlarını püre bir şekilde "anahtar akor" . Aşağıdakiler, önceki pencereye gitmek için sol serçe parmağınızı + yüzük parmaklarınızı birlikte kullanmanızı sağlar:

(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

(Bu mümkündür çünkü Emacs anahtar akorları sıradan bağımsızdır, yani bununla qwaynıdır wq.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.