There are a large number of vi mode commands for manipulating windows, as well as a number of ex mode commands that correspond to most of the vi mode commands.
As in elvis, the :split
command
will create a new window, and then you can use the ex
command :e
filename
to
edit a new file in the new window. Also as in elvis,
[CTRL-W][CTRL-W] will let you switch
back and forth between windows.
<preface id="VI6-CH-0"> <title>Preface </title> <para> Text editing is one of the most common uses of any computer system, and <command>vi</command> is one of the most useful standard text editors on your system. With <command>vi</command> you can create new files, or edit any existing UNIX text file. ch00.sgm # Makefile for vi book # # Arnold Robbins CHAPTERS = ch00_6.sgm ch00_5.sgm ch00.sgm ch01.sgm ch02.sgm ch03.sgm \ ch04.sgm ch05.sgm ch06.sgm ch07.sgm ch08.sgm APPENDICES = appa.sgm appb.sgm appc.sgm appd.sgm POSTSCRIPT = ch00_6.ps ch00_5.ps ch00.ps ch01.ps ch02.ps ch03.ps \ ch04.ps ch05.ps ch06.ps ch07.ps ch08.ps \ Makefile
The split screen is the result of typing
vim ch00.sgm
followed by
:split Makefile
.
Unlike nvi and elvis, all windows
share the bottom line of the screen
for execution of ex commands.
However, the status line for each file displays [+]
if that file has been modified.
Options control the use of reverse video versus highlighting for the
status line, as well as whether the bottom window even has one.
By default, the bottom window has a status line when there's
more than one window.
Table 11.1 describes the most important vim window management commands.
Command | Function |
---|---|
[N ]sp [lit ] [position ] [file ] | Splits the current window into two. N is the height of the new window. position indicates where in the file to position the cursor. If file is given, edit it in the new window, instead of the current file. |
[N ]new [position ] [file ] | Creates a new window, editing an empty buffer.
If file is given, edit it instead of the
empty buffer.
N and position are
the same as for |
[N ]sv [iew ] [position ] [file ] | |
q [uit ][! ] | Quit the current window
(exit if given in the last window).
If this is the last window on a changed buffer, the command fails,
unless the |
clo [se ][! ] | Close the current window.
Setting the |
hid [e ] | Close the current window, if it is not the last one on the screen. The buffer becomes hidden if this was the last window open upon the buffer. |
on [ly ][! ] | Make this window the only one on the screen.
Other windows with changes are not closed, unless |
res [ize ] [±n ] | |
res [ize ] [n ] | Set the current window height to n if supplied, otherwise, set it to the largest size possible without hiding the other windows. |
qa [ll ][! ] | Exit vim.
The |
wqa [ll ][! ] | Write all changed buffers and exit.
The |
xa [ll ][! ] | |
wa [ll ][! ] | Write all modified buffers that have
filenames.
The |
[N ]sn [ext ] | Split the window and move to the next file in the argument list, or to the Nth file if a count is supplied. |
sta [g ] [tagname ] | Split the window and then run the
|
There are many
more commands for managing the argument list and the list of open buffers.
For example, the :all
command creates one window for
each command line argument.
See the vim online
help for details.
We have included just the most useful of the commands in the above table.
As vim has the most ex commands, so too it has the most vi mode commands, as shown in Table 11.2. As with most vi commands, you can prefix many of the windowing commands with a count.
Command | Function |
---|---|
^W s | Same as
|
^W S | |
^W ^S | |
^W n | Same as
|
^W ^N | |
^W ^ | Perform
|
^W ^^ | |
^W q | Same as the
|
^W ^Q | |
^W c | Same as the
|
^W o | Like the
|
^W ^O | |
^W <DOWN> | Move cursor to nth window below the current one. n is supplied as a prefix argument. |
^W ^J | |
^W j | |
^W <UP> | Move cursor to nth window above the current one. n is supplied as a prefix argument. |
^W ^K | |
^W k | |
^W w | With count, go to nth window. Otherwise, move to the window below the current one. If in the bottom window, move to the top one. |
^W ^W | |
^W W | With count, go to nth window. Otherwise, move to window above the current one. If in the top window, move to the bottom one. |
^W t | Move the cursor to the top window. |
^W ^T | |
^W b | Move the cursor to the bottom window. |
^W ^B | |
^W p | Go to the most recently accessed (previous) window. |
^W ^P | |
^W r | Rotate all the windows downwards. The cursor stays in the same window. |
^W ^R | |
^W R | Rotate all the windows upwards. The cursor stays in the same window. |
^W x | Without count, exchange the current window with the next one. If there is no next window, exchange with the previous window. With count, exchange the current window with the nth window (first window is 1). The cursor is put in the other window. |
^W ^X | |
^W = | Make all windows the same height. |
^W - | Decrease current window height. A preceding count indicates by how much. |
^W + | Increase current window height. A preceding count indicates by how much. |
^W _ | Set the current
window size to the value given in a preceding count.
This is like |
^W ^_ | |
z N [RETURN] | Set the current window height to N. |
^W ] | Split the current window. In the new upper window, use the identifier under the cursor as a tag and go to it. A preceding count indicates the new window's height. |
^W ^] | |
^W f | Split the
current window, and edit the file
name under the cursor in the new window.
Rather complicated file searching is done for this command, see
|
^W ^F | |
^W i | Open a new window and in it, move the cursor to the first line that matches the keyword under the cursor. The search starts at the beginning of the file, and lines that look like comments are ignored. With a preceding count, go to the nth matching line, and don't ignore comments. |
^W ^I | |
^W d | Open a new window, with the cursor on the first macro definition line that contains the keyword under the cursor. The search starts from the beginning of the file. If a count is given, the countth matching line is jumped to. |
^W ^D |
Miscellaneous remarks:
The command ^W ^C
does not close the
current window, since usually ^C
is the
interrupt character, which ends up cancelling the command.
If mouse support is enabled and you are using the GUI version of
vim, you can resize a window by dragging on its
status line with the mouse.
Finally, vim has many options
that control the behavior of the various commands.
In particular, check out the hidden
,
splitbelow
, equalalways
,
winheight
, and cmdheight
options.
See the online help for full details.