Vim - Working with files and buffers


:ls to show list of buffers. These are just the in-memory representations of the files. :bnext, :bprevious, :bfirst, :blast can be used to go between buffers :bdelete can be used to delete buffers. Ranges can be passed in to delete multiple buffers at once.

The argument list

:args lists out the files passed as command line arguments on startup. However this can also be changed at runtime by passing in some values

:args <file1> <file2> adds the files to the argument list and also opens them up (closing any existing open files).

:args `{cmd}` runs {cmd} in the shell and uses the result to fill in the argument list. This could for example be cating a file to get the list of files to open.

:argdo {cmd} executes an Ex command on all the files in the list.

:next and :prev traverses the files in the arg list

Changes to the files/buffers

Suffix ! to ignore changes when switchign buffers or exiting

:edit! discards changes by re-reading file from disk

:qall! quits vim discarding all changes in all buffers

:wall writes all modified buffers to disk

Hidden setting

This is used when we want to disable the “nags” from vim when we try to switch from a modified buffer. This is useful when applying batches of commands to the arg list or buffers using :argdo or :bufdo.

Use :set hidden or :set hid to enable this. Use :set nohidden or :set nohid to disable this.

Relative paths in commandline

% represents the full path to the current file. %:h gets expanded to the path of the directory of the current file when used in the vim command line. For example: mkdir -p %:h creates the directory for the current file’s path in cases where it does not exist.

Pressing <Tab> after typing %:h also auto-completes the text with the directory of the current file.

Save file as super-user

When we forget to start vim as super-user:

:w !sudo tee % > /dev/null

This apparently fails in NeoVim as of now. There is a “suda” plugin or there is the sudo_exec function: here

See Also