chapters/40.markdown @ a16e1fecfe07 default tip

Be clear
author Steve Losh <steve@stevelosh.com>
date Mon, 27 Mar 2017 13:10:55 +0000
parents e66e6a4e104d
children (none)
Paths
=====

Vim is a text editor, and text editors (usually) work with text files.  Text
files live on filesystems, and to specify files we use paths.  Vimscript has
a few built-in utilities that can be extremely helpful when you need to work
with paths.

Absolute Paths
--------------

Sometimes it's handy to be able to get the absolute path of a certain file for
use with external scripts.  Run the following commands:

    :::vim
    :echom expand('%')
    :echom expand('%:p')
    :echom fnamemodify('foo.txt', ':p')

The first command displays the relative path of whatever file you're currently
editing.  `%` means "the current file".  Vim supports a bunch of other strings
you can use with `expand()` as well.

The second command displays the full, absolute path of that file.  The `:p` in
the string tells Vim that you want the absolute path.  There are a ton of other
modifiers you can use.

The third command displays an absolute path to the file `foo.txt` in the current
directory, regardless of whether that file actually exists.  `fnamemodify()` is
a Vim function that's more flexible than `expand()` in that you can specify any
file name, not just one of `expand()`'s special strings.

Listing Files
-------------

You might also want to get a listing of files in a specific directory.  Run the
following command:

    :::vim
    :echo globpath('.', '*')

Vim will display all of the files and directories in the current directory.  The
`globpath()` function returns a string, with each name separated by a newline.
To get a list you'll need to `split()` it yourself.  Run this command:

    :::vim
    :echo split(globpath('.', '*'), '\n')

This time Vim displays a Vimscript list containing each path.  If you've got
newlines in your filenames you're on your own, sorry.

`globpath()`'s wildcards work mostly as you would expect.  Run the following
command:

    :::vim
    :echo split(globpath('.', '*.txt'), '\n')

Vim displays a list of all `.txt` files in the current directory.

You can recursively list files with `**`.  Run this command:

    :::vim
    :echo split(globpath('.', '**'), '\n')

Vim will list all files and directories under the current directory.

`globpath()` is *extremely* powerful.  You'll learn more when you complete this
chapter's exercises.

Exercises
---------

Read `:help expand()`.

Read `:help fnamemodify()`.

Read `:help filename-modifiers`.

Read `:help simplify()`.

Read `:help resolve()`.

Read `:help globpath()`.

Read `:help wildcards`.