Finding the file to edit
Rustvim :help pages, generated
from source
using the tree-sitter-vimdoc parser.
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.
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 browser
Nvim can edit a directory. Try this:
:edit .The window will be filled with a directory listing. It looks like this:
check/ autoload.txt change.txt eval.txt filetype.txt help.txt
Directories end in "/".
You can use Normal mode Vim commands to move around in the text. For example,
move the cursor atop a file and press
<Enter>; you will then be editing that
file. To go back to the listing use ":edit ." again. CTRL-O also works.Try using
<Enter> while the cursor is atop a directory name. The result is
that the file browser moves into that directory and displays the items found
there. Pressing "-" moves you one level higher, to the parent directory. "R"
reloads the listing.The directory listing opened by ":edit ." is a viewer, not a file manager. For
netrw's browser, file operations, and remote directories, use ":Explore":
:Explore .
The netrw browser may also use URLs such as:
:Explore ftp://somehost/path/to/dir/ :e scp://somehost/path/to/dir/
Note: The trailing "/" is important.
See netrw-browse for more.
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.txtTo avoid much of the typing, do this:
:cd VeryLongFileName :edit file1.txt :edit file2.txt :edit file3.txtThe ":cd" command changes the current directory. You can see what the current directory is with the ":pwd" command:
:pwd /home/Bram/VeryLongFileNameVim 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/VeryLongFileNameSo 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.TAB LOCAL DIRECTORY
When you open a new tabpage, it uses the directory of the window in the
previous tabpage from which the new tabpage was opened. You can change the
directory of the current tabpage using the
:tcd command. All the windows
in a tabpage share this directory except for windows with a window-local
directory. Any new windows opened in this tabpage will use this directory as
the current working directory. Using a :cd command in a tabpage will not
change the working directory of tabpages which have a tab local directory.
When the global working directory is changed using the :cd command in a tab
page, it will also change the current tabpage working 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:
gfVim 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/includeThis 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+=./protoThis 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.hVim 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.txtThe 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 argument of ":hide" is another command. ":hide" makes that command behave as if 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:
:buffersA command which does the same, is not so obvious to list buffers, but is much shorter to type:
:lsThe output could look like this:
1 #h "help.txt" line 62 2 %a + "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.
a 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 2But 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 helpVim will find the 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 3This 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 3Again, 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