2004-06-20 12:51:53 +00:00
|
|
|
*usr_22.txt* For Vim version 7.0aa. Last change: 2004 Jun 16
|
2004-06-13 20:20:40 +00:00
|
|
|
|
|
|
|
VIM USER MANUAL - by Bram Moolenaar
|
|
|
|
|
|
|
|
Finding the file to edit
|
|
|
|
|
|
|
|
|
|
|
|
Files can be found everywhere. So how do you find them? Vim offers various
|
|
|
|
ways to browse the directory tree. There are commands to jump to a file that
|
|
|
|
is mentioned in another. And Vim remembers which files have been edited
|
|
|
|
before.
|
|
|
|
|
|
|
|
|22.1| The file explorer
|
|
|
|
|22.2| The current directory
|
|
|
|
|22.3| Finding a file
|
|
|
|
|22.4| The buffer list
|
|
|
|
|
|
|
|
Next chapter: |usr_23.txt| Editing other files
|
|
|
|
Previous chapter: |usr_21.txt| Go away and come back
|
|
|
|
Table of contents: |usr_toc.txt|
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
*22.1* The file explorer
|
|
|
|
|
|
|
|
Vim has a plugin that makes it possible to edit a directory. Try this: >
|
|
|
|
|
|
|
|
:edit .
|
|
|
|
|
|
|
|
Through the magic of autocommands and Vim scripts, the window will be filled
|
|
|
|
with the contents of the directory. It looks like this:
|
|
|
|
|
|
|
|
" Press ? for keyboard shortcuts ~
|
|
|
|
" Sorted by name (.bak,~,.o,.h,.info,.swp,.obj,.orig,.rej at end of list) ~
|
|
|
|
"= /home/mool/vim/vim6/runtime/doc/ ~
|
|
|
|
../ ~
|
|
|
|
check/ ~
|
|
|
|
Makefile ~
|
|
|
|
autocmd.txt ~
|
|
|
|
change.txt ~
|
|
|
|
eval.txt~ ~
|
|
|
|
filetype.txt~ ~
|
|
|
|
help.txt.info ~
|
|
|
|
|
|
|
|
You can see these items:
|
|
|
|
1. A comment about using ? to get help for the functionality of the file
|
|
|
|
explorer.
|
|
|
|
2. The second line mentions how the items in the directory are listed. They
|
|
|
|
can be sorted in several ways.
|
|
|
|
3. The third line is the name of the current directory.
|
|
|
|
4. The "../" directory item. This is the parent directory.
|
|
|
|
5. The directory names.
|
|
|
|
6. The ordinary file names. As mentioned in the second line, some are not
|
|
|
|
here but "at the end of the list".
|
|
|
|
7. The less ordinary file names. You are expected to use these less often,
|
|
|
|
therefore they have been moved to the end.
|
|
|
|
|
|
|
|
If you have syntax highlighting enabled, the different parts are highlighted
|
|
|
|
to make it easier to spot them.
|
|
|
|
|
|
|
|
You can use Normal mode Vim commands to move around in the text. For example,
|
|
|
|
move to a file and press <Enter>. Now you are editing that file. To go back
|
|
|
|
to the explorer use ":edit ." again. CTRL-O also works.
|
|
|
|
Try using <Enter> while the cursor is on a directory name. The result is
|
|
|
|
that the explorer moves into that directory and displays the items found
|
|
|
|
there. Pressing <Enter> on the first directory "../" moves you one level
|
|
|
|
higher. Pressing "-" does the same thing, without the need to move to the
|
|
|
|
"../" item first.
|
|
|
|
|
|
|
|
You can press ? to get short help on the things you can do in the explorer.
|
|
|
|
This is what you get:
|
|
|
|
|
|
|
|
" <enter> : open file or directory ~
|
|
|
|
" o : open new window for file/directory ~
|
|
|
|
" O : open file in previously visited window ~
|
|
|
|
" p : preview the file ~
|
|
|
|
" i : toggle size/date listing ~
|
|
|
|
" s : select sort field r : reverse sort ~
|
|
|
|
" - : go up one level c : cd to this dir ~
|
|
|
|
" R : rename file D : delete file ~
|
|
|
|
" :help file-explorer for detailed help ~
|
|
|
|
|
|
|
|
The first few commands are for selecting a file to display. Depending on what
|
|
|
|
command you use, the file appears somewhere:
|
|
|
|
|
|
|
|
<Enter> Uses the current window.
|
|
|
|
o Opens a new window.
|
|
|
|
O Uses the previously visited window.
|
|
|
|
p Uses the preview window, and moves the cursor back
|
|
|
|
into the explorer window. |preview-window|
|
|
|
|
|
|
|
|
The following commands are used to display other information:
|
|
|
|
|
|
|
|
i Display the size and date for the file. Using i again
|
|
|
|
will hide the information.
|
|
|
|
s Use the field the cursor is in to sort on. First
|
|
|
|
display the size and date with i. Then Move the
|
|
|
|
cursor to the size of any file and press s. The files
|
2004-06-20 12:51:53 +00:00
|
|
|
will now be sorted on size. Press s while the cursor
|
2004-06-13 20:20:40 +00:00
|
|
|
is on a date and the items will be sorted on date.
|
|
|
|
r reverse the sorting order (either size or date)
|
|
|
|
|
|
|
|
There are a few extra commands:
|
|
|
|
|
|
|
|
c Change the current directory to the displayed
|
|
|
|
directory. You can then type an ":edit" command for
|
|
|
|
one of the files without prepending the path.
|
|
|
|
R Rename the file under the cursor. You will be
|
|
|
|
prompted for the new name.
|
|
|
|
D Delete the file under the cursor. You will get a
|
|
|
|
prompt to confirm this.
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
*22.2* The current directory
|
|
|
|
|
|
|
|
Just like the shell, Vim has the concept of a current directory. Suppose you
|
|
|
|
are in your home directory and want to edit several files in a directory
|
|
|
|
"VeryLongFileName". You could do: >
|
|
|
|
|
|
|
|
:edit VeryLongFileName/file1.txt
|
|
|
|
:edit VeryLongFileName/file2.txt
|
|
|
|
:edit VeryLongFileName/file3.txt
|
|
|
|
|
|
|
|
To avoid much of the typing, do this: >
|
|
|
|
|
|
|
|
:cd VeryLongFileName
|
|
|
|
:edit file1.txt
|
|
|
|
:edit file2.txt
|
|
|
|
:edit file3.txt
|
|
|
|
|
|
|
|
The ":cd" command changes the current directory. You can see what the current
|
|
|
|
directory is with the ":pwd" command: >
|
|
|
|
|
|
|
|
:pwd
|
|
|
|
/home/Bram/VeryLongFileName
|
|
|
|
|
|
|
|
Vim remembers the last directory that you used. Use "cd -" to go back to it.
|
|
|
|
Example: >
|
|
|
|
|
|
|
|
:pwd
|
|
|
|
/home/Bram/VeryLongFileName
|
|
|
|
:cd /etc
|
|
|
|
:pwd
|
|
|
|
/etc
|
|
|
|
:cd -
|
|
|
|
:pwd
|
|
|
|
/home/Bram/VeryLongFileName
|
|
|
|
:cd -
|
|
|
|
:pwd
|
|
|
|
/etc
|
|
|
|
|
|
|
|
|
|
|
|
WINDOW LOCAL DIRECTORY
|
|
|
|
|
|
|
|
When you split a window, both windows use the same current directory. When
|
|
|
|
you want to edit a number of files somewhere else in the new window, you can
|
|
|
|
make it use a different directory, without changing the current directory in
|
|
|
|
the other window. This is called a local directory. >
|
|
|
|
|
|
|
|
:pwd
|
|
|
|
/home/Bram/VeryLongFileName
|
|
|
|
:split
|
|
|
|
:lcd /etc
|
|
|
|
:pwd
|
|
|
|
/etc
|
|
|
|
CTRL-W w
|
|
|
|
:pwd
|
|
|
|
/home/Bram/VeryLongFileName
|
|
|
|
|
|
|
|
So long as no ":lcd" command has been used, all windows share the same current
|
|
|
|
directory. Doing a ":cd" command in one window will also change the current
|
|
|
|
directory of the other window.
|
|
|
|
For a window where ":lcd" has been used a different current directory is
|
|
|
|
remembered. Using ":cd" or ":lcd" in other windows will not change it.
|
|
|
|
When using a ":cd" command in a window that uses a different current
|
|
|
|
directory, it will go back to using the shared directory.
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
*22.3* Finding a file
|
|
|
|
|
|
|
|
You are editing a C program that contains this line:
|
|
|
|
|
|
|
|
#include "inits.h" ~
|
|
|
|
|
|
|
|
You want to see what is in that "inits.h" file. Move the cursor on the name
|
|
|
|
of the file and type: >
|
|
|
|
|
|
|
|
gf
|
|
|
|
|
|
|
|
Vim will find the file and edit it.
|
|
|
|
What if the file is not in the current directory? Vim will use the 'path'
|
|
|
|
option to find the file. This option is a list of directory names where to
|
|
|
|
look for your file.
|
|
|
|
Suppose you have your include files located in "c:/prog/include". This
|
|
|
|
command will add it to the 'path' option: >
|
|
|
|
|
|
|
|
:set path+=c:/prog/include
|
|
|
|
|
|
|
|
This directory is an absolute path. No matter where you are, it will be the
|
|
|
|
same place. What if you have located files in a subdirectory, below where the
|
|
|
|
file is? Then you can specify a relative path name. This starts with a dot:
|
|
|
|
>
|
|
|
|
:set path+=./proto
|
|
|
|
|
|
|
|
This tells Vim to look in the directory "proto", below the directory where the
|
|
|
|
file in which you use "gf" is. Thus using "gf" on "inits.h" will make Vim
|
|
|
|
look for "proto/inits.h", starting in the directory of the file.
|
|
|
|
Without the "./", thus "proto", Vim would look in the "proto" directory
|
|
|
|
below the current directory. And the current directory might not be where the
|
|
|
|
file that you are editing is located.
|
|
|
|
|
|
|
|
The 'path' option allows specifying the directories where to search for files
|
|
|
|
in many more ways. See the help on the 'path' option.
|
|
|
|
The 'isfname' option is used to decide which characters are included in the
|
|
|
|
file name, and which ones are not (e.g., the " character in the example
|
|
|
|
above).
|
|
|
|
|
|
|
|
When you know the file name, but it's not to be found in the file, you can
|
|
|
|
type it: >
|
|
|
|
|
|
|
|
:find inits.h
|
|
|
|
|
|
|
|
Vim will then use the 'path' option to try and locate the file. This is the
|
|
|
|
same as the ":edit" command, except for the use of 'path'.
|
|
|
|
|
|
|
|
To open the found file in a new window use CTRL-W f instead of "gf", or use
|
|
|
|
":sfind" instead of ":find".
|
|
|
|
|
|
|
|
|
|
|
|
A nice way to directly start Vim to edit a file somewhere in the 'path': >
|
|
|
|
|
|
|
|
vim "+find stdio.h"
|
|
|
|
|
|
|
|
This finds the file "stdio.h" in your value of 'path'. The quotes are
|
|
|
|
necessary to have one argument |-+c|.
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
*22.4* The buffer list
|
|
|
|
|
|
|
|
The Vim editor uses the term buffer to describe a file being edited.
|
|
|
|
Actually, a buffer is a copy of the file that you edit. When you finish
|
|
|
|
changing the buffer, you write the contents of the buffer to the file.
|
|
|
|
Buffers not only contain file contents, but also all the marks, settings, and
|
|
|
|
other stuff that goes with it.
|
|
|
|
|
|
|
|
|
|
|
|
HIDDEN BUFFERS
|
|
|
|
|
|
|
|
Suppose you are editing the file one.txt and need to edit the file two.txt.
|
|
|
|
You could simply use ":edit two.txt", but since you made changes to one.txt
|
|
|
|
that won't work. You also don't want to write one.txt yet. Vim has a
|
|
|
|
solution for you: >
|
|
|
|
|
|
|
|
:hide edit two.txt
|
|
|
|
|
|
|
|
The buffer "one.txt" disappears from the screen, but Vim still knows that you
|
|
|
|
are editing this buffer, so it keeps the modified text. This is called a
|
|
|
|
hidden buffer: The buffer contains text, but you can't see it.
|
|
|
|
The ":hide" command argument is another command. It makes that command
|
|
|
|
behave like the 'hidden' option was set. You could also set this option
|
|
|
|
yourself. The effect is that when any buffer is abandoned, it becomes hidden.
|
|
|
|
Be careful! When you have hidden buffers with changes, don't exit Vim
|
|
|
|
without making sure you have saved all the buffers.
|
|
|
|
|
|
|
|
|
|
|
|
INACTIVE BUFFERS
|
|
|
|
|
|
|
|
When a buffer has been used once, Vim remembers some information about it.
|
|
|
|
When it is not displayed in a window and it is not hidden, it is still in the
|
|
|
|
buffer list. This is called an inactive buffer. Overview:
|
|
|
|
|
|
|
|
Active Appears in a window, text loaded.
|
|
|
|
Hidden Not in a window, text loaded.
|
|
|
|
Inactive Not in a window, no text loaded.
|
|
|
|
|
|
|
|
The inactive buffers are remembered, because Vim keeps information about them,
|
|
|
|
like marks. And remembering the file name is useful too, so that you can see
|
|
|
|
which files you have edited. And edit them again.
|
|
|
|
|
|
|
|
|
|
|
|
LISTING BUFFERS
|
|
|
|
|
|
|
|
View the buffer list with this command: >
|
|
|
|
|
|
|
|
:buffers
|
|
|
|
|
|
|
|
A command which does the same, is not so obvious to list buffers, but is much
|
|
|
|
shorter to type: >
|
|
|
|
|
|
|
|
:ls
|
|
|
|
|
|
|
|
The output could look like this:
|
|
|
|
|
|
|
|
1 #h "help.txt" line 62 ~
|
|
|
|
2 %l+ "usr_21.txt" line 1 ~
|
|
|
|
3 "usr_toc.txt" line 1 ~
|
|
|
|
|
|
|
|
The first column contains the buffer number. You can use this to edit the
|
|
|
|
buffer without having to type the name, see below.
|
|
|
|
After the buffer number come the flags. Then the name of the file
|
|
|
|
and the line number where the cursor was the last time.
|
|
|
|
The flags that can appear are these (from left to right):
|
|
|
|
|
|
|
|
u Buffer is unlisted |unlisted-buffer|.
|
|
|
|
% Current buffer.
|
|
|
|
# Alternate buffer.
|
|
|
|
l Buffer is loaded and displayed.
|
|
|
|
h Buffer is loaded but hidden.
|
|
|
|
= Buffer is read-only.
|
|
|
|
- Buffer is not modifiable, the 'modifiable' option is off.
|
|
|
|
+ Buffer has been modified.
|
|
|
|
|
|
|
|
|
|
|
|
EDITING A BUFFER
|
|
|
|
|
|
|
|
You can edit a buffer by its number. That avoids having to type the file
|
|
|
|
name: >
|
|
|
|
|
|
|
|
:buffer 2
|
|
|
|
|
|
|
|
But the only way to know the number is by looking in the buffer list. You can
|
|
|
|
use the name, or part of it, instead: >
|
|
|
|
|
|
|
|
:buffer help
|
|
|
|
|
|
|
|
Vim will find a best match for the name you type. If there is only one
|
|
|
|
buffer that matches the name, it will be used. In this case "help.txt".
|
|
|
|
To open a buffer in a new window: >
|
|
|
|
|
|
|
|
:sbuffer 3
|
|
|
|
|
|
|
|
This works with a name as well.
|
|
|
|
|
|
|
|
|
|
|
|
USING THE BUFFER LIST
|
|
|
|
|
|
|
|
You can move around in the buffer list with these commands:
|
|
|
|
|
|
|
|
:bnext go to next buffer
|
|
|
|
:bprevious go to previous buffer
|
|
|
|
:bfirst go to the first buffer
|
|
|
|
:blast go to the last buffer
|
|
|
|
|
|
|
|
To remove a buffer from the list, use this command: >
|
|
|
|
|
|
|
|
:bdelete 3
|
|
|
|
|
|
|
|
Again, this also works with a name.
|
|
|
|
If you delete a buffer that was active (visible in a window), that window
|
|
|
|
will be closed. If you delete the current buffer, the current window will be
|
|
|
|
closed. If it was the last window, Vim will find another buffer to edit. You
|
|
|
|
can't be editing nothing!
|
|
|
|
|
|
|
|
Note:
|
|
|
|
Even after removing the buffer with ":bdelete" Vim still remembers it.
|
|
|
|
It's actually made "unlisted", it no longer appears in the list from
|
|
|
|
":buffers". The ":buffers!" command will list unlisted buffers (yes,
|
|
|
|
Vim can do the impossible). To really make Vim forget about a buffer,
|
|
|
|
use ":bwipe". Also see the 'buflisted' option.
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
|
|
|
|
Next chapter: |usr_23.txt| Editing other files
|
|
|
|
|
|
|
|
Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
|