2013-05-17 11 views
11

In Terminal Emacs (keine Maus) verwende ich geteilte Fenster, um mit mehreren Puffern gleichzeitig zu arbeiten. Ich finde das Bewegen zwischen den geteilten Fenstern viel schmerzhafter als das, was ich in Vim mache. Lesen der Dokumentation sieht so aus, als würde ich es richtig machen (C-x o), aber das dreht sich nur im Uhrzeigersinn um die Fenster herum. Wenn ich in ein benachbartes Fenster gehe, um eine schnelle Bearbeitung vorzunehmen, muss ich einige Male auf C-x o drücken, bevor ich zurück bin, wo ich war. Manchmal drücke ich es versehentlich zu oft in Eile und muss wieder ganz durch die Fenster fahren.Emacs bewegen sich um geteilte Fenster in einer bestimmten Richtung?

Weit davon entfernt, noch ein anderes-externes-Paket zu installieren, gibt es irgendeine Möglichkeit, wie ich entweder direkt in ein Fenster (z. B. eine Nummer) oder zumindest um die Fenster in der entgegengesetzten Richtung bewegen kann?

In Vim C-w C-w ist wie C-x o in Emacs, aber es gibt auch C-w ARROW in einer bestimmten Richtung zu bewegen ... so etwas? :)

+1

Ich weiß, du hast gesagt, du willst keine Pakete, aber Evil benutzt die C-w Bindungen, die du kennst und liebst. :) –

+0

Hab Evil installiert, danke. Ich geniesse es bisher, weil es Emacs Befehle nicht so sehr stört, wie ich dachte. – d11wtq

+1

@ChrisBarrett interessanterweise scheint der bösen Modus "C-w h/j/k/l" zu implementieren, aber nicht die Pfeil-Schlüssel-Varianten davon. Ich denke, ich kann sie leicht selbst zuordnen. – d11wtq

Antwort

17

diese in Ihre init-Datei:

(windmove-default-keybindings) 

Dann können Sie verwenden SHIFT + arrow zum nächsten benachbarten Fenstern in der angegebenen Richtung zu bewegen .

Sie können einen anderen Modifikator angeben, indem Sie ein Argument übergeben (standardmäßig 'shift).

Oder einfach nur binden, was auch immer Sie auf diese Funktionen wie:

  • windmove-up
  • windmove-down
  • windmove-left
  • windmove-right

Sie auch FrameMove der Mischung hinzufügen können, machen Dies funktioniert transparent über mehrere Ipler Rahmen.

Für nummerierte Fensternavigation gibt es switch-window.el.

+2

Da OP ausdrücklich besagt, dass Emacs im Terminal ausgeführt wird, ist es bemerkenswert, dass 'Shift + UP' nicht in Xterm-basierten Emulatoren funktioniert, einschließlich gnome-terminal & terminator. Siehe [verwandte Frage] (http://stackoverflow.com/questions/10871745/shift-up-arrow-doesnt-highlight-text-emacs-iterm2) für weitere Informationen. – immerrr

+0

Sehr guter Punkt; Sie werden wahrscheinlich in diesem Fall ihre eigenen Bindungen angeben müssen. (Obwohl xterm ist einer der Terminal-Emulatoren, die * macht * auch erweiterte Tastenfolgen, und ich glaube nicht, dass die anderen zwei, die Sie erwähnt haben, tatsächlich darauf basieren :) – phils

+0

Noch besser, danke :) – d11wtq

1

Ich verwende die folgenden auf die nächste (gleich wie Cx o), vorherige, erste und letzte Fenster zu navigieren:

(defun my-previous-window() 
    "Previous window" 
    (interactive) 
    (other-window -1)) 
(global-set-key "\C-xp" 'my-previous-window) 

(global-set-key "\C-xn" 'other-window) 

(defun my-select-first-window() 
    (interactive) 
    (select-window (frame-first-window))) 

(defun my-select-last-window() 
    (interactive) 
    (select-window (previous-window (frame-first-window)))) 

(global-set-key "\C-x<" 'my-select-first-window) 
(global-set-key "\C-x>" 'my-select-last-window) 
2

Sie können ein Präfix Argument Cx geben o wie dieses Cu -1 Cx o. Auf diese Weise können Sie beliebig viele Fenster vorwärts oder rückwärts gehen. Persönlich denke ich, dass es einfacher ist, einen speziellen Schlüssel zum Zurückbewegen eines Fensters zu erstellen. Ich habe dies in meinem .emacs:

(defun other-window-backward() 
    "Goto previous window" 
    (interactive) 
    (other-window -1)) 
(global-set-key (kbd "\C-x p") 'other-window-backward) 
+0

Ah, ich habe nicht gemerkt, dass 'other-window' einen solchen Argument akzeptiert, danke. Schön und einfach mit einem Mapping dann anpassen :) – d11wtq

0

Ich schrieb ein Elisp-Modul eine Weile zurück, um Windmove zu erweitern, um es ein bisschen nützlicher zu machen: http://samograd.ca/stumpwm.el. Sie können stumpwm-move-window- [left/right/up/down] an die von Ihnen gewünschten Tasten binden und die Fenster bewegen sich in die richtige Richtung, sogar in einen anderen Frame (getestet mit 2 Frames).Es gibt auch ein stumpwm-interactive-resize-window für die praktische interaktive Fenstergrößenanpassung mit C-nC-p/C-f/C-b mit Zurück zum Ende der Größenanpassung.

+1

Der Link ist unterbrochen. Könntest du das auf das Emacs-Wiki oder Github oder ähnliches setzen? – phils

0

Verwenden Fenstersprung, z.B .:

;; C-x <direction> to switch windows 
(use-package window-jump 
      :bind (("C-x <up>" . window-jump-up) 
        ("C-x <down>" . window-jump-down) 
        ("C-x <left>" . window-jump-left) 
        ("C-x <right>" . window-jump-right))) 

Für Hilfe bei Verwendung-Paket finden Sie https://github.com/jwiegley/use-package/blob/master/README.md.

1

Aus Gründen der Fertigstellung gibt es window-numbering und ace-window zu

+0

Ich habe diese Zeile zu meinen .emacs hinzugefügt, kann mich aber immer noch nicht wie erwartet bewegen. Etwas stimmt nicht? Meine Version ist 24.5 – Wandy

1

Fügen Sie diese auf Ihrer init-Datei (zB ~/.emacs):

(windmove-default-keybindings) 

tun Dann SHIFT + Pfeil auf die bewegen Fenster in diese Richtung.

Verwandte Themen