分类: LINUX
2009-08-26 21:31:20
Q.
How do I open and edit multiple files under VIM text editor running
under Ubuntu Linux / UNIX operating systems to improve my productivity?
A. Vim offers multiple file
editing with the help of windows. You can easily open multiple files
and edit them using the concept of buffers.
A buffer is nothing but a file loaded into memory for editing. The original file remains unchanged until you write the buffer to the file using w (other file saving related) command.
A window is noting but a viewport onto a buffer. You can use
multiple windows on one buffer, or several windows on different
buffers. By default, Vim starts with one window, for example open
/etc/passwd file, enter:
$ vim /etc/passwd
Start vim as follows to open two windows,split horizontally:
$ vim -o /etc/passwd /etc/hosts
OR
$ vim -o file1.txt resume.txt
(Fig.01: split horizontal windows under VIM)
The -O option allows you to open two windows, split vertically, enter:
$ vim -O /etc/passwd /etc/hosts
This operation is also known as moving cursor to other windows:
Use all your regular vim command such as i, w and so on for editing text.
Press CTRL+W CTRL-Q to close the current windows. You can also press [ESC]+:q to quit current window.
Press CTRL+W + n - Create a new window and start editing an empty file in it.
Press CTRL+W+ s - to split current window in two.
Press [ESC]+:new /path/to/file. This will create a new window and
start editing file /path/to/file in it. For example, open file called
/etc/hosts.deny, enter:
:new /etc/hosts.deny
(Fig.02: Create a new window and start editing file /etc/hosts.deny in it.)
(Fig.03: Two files opened in a two windows)
You can increase or decrease windows size by N number. For example, increase windows size by 5, press [ESC] + 5 + CTRL + W+ +.
To decrease windows size by 5, press [ESC]+ 5 + CTRL+ W + -.
Key combination | Action |
CTRL-W h | move to the window on the left |
CTRL-W j | move to the window below |
CTRL-W k | move to the window above |
CTRL-W l | move to the window on the right |
CTRL-W t | move to the TOP window |
CTRL-W b | move to the BOTTOM window |
Type the following command (also known as quit all command):
:qall
Note: If any of the windows contain changes, Vim will not exit. The
cursor will automatically be positioned in a window with changes.
You can then either use ":write" to save the changes:
:write
or ":quit!" to throw them away:
:quite!
To save all changes in all windows and quite , use this command:
:wqall
This writes all modified files and quits Vim. Finally, there is a command that quits Vim and throws away all changes:
:qall!
I find the vertical split to be more useful.
Type
:vsp
for vertical split.
Bash,
Yeah I agree with you. Vertical split is especially very good if you a wide screen monitor.
I absolutely love the multiple window feature of the vim and it definitely enhances the productivity to a great extend.
Ramesh
vimdiff file1.txt file2.txt
will give you vertical split.
Your text states “You can then either use “:write” to save the changes, or “:quit!” to throw them away.”
But your command says “:quite!”
May wanna fix that ;)
When you are in split mode, you can type
:set mouse=a
to enable mouse command and then you can use your mouse to drag the window boundary to resize the all windows.
Cheers
Hi,
If I have multiple files opened, say by
$ vim file1.txt file2.txt file3.txt
Now, :ls shows all the open buffers
When I do :q ,all the buffers are closed, but is there a way to close a particular buffer, say only file2.txt
Aman,
It’s easy to close one buffer. In fact, there are a lot of ways to navigate through many open buffers. Here’s some
Using your example:
$ vim file1.txt file2.txt file3.txt
you currently have 3 open buffers. Let’s say you are currently editing file1.txt
:bn – go to next buffer (in this case, file2.txt)
:bp – go to previous buffer (will go backwards to file3.txt)
:bd – delete current buffer (file1.txt will be closed and file2.txt
will become the current buffer) (can also take a filename or number as
an argument)
:b – go directly to a file
FILENAME
If you are editing file2.txt and want to close file3.txt, type:
:bd file3.txt
You will still be editing file2.txt, but file3.txt will no longer be open.
NUMBER
in vim,
:ls – this command lists your open files and assigns an identifying number to each one.
In your example, it would look like
:ls
1 “file1.txt” line 0
2 “file2.txt” line 0
3 “file3.txt” line 0
:b 3
will go directly to file3.txt (which is buffer 3)
:bd 2
will delete the file2.txt buffer
I think this is a good starting point. Google something like “vim buffers” for more info!
Chris
Very useful
Thanks
Thanks dude
I generally used gvim instead of vi/vim. I really like to woke with
multi-file in split windows. This web page help me to switch window
using keystrokes only which i have needed.