Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I swap positions of two open files (in splits) in vim?

Assume I've got some arbitrary layout of splits in vim.

____________________ | one       | two  | |           |      | |           |______| |           | three| |           |      | |___________|______| 

Is there a way to swap one and two and maintain the same layout? It's simple in this example, but I'm looking for a solution that will help for more complex layouts.

UPDATE:

I guess I should be more clear. My previous example was a simplification of the actual use-case. With an actual instance: alt text

How could I swap any two of those splits, maintaining the same layout?

Update! 3+ years later...

I put sgriffin's solution in a Vim plugin you can install with ease! Install it with your favorite plugin manager and give it a try: WindowSwap.vim

a little demo

like image 610
wes Avatar asked Apr 06 '10 17:04

wes


People also ask

How do I switch between split sections in Vim?

To move between splits first press Ctrl-w (I remember this by Control Window, I'm not sure what the official mnemonic is) Then press a directional key to move the cursor to the split you're interested in. Directional key could be the arrows or my preferred home row method.

How do I swap panes in Vim?

After Vim rotates the windows, the cursor remains in the window from which the rotate command executed; thus, the cursor moves with the window. CTRL-Wx and CTRL-WCTRL-X let you exchange two windows in a row or column of windows.

How do I manage splits in Vim?

To split the vim screen horizontally, or open a new workspace at the bottom of the active selection, press Ctrl + w , followed by the letter 's' . In the example below, the left section has been split into two workspaces. To navigate to the bottom section hit Ctrl + w , followed by the letter 'j' .


1 Answers

Starting with this:

____________________ | one       | two  | |           |      | |           |______| |           | three| |           |      | |___________|______| 

Make 'three' the active window, then issue the command ctrl+w J. This moves the current window to fill the bottom of the screen, leaving you with:

____________________ | one       | two  | |           |      | |___________|______| | three            | |                  | |__________________| 

Now make either 'one' or 'two' the active window, then issue the command ctrl+w r. This 'rotates' the windows in the current row, leaving you with:

____________________ | two       | one  | |           |      | |___________|______| | three            | |                  | |__________________| 

Now make 'two' the active window, and issue the command ctrl+w H. This moves the current window to fill the left of the screen, leaving you with:

____________________ | two       | one  | |           |      | |           |______| |           | three| |           |      | |___________|______| 

As you can see, the manouevre is a bit of a shuffle. With 3 windows, it's a bit like one of those 'tile game' puzzles. I don't recommand trying this if you have 4 or more windows - you'd be better off closing them then opening them again in the desired positions.

I made a screencast demonstrating how to work with split windows in Vim.

like image 82
nelstrom Avatar answered Sep 27 '22 19:09

nelstrom