Skip to main content
deleted 1 character in body
Source Link

Range is the way vim uses to signalise where the operation areis taken place, as per ':help range' we can have these:

Range is the way vim uses to signalise where the operation are taken place, as per ':help range' we can have these:

Range is the way vim uses to signalise where the operation is taken place, as per ':help range' we can have these:

Source Link

In order to understand what is happening we are going to break this in two parts. First, range and then filter.

Range is the way vim uses to signalise where the operation are taken place, as per ':help range' we can have these:

Line numbers may be specified with:             :range E14 {address}
        {number}        an absolute line number
        .               the current line                          :.
        $               the last line in the file                 :$
        %               equal to 1,$ (the entire file)            :%
        't              position of mark t (lowercase)            :'
        'T              position of mark T (uppercase); when the mark is in
                        another file it cannot be used in a range
        /{pattern}[/]   the next line where {pattern} matches     :/
        ?{pattern}[?]   the previous line where {pattern} matches :?
        \/              the next line where the previously used search
                        pattern matches
        \?              the previous line where the previously used search
                        pattern matches 
        \&              the next line where the previously used substitute
                        pattern matches

Notice '%' will apply the operation for the entire file.

The other part is the filter operation, as per ':help filter', one of ways of filtering is:

:{range}![!]{filter} [!][arg]                           :range!
                        Filter {range} lines through the external program
                        {filter}.  Vim replaces the optional bangs with the
                        latest given command and appends the optional [arg].
                        Vim saves the output of the filter command in a
                        temporary file and then reads the file into the buffer
                        tempfile.  Vim uses the 'shellredir' option to
                        redirect the filter output to the temporary file.
                        However, if the 'shelltemp' option is off then pipes
                        are used when possible (on Unix).

Notice the first part of the command is to inform the range.

So, bringing to your case, :%!ls is informing to vim perform the ls command and apply the result to the entire file.