Vertausche die Position von zwei Fenstern


29

Angenommen, das Folgende ist die aktuelle Struktur meines Fensters:

+ ----- + ----------------------------
| |
| A |
| |
+ ----- +
| |
| B |

Die Reihenfolge von A und B ist nicht ganz natürlich. Es wäre besser, wenn B an der Spitze wäre.

Wenn ich jedoch gehe <C-w>K, wird B die oberste aller Fenster sein, was ich nicht will. Wie kann ich B über A setzen, aber nicht über ein anderes Fenster, das bereits über A liegt?

Und wenn zwei Fenster vertikal geteilt sind, wie kann ich sie in horizontal geteilt ändern?


7
In diesem Beitrag wird das Drehen von Fenstern erläutert. Hier geht es darum, Teilungen von vertikal nach horizontal umzuschalten.
lcd047

@ lcd047 Dies sind Fragen außerhalb dieser Site. Lohnt es sich, hier eine kleine Antwort mit den Links (die wertvoll sind) zu schreiben?
Bernhard

1
@ Bernhard Ich nehme an, das ist eine gute Frage für Meta .
lcd047

1
@Bernhard Ja . Stellen Sie sicher, dass Sie eine vollständige Antwort schreiben, nicht nur Links.
Gilles 'SO- hör auf böse zu sein'

1
Dann erklären Sie bitte, was Sie versuchen und warum die beiden Antworten, auf die ich Sie hingewiesen habe, das Problem nicht ansprechen.
lcd047

Antworten:


33

So tauschen Sie die beiden Teile eines geteilten Fensters aus: <C-w> <C-r>


Ich kann mich irren, aber Ihre Lösung dreht die Fenster so, dass bei mehr als 2 Teilungen das Ergebnis nicht das ist, wonach OP gesucht hat.
statox

Du liegst absolut richtig. Das OP suchte nach s.th. komplizierter als "Vertauschen der beiden Teile eines geteilten Fensters".
Modesto

Eigentlich sucht OP nach einem Befehl zum Vertauschen von zwei geteilten Fenstern, aber Ihre Lösung dreht alle aktuellen geteilten Fenster. Wie in :h CTRL-W_CTRL-R: The second window becomes the first one, the third one becomes the second one, etc.Wenn Sie also 3 Splits haben, befindet sich der Cursor auf dem unteren und <c-w><c-r>How can I put B above A, but not above any other window that is already above A?
drittes

6

Um windowPositionen auszutauschen , entspricht der Effekt dem Austauschen von Puffern, die in diesen beiden Fenstern angezeigt werden.
Beispiel: Wenn Fenster A über Puffer 2 verfügt und Fenster B über Puffer 8 verfügt, möchten Sie zu Fenster A wechseln, Puffer 8 auswählen und dann zu Fenster B Puffer 2 auswählen.

Diese Idee hat mich dazu inspiriert, ein Skript zu schreiben - und sie befindet sich bereits in meiner eigenen Toolbox

Funktionscode:

function! WinBufSwap()
  let thiswin = winnr()
  let thisbuf = bufnr("%")
  let lastwin = winnr("#")
  let lastbuf = winbufnr(lastwin)

  exec  lastwin . " wincmd w" ."|".
      \ "buffer ". thisbuf ."|".
      \ thiswin ." wincmd w" ."|".
      \ "buffer ". lastbuf
endfunction

command! Wswap :call WinBufSwap()
map <Leader>bs <C-c>:call WinBufSwap()<CR>
  1. Wählen Sie Fenster A aus
  2. Wählen Sie Fenster B aus
  3. :call WinBufSwap()
    Dadurch werden die Puffer in den beiden vorausgewählten Fenstern ausgetauscht, und der Cursor bleibt im ursprünglichen Fenster.

Die Auswahl der beiden gewünschten Fenster, die vorab ausgetauscht werden sollen, ist das Schlüsseldetail, da dies erforderlich ist, um Vim anzugeben, mit welchen Fenstern gearbeitet werden soll.


Nur eine Genauigkeit, wenn Sie sagen "Wählen Sie das Fenster A, dann B", meinen Sie "Haben Sie den Fokus auf A, dann auf B, um die Reihenfolge der zuletzt gesehenen Puffer und Fenster zu markieren, um richtig zu tauschen? Oder doch?"
Wählen

Ja genau: Ich verwende "select" als "focus on".
Cometsong

6
STRG-W x Aktuelles Fenster mit Fenster N tauschen
                   (Standard: nächstes Fenster)

( index.txtAbschnitt 2.2, "Fensterbefehle")

Wenn A das aktuelle Fenster ist, ist das nächste B, Sie brauchen also nur <C-w> x

Wenn B das aktuelle Fenster ist (und unten weitere Fenster), müssen Sie zuerst zu A gehen und dann Folgendes austauschen: <C-w> k <C-w> x


4

Eine andere Alternative zum Vertauschen von Fenstern oder zum Vertauschen von Puffern besteht darin, Positionen (mit Großbuchstaben ) in Ihren Dateien zu markieren und diese Marken in den Fenstern Ihrer Wahl zu öffnen.

Wenn ich zum Beispiel zwei Dateien habe, file_A und file_B :

  • Ich würde das Fenster mit file_A gehen und es markieren:mA
  • gehe zum Fenster mit file_B und markiere es:mB
  • Dann holen Sie sich die Markierung von file_A in dieses Fenster:'A
  • dann zum ersten Fenster zurückgehen und die Marke von holen file_B dort: 'B.

Der Vorteil dieser Methode ist, dass Sie aus irgendeinem Grund Ihr Fenster mehr als einmal teilen und es keine eindeutige Logik gibt, um es zu vertauschen. Wenn Sie beispielsweise die Fenster um 12 Uhr und 7 Uhr tauschen möchten, können Sie ' t drehen Sie einfach die Fenster herum, aber Sie können die Puffer leicht austauschen.


0

Sie können die Puffer mit der folgenden Funktion zwischen zwei Fenstern austauschen:

function! SwitchWindow(count) abort
    let l:current_buf = winbufnr(0)
    exe "buffer" . winbufnr(a:count)
    exe a:count . "wincmd w"
    exe "buffer" . l:current_buf
    wincmd p
endfunction
nnoremap <C-w>x :<C-u>call SwitchWindow(v:count1)<CR>

In den meisten Fällen wird das Austauschen der Puffer technisch wie das Austauschen von Fenstern verhalten. Da Sie Fenster nicht manuell verfolgen, verfolgen Sie, welches Fenster welchen Puffer enthält. Mit der obigen Funktion kommen Sie in den meisten Situationen zurecht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.