Welcome to Vieb

Intro

Welcome to Vieb's official, complete and offline documentation. Vieb is short for "Vim Inspired Electron Browser" and can be found on vieb.dev or Github. These are the essential keys you need for basic use: Vieb is separated into different modes, which have different keyboard mappings. You can see the current mode at all times in the navbar, next to the url. All mappings listed above assume the default mappings and that you are in normal mode. You can list all of Vieb's current keyboard mappings with :map! as explained in the :map paragraph. It's also an option to use your mouse, but you can do everything without it.

Help structure

This documentation offers you functional documentation regarding all of Vieb's features. These are the main components of Vieb and thus the chapters of this help page: If you want to find out what a certain command, setting or action means, you can call the help command with its name as an argument, for example: :help toSearchMode or :help mappings. You can also search help for a specific key combination such as :help gg. If you have previously used a different browser (such as Firefox or qutebrowser), you might want to check out the examples to configure Vieb as close as possible to them. For any kind of help or suggestions, please check out the Github repository, Github discussions, the Matrix space, Telegram or the vieb.dev homepage.

Cheatsheet

In the image below, you can see an overview of all default keybindings and basic functionality of Vieb. While it does not substitute reading the help page, it can be an excellent starting point to learn all the different mappings.

Commands

Commands can be used for various additional features and configuration. Entering commands is done by switching to command mode and then typing text. The command can be executed with action.useEnteredData. This chapter will list all Vieb's commands, including a list of examples and the mappings that use the listed command. It's also possible to add custom commands using :command with the name and actions as the arguments. If there is only a single command that starts with the entered text, that command will be run, for example: "mkv" is enough to run the :mkviebrc command.

Command syntax

All commands follow a similar syntax. The basis of each command is a command name, which usually only consists of latin characters, as it does not allow special characters, though Asian characters and such are allowed. After choosing a command name, each argument is separated by spaces. Which arguments are supported is different for every command, some don't support any. Arguments with spaces or quotes can be escaped by using either single or double quotes wrapped around it. A command may also be prefixed with colons or spaces, which will be ignored. You can also prefix a command with "!" to run a system command, instead of a Vieb command. Finally you can prefix some Vieb commands with a range, just like in Vim. The full list of commands can be found right below the explanation of the ranges, and fills the rest of the Commands chapter. Each command has example usage, lists supported arguments and contains a description below the examples. You can skip the ranges for now and jump straight to settingcommands if you are new to Vieb/Vim and you are reading this help from top to bottom.

Ranges

Ranges are similar to Vim's ranges, but instead of line numbers we refer to tab indexes. While ranges are powerful, they are not essential for using Vieb. If you have never heard of them, it might be better to skip to the settings commands section below. Range indexes start at 0 and the upper limit depends on the amount of tabs, similar to buffer-like commands such as :buffer. A range can be a single tab index, or refer to multiple, by separating the two indexes with a comma. You can also use "^" to refer to the first tab, "." to refer to the current tab and "$" to refer to the last tab. All numbers or characters can optionally be followed with "+x" or "-x" where "x" is a number, to offset the number or character specified as if it were calculated. You can also give a range of just "%" to apply to all tabs. For example, "0,2close" will close the first, second and third tab (from index 0 to 2), while "%close" will close them all. Not all commands support ranges, they will have a badge "Supports ranges" if they support it, most of these commands are buffer-like commands, but you can also use it to print more than one page at a time. It's also possible to search for pages with ranges, this can be done by wrapping the search in slashes. This example will print the first page matching Github in its url or title: :/github/hardcopy As explained before, you can also supply a start and end index, but both of these can also be found with a search and be incremented/decreased with calculations, for example: :/github/+1,/help/-1mute This command will toggle mute for all tabs after the one matching Github and before the one matching help, which can be any number of tabs. It's also possible to supply one global search to execute a range supporting command on every tab matching the search with "g", which can also be combined with a case-insensitivity flag "i": :gi/vieb/pin This command will pin of all tabs matching "vieb" in the title or url, regardless of casing. You can also use "i" and "g" on their own, but global searches cannot be combined with and end index, while "i" can. To only search in the title or the url, you can use the "t" and "u" flags in the same way. There are also flags to only search for suspended tabs with "z", only real unsuspended tabs with "r", audio/media playing tabs specifically with "a" and silent tabs not playing audio/media currently with "s". Finally, you can also not combine calculations such as "+2" with the "g" flag, because all matching tabs will have the command executed, instead of only the first match (optionally with a calculation part).

Setting commands

Commands in this paragraph are for reading, changing or resetting the settings of Vieb. These commands only change the settings for the current session, unless the :mkviebrc command is run to write the settings back to the viebrc file.

:set

The set command can be run with any number of arguments and is used to read, modify or reset any setting of Vieb. Without any arguments, the set command will list all the modified settings. To also list the default settings, you should run :set all?. Every argument of the set command is parsed separately, which allows you to read, write or reset multiple settings at once, in any order. For a list of settings, see the Settings chapter. The set command has very high compatibility with Vim, which is why some of its features might be confusing if you are not familiar with it. There are many ways to modify, read or write a setting, most of which are determined by the type of setting. For example, booleans can only be set or reset, while number settings can be set to a value or be multiplied/subtracted. String settings can be appended with additional text as well. To find out more about the different setting names, see the Settings chapter, or find help for a specific setting with :help guifontsize for example. Below is a list of all the different ways to invoke the set command, and to which type of values they apply. The name 'example' is not an actual setting, but should be replaced with a setting of the right type for the command to work:

Shared for all type of settings

These commands work the same for all settings regardless of type.

Boolean

These type of settings can be turned on or off. In Vim, these are also known as toggles, while in most programming languages they are called booleans.

Number

These type of settings accept a number. Most of the number settings only accept a specific range, usually just positive numbers. The valid numbers for a particular setting are explained the help of each setting separately.

String

These type of settings accept any kind of text, sometimes with additional restrictions. For example, some string setting values must be a valid url, or be of the interval type. Limitations of the string type are explained in the help of each setting separately.

Enum

These type of settings accept only specific values, but are otherwise identical to strings. An example is the permissioncamera setting, which can only be set to "block", "ask" or "allow" (default is "block"). These type of settings, can also be rotated by suffixing an exclamation mark, similar to toggling boolean values.

List

These type of settings accept a comma or tilde separated list. It can be set directly, just like a string, but can also be appended or modified per entry. Some lists that are comma-separated have nested lists that are separated by tildes.

Interval

These type of settings accept a time interval. A time interval consists of a number followed by a time unit, for example 1day or 3months. The number can be any valid positive number, while the unit can be any of: second, minute, hour, day, month or year. The unit can optionally be followed by a plural "s", such as seconds or days. These type of settings have no special commands, besides the shared ones and the plain read option:

:reloadconfig

This command will reload the viebrc files, in order. This is not the same as resetting all settings to Vieb's default, which can be done with :set all&. Both the reloadconfig and set command only modify the settings for the current session, unless the changes are written back to the viebrc with the :mkviebrc command. The reloadconfig command does not undo custom settings, mappings and commands, but does overwrite them if they are defined in the viebrc. Settings that have been changed using the set command at runtime that are not changed in the viebrc will therefore not be changed when running this command. To reset to the startup state without actually restarting Vieb (which you can do using the :restart command): Of course it's also possible to make a mapping or custom command to do this for you.

:restart

This command will restart Vieb. It is functionally equivalent to running the :quitall command and then starting Vieb again.

:mkviebrc

This command can be used to write all runtime settings, keyboard mappings and custom commands back to the viebrc file located in Vieb's datafolder. If the "--config-file" startup argument is present, only this viebrc will be used, and it will also be the destination of this mkviebrc command. The colorscheme is also written if it was changed or if "full" is provided.

:scriptnames

With the scriptnames command you can display a list of viebrc script files that were loaded on startup. You can customize which config files get loaded on startup using ENV variables or startup arguments, run "vieb --help" for details or read about the viebrc. The list of scripts returned by this command will not change when sourcing new scripts with :source, unless appended by "!", in which case it will return sourced scripts as well. Only files which were loaded on startup will be used when running :reloadconfig, unless those files also contain source commands. From the list of scripts returned by scriptnames! you can directly edit a script by appending the index of the script in the list (starting at 1). For example, running :scriptnames! 1 will edit the config file that was loaded first with the editor configured by vimcommand.

:source

Using the source command, you can load additional config files. This can be done at runtime by providing an absolute path, in which case the file will just be parsed once to run every line as a command. You can also run the source command inside viebrc files to load other config files relative to them (or with an absolute path). Only files which are sourced by other files will be listed in the :scriptnames command output, user invocations of source are one-time only and also won't be loaded when executing :reloadconfig.

Special pages

Some commands are used to open special pages. This help page is one of them. In this paragraph all of them are listed. Unlike other pages, which are mostly websites that can only be styled with userstyle, these are built-in pages of Vieb that can also be styled by changing the colorscheme. These pages are a core part of Vieb and do not require internet to work, similar to viewing local files. You can open them either by navigation to "vieb://" followed by the page name, or using the commands below. When using these commands, they will be opened in a new tab, unless the value of replacespecial determines that the newly opened special page should replace the current tab, which is by default done if you are currently viewing any of the special pages already. You can choose to open the special page in a new tab everytime by appending a "!" to the commmand, such as "version!".

:version

This command will open the version information page, located at "vieb://version". On this page, you will find information about the current Vieb version, along with the Electron and Chromium version this release is based on. Finally, there is also a button to check for updates. It is recommended to check for updates at least once a month, you can also subscribe to the Github repository to be notified of updates, check out the official Matrix space and its announcements chat, or visit the Telegram announcements and the general chat on Telegram.

:help

This command will open the help page, located at "vieb://help". This is the current page you are on, and describes all the functionality of Vieb. A single optional argument can be included in the help command, which should refer to a section of the help page. This section can be the name of an action, a command, a set of keys or any of the chapters and paragraphs. When a set of keys is given (which are also suggested if suggestcommands is not disabled), those keys will be searched if they contain an action or command, if they do, that action/command is navigated to by the help command. In short, you can search for any mapped sequence of keys and open the help of the first action/command those keys are mapped to. You can also prefix your search for mappings with a mode key and an underscore, such as "n_", "i_" or "c_", which will only search for keys mapped in that particular mode and select the right action/command based on that. This method of search is limited to finding the first match, as it's not possible to scroll to two places at once, if you want more details you can list the functionality for a set of keys with :map! d, where "d" is the example key to search for. This will list all mappings for the provided keys, after which you can search for its mapped actions or commands using the help command: :help :close. This method also allows you to specify a particular mode to search for keys, by prefixing the :map command with a mode character, such as :nmap! or :vmap!. The keys argument of the help command is basically a single command version of finding the mapping of some keys with the map commands and then running the help for the first action or command it finds.

:history

With this command you will be navigated to the history page, located at "vieb://history". On this page you will be presented with a list of all your local browsing history, sorted by date. This page allows you to remove individual site visits from your history or remove all the history based on a filter. The browsing history is only stored in Vieb's datafolder in a JSON file named "hist". You can customize the amount of entries that should be shown using historyperpage or the input on the history page itself. To disable new visits from being stored, see the storenewvisits setting. This setting does not affect the history of previously closed tabs or the download history. It is also possible to disable or change the amount of suggestions shown based on the history with suggestorder. Finally you may want to clear the history (or parts of it) when quitting Vieb with clearhistoryinterval or the :clear command.

:downloads

Use this command to open the download page, located at "vieb://downloads". This page contains a list of all the previously downloaded files, including those still in progress or cancelled. On this page you can pause or remove any of the downloads. There are also settings to automatically remove downloads, see cleardownloadsoncompleted and cleardownloadsonquit for details. Neither of these settings will remove downloaded files from disk. Downloads are by default started automatically, and will be stored in the folder configured by downloadpath. You can change the automatic download behavior using the downloadmethod setting.

:cookies

Open the cookies page with this command, located at "vieb://cookies". On this page you can view all of Vieb's cookies. The cookies page allows you to delete individual cookies, or all cookies (possibly based on a filter by name). Finally, it's also possible to delete cookies with clearcookiesonquit.

:notifications

This command opens the notifications page, located at "vieb://notifications". On this page you can view a list of all the previous notifications during this session. This list is always cleared when quitting Vieb.

Mappings

The keyboard mappings are completely dynamic in Vieb, meaning that you can change the behavior of all keyboard keys. To manage these mappings, Vieb implements a similar system to Vim, with support for recursion, multiple keystrokes, countable actions and similar features. These are all of the key differences of Vieb's mapping system compared to Vim: Aside from these differences, the regular map commands are mostly identical in usage compared to Vim: All of these commands can also be prefixed with a single character to indicate a mode, for example: All of these commands will be explained in more detail in their own paragraph below, you can jump there directly with the help command like so: :help :cunmap.

Key codes

Some mappings require multiple keys to be pressed in order. If there are mappings that require multiple keys, and you only press the first one, Vieb will remember the keys you just pressed for a while, which allows you to press the next keys required for the mapping to activate. If showcmd is enabled, the pressed keys will be shown in the top-right corner of the Vieb window. You can also configure the time it takes for pressed keys to be forgotten if no other keys are pressed using timeout and timeoutlen. Suggestions are shown for subsequent mappings after pressing a key, which can be controlled with mapsuggest. However, most default mappings of Vieb only require a single key to activate, although sometimes while holding down a modifier, such as Ctrl or Shift. The syntax for mappings keys can be easily summarized: it's the keys that would appear on screen if you were typing them out, so pressing hjkl would result in hjkl, which is also the map syntax from pressing them in order. Characters that are affected by Shift also work this way, so typing hj and then starting to hold shift while typing KL will result in hjKL, which is also the mapping sequence that Vieb and Vim will understand AND execute. This works for most of the single keys, including special characters such as % or #, but there are some exceptions: There is a separate syntax to map such exceptions, examples like <C-c> meaning Ctrl-c, which is called the <>-notation.

<>-notation

More advanced keys, such as the ones explained above, can be written using the <>-notation. This essentially means wrapping a written representation of the keys between <> signs. Here are some examples: Finally, modifiers such as Shift or Ctrl are not registered on their own, but they do change the character that is pressed when holding them.

Named characters

Similar tot the <>-notation, there are also keys that cannot be represented in a single character, one of which is <, which is of course already part of the <>-notation syntax. These type of characters can be represented like so: All other characters do not have a special name you need to use, and can just be typed as is to refer to the key. Please note that Nop is considered an action and not a key.
Any key
The <Any> key is a special key name that can be used to represent every single key that is not a modifier. It is by default used to control the key used for Quickmarks, but you may also use it in your own custom mappings. More specific mappings take priority over mappings that use Any.

Map actions

Unlike Vim, it's possible to map keys directly to actions or commands, without relying on keystrokes. Some examples already make use of this syntax. To refer to an action, wrap it around with < and > characters, such as this: <toExploreMode> for going to explore mode. These actions can appear anywhere in the right side of the map command. Similarly this can be done for commands using the same syntax with a : character to indicate that it's a command, for example: <:quit>.

:map

The map command takes any number of arguments. Without any arguments, it lists the mappings for all modes. To also list the default mappings of Vieb, append the map command with a !. When a single argument is added to the map command, it will only list mappings for that specific key or sequence of keys. If more than one argument is provided, the first argument is stored separately from all the others. The first one represents the keys that you need to press to execute all the other keys provided. For example, the command :map <C-J> <Esc>:downloads<Enter> will add a mapping for pressing j while holding Shift and Ctrl. When those keys are pressed, it will automatically trigger the Escape key, type out ":downloads" and finally trigger the Enter key. Or in other words, this will make it so that pressing Ctrl-Shift-j will open the downloads page. When adding a new mapping with this command, it will always overwrite existing mappings.

:noremap

This command is similar to :map and invoked with the same arguments, but does not recursively trigger other actions. This means that you can use it to type out characters that are otherwise mapped to actions.

:unmap

The unmap command is to remove a mapping and disable the effects of invoking those keys. For example, to disable F1 from opening the help page, without mapping it to something else: :unmap <F1>. The unmap command always takes a single argument.

:mapclear

The mapclear command is used to clear all custom mappings. It is recommended to only use this command from the viebrc file, while also adding new mappings in the same file. It can offer you a clean starting point to start mapping your own keystrokes. To also clear built-in mappings with this command, you can append it with a !. Keep in mind that this will really remove ALL mappings for all modes, so there is no way back if you run this at runtime! It's therefor recommended to only use this command from a viebrc, after which you need to add your own custom keyboard sequences mapped to actions or commands.

:nmap

Usage is identical to :map, but this command only lists or adds recursive mappings for normal mode.

:nnoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for normal mode.

:nunmap

Usage is identical to :unmap, but this command only removes mappings for normal mode.

:nmapclear

Usage is identical to :mapclear, but this command only clears mappings for normal mode.

:cmap

Usage is identical to :map, but this command only lists or adds recursive mappings for command mode.

:cnoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for command mode.

:cunmap

Usage is identical to :unmap, but this command only removes mappings for command mode.

:cmapclear

Usage is identical to :mapclear, but this command only clears mappings for command mode.

:emap

Usage is identical to :map, but this command only lists or adds recursive mappings for explore mode.

:enoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for explore mode.

:eunmap

Usage is identical to :unmap, but this command only removes mappings for explore mode.

:emapclear

Usage is identical to :mapclear, but this command only clears mappings for explore mode.

:imap

Usage is identical to :map, but this command only lists or adds recursive mappings for insert mode.

:inoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for insert mode.

:iunmap

Usage is identical to :unmap, but this command only removes mappings for insert mode.

:imapclear

Usage is identical to :mapclear, but this command only clears mappings for insert mode.

:smap

Usage is identical to :map, but this command only lists or adds recursive mappings for search mode.

:snoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for search mode.

:sunmap

Usage is identical to :unmap, but this command only removes mappings for search mode.

:smapclear

Usage is identical to :mapclear, but this command only clears mappings for search mode.

:fmap

Usage is identical to :map, but this command only lists or adds recursive mappings for follow mode.

:fnoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for follow mode.

:funmap

Usage is identical to :unmap, but this command only removes mappings for follow mode.

:fmapclear

Usage is identical to :mapclear, but this command only clears mappings for follow mode.

:pmap

Usage is identical to :map, but this command only lists or adds recursive mappings for pointer mode.

:pnoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for pointer mode.

:punmap

Usage is identical to :unmap, but this command only removes mappings for pointer mode.

:pmapclear

Usage is identical to :mapclear, but this command only clears mappings for pointer mode.

:vmap

Usage is identical to :map, but this command only lists or adds recursive mappings for visual mode.

:vnoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for visual mode.

:vunmap

Usage is identical to :unmap, but this command only removes mappings for visual mode.

:vmapclear

Usage is identical to :mapclear, but this command only clears mappings for visual mode.

:mmap

Usage is identical to :map, but this command only lists or adds recursive mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See menu for details.

:mnoremap

Usage is identical to :noremap, but this command only lists or adds non-recursive mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See menu for details.

:munmap

Usage is identical to :unmap, but this command only removes mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See menu for details.

:mmapclear

Usage is identical to :mapclear, but this command only clears mappings for the contextmenu. Any keyboard combination that is not mapped for the menu will be redirected to the current mode. See menu for details.

Custom commands

Vieb allows you to define custom commands. These commands can be used as an alternative to custom mappings, and can also be used within other mappings or commands. For example, to open vieb.dev with a homepage command, add a new command such as:
:command homepage <Esc>evieb.dev<Enter>
The "e" in front of vieb.dev is for going into explore mode. This example can also be written as:
:command homepage <toExploreMode>vieb.dev<useEnteredData>
Finally, it's also possible to refer to other commands when defining a new command, similar to adding keyboard mappings. This looks like this:
:command homepage <:open vieb.dev>

:command

The command to add custom commands is simply named "command". Without arguments, it will lists all previously added custom commands. With one argument, it will list one specific command and its actions. With two or more arguments, it will add a new command, where the first argument is the command name and all other arguments are the mapping. To overwrite commands that you have already defined before, append a "!" at the end of the command.

:delcommand

This command can be used to delete previously defined custom commands. It takes exactly one argument: the name of the command to be deleted. As with the previous command, it can not modify or delete built-in commands.

:comclear

The comclear command will unconditionally remove every single custom command that has been added. It will not remove built-in commands.

Splits

Vieb allows you to view multiple pages at once using window splits. This paragraph will explain which commands can be used to open split windows or how to switch between splits. For other window splitting related actions, see the splitting chapter.

:buffer

The buffer command can be used to switch to a tab by name or index. It accepts any number of arguments that will all be used to find the most appropriate tab. Contrary to the action.nextTab and action.previousTab actions, which switch in the order of the tabbar, the buffer command can switch to any tab regardless of its location in the tabbar. This is also important to keep in mind when using window splits, because switching between tabs can also change which splits are displayed. If you switch to a tab that is already visible in one of the splits, no splits will be changed, but the focus will simply switch to the other split. However, if the tab you switch to is not visible yet, the current split will switch to the new tab. This can be confusing when using the tab switch actions in combination with multiple splits, which is why the buffer command is recommended for switching when using multiple window splits. The buffer command will have no effect if the tab cannot be found, unless the argument is a single number, in which case it will switch to the closest tab by index, which can also wrap from the end if you provide a negative number. There are also many actions for switching between splits, see the splitting chapter for details. You can use the buffer command even without using splits.

Last used tab

When you navigate between tabs, the previously focused tab is stored, if you have had them as the current tab for at least timeoutlen (regardless of timeout being enabled). If you quickly switch two tabs/splits or more within timeoutlen, :buffer # can be used to go back all the way back to the one that was actually active for a while. This same logic is what makes this work when combining split movement or tab switch actions with the number counter. For example, after quickly moving two tabs to the right, executing this command will go back to the tab two tabs to the left. If called again, it will go back to the tab two tabs to the right. The "#" argument can also be provided to other buffer-like commands, and will always refer the the last used tab via this method.

:hide

The hide command can be used to hide one of the visible splits. This command takes any number of arguments. If no arguments are provided, it will hide the currently focused split window. For any other number of arguments, it will hide the window split that most accurately matches the arguments. This can be a tab index or keywords that refer to parts of the url, similar to the buffer command. The command will not have effect it there is only one page visible, or if there is no matching tab. If the argument is a single number, but the tab index is too high, it will instead hide the window split connected to the latest tab by index.

:Vexplore

This command can be used to open a vertical split within the Vieb window. Splits are used to view multiple pages at the same time, and this command accepts arguments to specify which page that should be. Any number of arguments can be given, without arguments it will vertically split with a new tab. If any other number of arguments are given, it will search of tabs matching by index or by url, similar to the :buffer command. If no matching tab is found for a string, it will instead open a new tab based on the string (regardless of this being a url or a search on the web). The Vexplore command will always result in a new vertical split, regardless of the arguments, as it will open a new tab for search strings without matches. You can configure if you want to open new vertical splits on the left or the right of the current one using the splitright setting.

:Sexplore

Usage is the same as the :Vexplore command, but instead of a vertical split, this command will split horizontally. See the splitting related action on how to manage the size and location of window splits once you have opened them with these split commands. You can configure if you want to open new horizontal splits on top or below the current one using the splitbelow setting.

:vsplit

Identical to :Vexplore.

:split

Identical to :Sexplore.

:only

With this command you can hide all window splits and return to the single page layout. It will hide all tabs/splits except for the currently focused one.

Navigation commands

:open

The open command will open the provided URL (or web search, if the arguments are not a valid address). From the user's perspective this is no better than simply switching to explore mode. This command is mainly useful when you want to create a custom command that jumps to a URL. Scripting this use case with explore mode is functional, but a slower because it will type out the keys, while this command is executed immediately.

:tabnew

With this command you can open a new tab, optionally with a url or a searchengine argument. The position of the newly opened tab can be configured by the tabnewposition setting. To open a new tab and switch to explore mode with the current url pre-filled in the bar, use action.openNewTabWithCurrentUrl. In case you want to use a custom new tab page, see newtaburl. The container name will be influenced by containernames, but only when a url/search is provided, as it will otherwise just use containernewtab. Finally, you can open new tabs with a custom container name using :tabnewcontainer.

:tabnewcontainer

Similar to the :tabnew command, but the first argument is always the name of the new container. This command is the only way to open a new tab in a different container compared to the containernames setting. If you have a good containernames list and you want to use it, use the :tabnew command. This command is only if you want to open a url or search in a custom container you manually choose the name for.

Quickmarks

With Quickmarks, you can quickly store scroll positions, pointer positions and page urls for later use. Besides commands, there are also actions that are used to create and open these marks, as well as settings to control the way they are stored and loaded. All relevant actions are in quickmarking.

:scrollpos

The scrollpos command shows you a list of stored scroll positions. Without an argument, it shows all of them. If you provide an argument, it shows only the position stored for that key. If a url or domain is listed after the key and the scroll position (in pixels), it refers to a local position, that is only remembered for that domain or url. You can control which keys should be stored as global/local, with the scrollpostype setting, or override it by passing global instead of the domain/url. By default, uppercase keys are global, while lowercase ones are local. You can store a new position using the action.storeScrollPos. You can store the local positions either by url or by domain, which you can control with scrollposlocalid. Loading a scroll position can be done with action.restoreScrollPos, while deleting them can be done with :delscrollpos.

:restorescrollpos

With the restorescrollpos command you can restore a scroll position by key. Only the key argument is required, similar to using action.restoreScrollPos. Optionally, you can also provide the domain/url to use instead of the current one to find the local key. This argument is unused if the key is deemed a global one as controlled with scrollpostype

:delscrollpos

With this command you can delete any previously stored scroll positions by key, domain or url. Whether it uses the domain or the url is controlled by scrollposlocalid. Without a confirm override "!", it will always require a key to delete, which is by default only for the local ones at the current domain/url or the global ones. If you pass a domain/url, you can delete the key for a different domain/url, where "*" will match all of them including global ones. If you do supply the "!" confirm override, you can delete any key in one go, by default for the current domain/url, but you can also supply one. In case you supply "*", "local" or "global", it will delete ALL, local or global positions respectively.

:marks

The marks command shows you a list of stored marks (page urls). Without an argument, it shows all of them. If you provide an argument, it shows only the marks stored for that key. The url listed after the key is the one that can be restored with action.restoreMark. You can control the destination of the restored url using the markposition setting, and make new marks using action.makeMark. Shifted keys can optionally be restored to a different location if you choose to set markpositionshifted.

:restoremark

With the restoremark command you can restore a mark by key. By default, this will use the markposition and markpositionshifted settings to choose the position, but you can override this by giving the position manually as the second argument. Valid positions are the same as for either of these settings. If not provided, this command is basically idential to action.restoreMark.

:delmarks

With this command you can delete any previously stored marks by key. If suffixed with "!", it can delete ALL marks. If a key is passed, it will delete the mark stored in that key.

:pointerpos

The pointerpos command shows you a list of stored pointer positions. Without an argument, it shows all of them. If you provide an argument, it shows only the position stored for that key. If a url or domain is listed after the key and the pointer position (in pixels), it refers to a local position, that is only remembered for that domain or url. You can control which keys should be stored as global/local, with the pointerpostype setting, or override it by passing global instead of the domain/url. By default, uppercase keys are global, while lowercase ones are local. You can store a new position using the pointer.storePos. You can store the local positions either by url or by domain, which you can control with pointerposlocalid. Loading a pointer position can be done with pointer.restorePos, while deleting them can be done with :delpointerpos.

:restorepointerpos

With the restorepointerpos command you can restore a pointer position by key. Only the key argument is required, similar to using pointer.restorePos. Optionally, you can also provide the domain/url to use instead of the current one to find the local key. This argument is unused if the key is deemed a global one as controlled with pointerpostype

:delpointerpos

With this command you can delete any previously stored pointer positions by key, domain or url. Whether it uses the domain or the url is controlled by pointerposlocalid. Without a confirm override "!", it will always require a key to delete, which is by default only for the local ones at the current domain/url or the global ones. If you pass a domain/url, you can delete the key for a different domain/url, where "*" will match all of them including global ones. If you do supply the "!" confirm override, you can delete any key in one go, by default for the current domain/url, but you can also supply one. In case you supply "*", "local" or "global", it will delete ALL, local or global positions respectively.

Tab close commands

These are commands that can be used to close tabs. The regular close command without arguments is used to close the current tab.

:close

Closes a tab. It will close the current one, if no arguments are given. If there is a single number given as an argument, it will close the tab with that index in the tabbar (starting at 0). Any other arguments are used to search for the matching tab to close. Only the first matching tab is closed. If closing the current tab, you will switch to the nearest opened tab. If it's a pinned tab, you can only close it with :close! or you need to enable closablepinnedtabs. If the last tab is closed, the newtab page will (re)open as the only opened tab. If desired, you can quit Vieb when closing the last tab by enabling the quitonlasttabclose toggle. Opposite of action.reopenTab. You can change which tab gets focused when calling this command for the current tab with tabclosefocus.

:lclose

With this command you can close every tab to the left of the current one. If you have pinned tabs, it will respect the closablepinnedtabs setting and try to close as many as possible, so you can even execute this command when your current tab is pinned. You can override this setting by appending a "!" to this command.

:rclose

With this command you can close every tab to the right of the current one. If you have pinned tabs, it will respect the closablepinnedtabs setting and try to close as many as possible, so you can even execute this command when your current tab is pinned. You can override this setting by appending a "!" to this command.

Other commands

The commands in this paragraph do not belong in a specific category, but are still a core part of Vieb. These commands range from printing, to developer tools and to quitting Vieb.

:call

The call command can be used to execute any arbitrary arguments as a if it was mapped with :map. The advantage is that you don't have to create a mapping to execute built-in actions or test the righthand side of a map command, but you can just prefix it will "call" to run it immediately. For repeating more advanced actions, see record.

:write

With the write command you can save the current page to disk. There is one optional argument, which serves as both the filename and the location. The location is by default set to the downloadpath setting, but can be changed by including it in the filename argument. If the filename ends with a "/", it's assumed to be just the folder part, and the page will be saved in that folder with the default filename (the name of the page). Lastly, absolute paths are saved in exactly that location. The write command attempts to save pages as websites, to download the current page url as a file, see action.downloadLink.

:screencopy

Using the screencopy command you can copy an image of the current page to the clipboard. You can optionally specify a specific region of the page to capture. For more details see the :screenshot command.

:screenshot

With the screenshot command you can save a PNG image of the current page to disk. There are two optional arguments, one of which serves as both the filename and the location. The location is by default set to the downloadpath setting, but can be changed by including it in the filename argument. If the filename ends with a "/", it's assumed to be just the folder part, and the page will be saved in that folder with the default filename (the name of the page). Lastly, absolute paths are saved in exactly that location. Due to Electron limitations, you can only capture the visible part of the page and not the full webpage, this is also the reason for a transparent background on sites that don't have a background set. The other optional argument is for specifying a region on the page that should be captured. This can be done in the form of "width,height,x,y", and can appear as the only argument, before the filename or after the filename. All four numbers are required if the region is to be provided, and they must all be round integers. If the numbers go out of range of the page, the numbers will be adjusted automatically. By default there will also be an orange outline visible on the page that shows the area that will appear in the final screenshot. This can be hidden or styled differently using colorschemes. You can drag this orange outline to update the region argument of the command if the "screenshotframe" feature is enabled using the mouse setting.

:hardcopy

With the hardcopy command you can make a hardcopy of the current page using a printer. This will open the print dialog similar to other programs. There are no arguments for this command. Tip: it's also possible to do this for specialpages such as this help page.

:print

Identical to :hardcopy.

:mute

With the mute command you can toggle if tabs can play audio. If a tab is playing audio, a blue indicator is shown. The indicator is white for muted tabs. When a tab is muted but tries to play audio, a light yellow indicator is shown. The orange indicator is not related to audio, but is used to highlight the current tab when splitting multiple pages. The mute status is kept when restarting Vieb with restoretabs enabled, but not when closing tabs. By appending "!" and a state you can force a specific mute state, which can be especially powerful when combined with ranges, for example to mute all tabs: :%mute! true.

:suspend

The suspend command can unload tabs from the memory. The entire tab is suspended and won't run in the background. You must specify a non-visible tab for the command to work. When switching to a suspended tab, the page is loaded from scratch again. Suspended tabs have a different background color from regular tabs. Besides this command, you can also suspend them automatically on startup with suspendonrestore or on a timer with suspendtimeout.

:pin

This command is used to pin or unpin the current tab. The pinned status of the current tab will be toggled. Pinned tabs have a fixed width of just the icon and can be the only tabs restored, depending on the restoretabs setting. Pinned tabs are always displayed before regular tabs. By appending "!" and a state you can force a specific pinned state, which can be especially powerful when combined with ranges, for example to unpin all tabs: :%pin! false.

:runjsinpage

With this command you can run any custom JavaScript you would like in the current page. The above are just some of the examples of what is possible, but basically any script you would like to run can be pased on with this command. The logging happens and remains inside the page and can be viewed in the "Console" tab of the page :devtools. You can also pass an absolute file path to this command to run the contents of said file as JavaScript inside the page. You can also use ranges to run the JavaScript on other pages besides the current one.

:translatepage

Using this command you can translate the current page to a language of your choice based on the translation api set by translateapi (if set to "auto", it's based on translateurl). You can either use the language set by translatelang or pass a language as an argument. All text is translated either by Deepl or LibreTranslate and then put back into the page. For most configurations you must set the translatekey before you can use this command.

:nohlsearch

This command is used clear all visible search highlights, while retaining the search string. You can then show the highlighting again by calling action.nextSearchMatch or action.previousSearchMatch. If you want to clear the highlighting without remembering the search, use action.emptySearch instead.

:devtools

The devtools command can be used to open the developer tools of the current page. If no argument is given for the devtools position, it will open at the position configured by devtoolsposition. The accepted positions for this command are the same as that of the setting. It's not possible to open multiple instances of the devtools for the same page, you can open one type of devtools per tab. By default these tools will have dark mode and some security settings enabled. If the devtools are opened as a Vieb tab or split (so not windowed) all regular Vieb action can be used to interact with the developer tools.

:internaldevtools

The internaldevtools command opens the developer tools of the main Vieb window (containing the url bar, tab list etc.). This is mainly useful to debug Vieb itself, like making colorschemes or finding internal errors. You can also open these tools when starting Vieb with the "--devtools" startup argument.

:colorscheme

With the colorscheme command you can apply custom colorschemes (also called "themes"). There are a couple of themes bundled with Vieb and you can also add your own themes. These themes can change more than just colors, as they are written in CSS. All built-in styling is part of the default theme, and can be overwritten with a custom theme. You can find the default and other example colorschemes in "app/colors", which can be viewed on Github here. If you just want to change the colors, you just need the lines within ":root", but you can add as much CSS as you want. Custom themes can be stored in a "colors" subfolder of the datafolder: "<datafolder>/colors/<name>.css". You can also store themes in "~/.vieb/colors". All colorschemes extend the default theme, so there is no need to copy those values if you don't plan to change them. When suggestcommands is enabled, the colorscheme command will suggest both built-in and custom themes. Themes are also used to style special pages, while you can style any page with the userstyle setting (depending on userstylescope) and control the external page theme with nativetheme.

:makedefault

This command attempts to make Vieb the default browser on your operating system. On Linux, this uses the "xdg-settings" command, and requires Vieb to be installed with a desktop file (most installers have this included). For Windows, this command will add the required keys to regedit for Vieb to appear in the default program list, after which you probably need to select it as your default browser manually. For other operating systems, Vieb will request to be set as the default handler for http and https protocols, though this probably isn't enough to be made the default browser. You can find the default app scripts in this subfolder of the source code, including a file to clear the Windows registry of all Vieb entries.

:quit

The quit command will only exit Vieb if there is only one window split left. If there are multiple open, it will simply close the current split. This logic is only applied to opened splits, the amount of tabs you have open is irrelevant for the quit command. To unconditionally quit Vieb, see :quitall.

:quitall

With quitall you will unconditionally close and stop all of Vieb. The short version of this command is "qa". To configure what gets cleared on quit, see these settings, among others: cache, clearcookiesonquit, cleardownloadsonquit, clearhistoryinterval, clearlocalstorageonquit, keeprecentlyclosed, restoretabs and containernewtab.

Settings

There are a lot of settings in Vieb and all of them can be changed at runtime, or using a settings file. The changes you make at runtime are not saved automatically for subsequent sessions, but they can be if you want to. This chapter provides introductions on how to do all this, and a list of all the settings Vieb has to offer.

Set command

To change settings at runtime, the :set command is used. This command can read, write and update any setting for the current session. Please read it first to learn how to change settings, and what type of values there are. To change settings permanently, read the following paragraph regarding the viebrc file.

Viebrc

To change settings for subsequent sessions, store them as commands in a viebrc file. The viebrc file should contain a single command per line. Most regular commands are supported, such as set commands or map commands. Basically, the viebrc file should be a list of commands you want to execute every time Vieb is started. There can be multiple viebrc files loaded on startup, there are four potential locations that are checked: You can control the order in which these viebrc files are loaded, and if they should be loaded at all using the "--config-order" argument. By default, this argument is set to "user-first", which means this is the order of viebrc files: "~/.viebrc", "~/.vieb/viebrc", "datafolder/viebrc". This order is reversed for the "datafolder-first" option. You can also choose to load only specific configs with "user-only" or "datafolder-only". Finally, there is also the "none" option, to load Vieb without any config file. The "--config-order" argument is ignored and overwritten if there is a "--config-file" provided, which only loads the file you specify instead of other locations above. The :mkviebrc will write to the datafolder viebrc, unless a different viebrc is provided with "--config-file". You can see the list of loaded viebrc scripts using :scriptnames.

Examples

There are example viebrc files to give you a starting point for your own configuration. These example configs aim to provide a similar experience to other browsers. The viebrc example files are available offline, and can be saved to the downloads folder with the buttons below.
After writing one of these examples to the downloadpath you can view and edit it with Vim or any other editor. If you want to use one of these examples, copy it to either of the viebrc locations explained above. Alternatively you can also run any file from disk as a config using the :source command. You can also view the examples on Github.

Data folder

Vieb stores all of its data inside a single folder, which is by default located in one of these locations: All browsing history, cache, cookies, localstorage, favicons, preferences, tab history and download history are stored in this folder. You can also store all Vieb data in a different folder by starting it with the "--datafolder" argument. For example, to use a relative folder named "ViebData": vieb --datafolder=ViebData. Since the instance viebrc and colorschemes are also inside this folder, you can use this to have a completely portable instance of Vieb. Start Vieb with the "--help" argument to see other startup arguments. Besides the datafolder, you can choose to store user specific configuration files in "~/.vieb/", this can be done for the viebrc, colorschemes, userstyles, userscripts and blocklists. For the viebrc, datafolder config will take priority of user config by default, but this can be changed with the "--config-order" startup argument, see viebrc for details. You can also specify a single config file that should be used as the only viebrc, using: "--config-file".

Erwic mode

With the "erwic" startup option, you can "Easily Run Websites In Containers". The purpose of this option is similar to programs such as Franz, Ferdi or Rambox. It can also replace other Electron-based desktop apps such as Slack or Discord. These instances of Vieb can run separately from your existing Vieb. See Erwic.md on Github for usage and details.

Setting list

The rest of this chapter will focus on all the different settings of Vieb.

adblocker

Vieb has an integrated adblocker, which will block advertisements and trackers based on blocklists. These blocklists are by default set to easylist, easyprivacy and ublock filters, but this can be extended. This setting is used to enable or disable the adblocker, but also to configure the update mechanism. The "static" value will use the static integrated blocklists and will not check for updates. These integrated lists are only updated when a new Vieb release is made. You can still add extra lists to use by adding ".txt" filter files to the "blocklists" folder inside your datafolder. To enable automatic updates of these lists without waiting for a new Vieb release, you can change this setting to "update". Keep in mind that this will periodically connect to the blocklist websites to download the latest version, which is also why this setting is set to "static" by default. Setting it to "update", also allows you to create a "list.json" file inside the "blocklists" folder, which should look similar to the default list.json, that allows you to add extra lists that should be updated when starting Vieb or updating this setting. The JSON file has a user-defined name as the key, and the values should be URLs that point directly to the blocklist filtering file on the web. The "update" value is the most powerful and useful option of the adblocker, and is recommended if you do not mind the extra web requests. Finally there is the "custom" option that allows you to implement your own external blocklist management and also stops copying any of the built-in lists on startup. Adding other lists can already be done without using the "custom" option, by adding lists to the "blocklists" folder inside Vieb's datafolder, the custom option is most useful for people who do not want the default lists, nor the update feature, but do want to use other blocklists. You can also add lists that you want to load for all instances to the "~/.vieb/blockists/" folder. As long as the value of the adblocker setting is not "off", it will read all ".txt" files in both the global and the local blocklists folder and enable all filtering blocklists found. The "static", "update" and "custom" values merely control if you want the default lists or not ("static" vs "custom"), and if you want auto updating or not ("update" or "custom"). With "update" you always get the default lists, but you can overwrite the url for "easylist", and if desired, the url can also be empty, in which case the list will not be fetched.

cache

This setting can be used to disable or automatically remove the browsing cache. Changing this setting from or to the value "off" only has effect at startup, due to Chromium limitations. The cache can always be set to "clearonquit" or "full", regardless of the initial value of this setting. It's recommended to at least clear the cache on quit, because the browsing cache can get very large with extended periods of use.

clearcookiesonquit

Toggle for clearing all of the cookies when quitting Vieb. To view and remove individual cookies, see the cookies page. This toggle applies to all containers.

cleardownloadsoncompleted

Toggle for clearing successfully completed downloads. When a download fails, it will not be cleared. This toggle will clear completed downloads as soon as they are done, unlike the cleardownloadsonquit setting, which will unconditionally clear all downloads when quitting Vieb regardless of download status.

cleardownloadsonquit

Toggle for clearing all downloads regardless of status when quitting Vieb. This will not remove downloaded files from disk, but it will clear the download history.

clearhistoryinterval

Setting to automatically clear the history on quit based on how old it is. The browsing history can be viewed on the history page. By default, no history is cleared, as the clearing interval is set to "none". If you want to clear all history data on quit set it to "session". For any finer grained interval of how old the history must be for it to be cleared, set an interval such as "1day" or "3months" as the value. This way, history older than the specified interval will be cleared on quit. See the interval docs for valid options. As a result of separating tab, download and browsing history, there is no traditional private mode in Vieb. See storenewvisits for more details about storing history and an alternative to "private mode".

clearlocalstorageonquit

Toggle for clearing all of the localstorage when quitting Vieb. This toggle applies to all containers.

closablepinnedtabs

With this toggle you can specify if pinned tabs should be closable. By default, you need to unpin a tab (using :pin) to close it. If this setting is enabled, you can close pinned tabs like any other regular tab. Alternatively, you can append any close command with "!" to override this setting.

commandhist

This setting can be used to control which commands should be available from the history when using action.commandHistoryPrevious and action.commandHistoryNext. By default, only commands executed by the user with action.useEnteredData from command mode will be stored. They will also be written to disk for subsequent sessions if set to "persist". To also store commands executed by mappings and other sources, set this setting to "all". When set to "none", no history of executed commands will be stored from now on. The value of the setting is either "all" or "useronly", optionally prefixed with "persist" to also store the commands to a "commandhist" file in the datafolder. Commands executed before disabling the history will still be available from disk/memory depending on the value of this setting at the time of execution. It's always safe to delete the "commandhist" file, as Vieb only reads it at startup and only appends it when you run a command.

containercolors

A setting to give containers a custom color based on their name. Each element in the list contains a regular expression and a color name (or color hex) separated by a "~". By default, temporary containers are displayed in yellow, while all others will use the default color of the :colorscheme. The first matching entry will be used as the color of the tab title. The color will also be used to show the name of the container in the navbar, if containershowname is on. An example could be to make a container for work, school or other miscellaneous tasks and color it accordingly:
:set containercolors=^work$~lightblue,^school~#f00,^misc$~lime
This will display the "work" container in lightblue, all containers starting with "school" in red and the "misc" container in lime. All CSS color names and (3 or 6 digit) hex codes are accepted. For more about containers and how to use them, see containernewtab.

containerkeeponreopen

Toggle to indicate if tabs that are restored with action.reopenTab should keep the container they were opened in before. If enabled, they will keep the same container as before. If disabled, the value of containernewtab will be used as the container name instead. This toggle does not affect tabs that are opened using other ways, such as startup urls, which use the containerstartuppage setting. The restoretabs setting to keep tabs after a Vieb restart will always use the same container they used before shutting down Vieb.

containernames

A setting to automatically pick a custom container name based on the url you have just opened (regardless of origin). Overrides any of the other container name settings like containernewtab or containersplitpage, with the sole exception of tab reopening (if containerkeeponreopen is set) and opening a new custom container yourself with :tabnewcontainer. You can have as many automatic names in the list as you would like, each of which requires a regex pattern and a name, which are separated with a "~", all of which are in a list that is comma-separated. Optionally, you can add a "~newtab" suffix to only use that automatic rule for opening new tabs. By default they will also replace the current tab's container with the right one, as configured by this setting. For example, to always open pages like "youtube" or "google" in their own container, you could do something like this:
:set containernames=.*youtube.com.*~youtube,.*google.*~google
Please keep in mind that the tab history is not kept when you switch to a new container. The name set for the first matching pattern will be used, regardless of any other potential matches in the list. The regular expressions to match with the url in this example are not waterproof to match only youtube and google domains, but will also match any other url that contains these words. A more accurate regex pattern that will only trigger in new tabs could look like this:
set containernames=^https?://([a-zA-Z0-9]+\.)*youtube\.com.*~youtube~newtab

containernewtab

With this setting you can specify the name of the container that new tabs will use. Regular names can use letters, numbers and underscores. Each container with a separate name will run isolated from other tabs. This includes cookies, localstorage, cache and other browsing data, but not the history or downloads. Multiple tabs with the same name will share the same container and share data with each other. The container name that you specify with this setting can include "%n", which will be replaced with an incrementing number. This can be used as a way to use a different container every time a tab is opened. If the name starts with "temp", the data of that container is deleted when Vieb is shutdown. The default container name is "main". When you don't update any settings, all tabs will use the "main" container to store their data. To make every tab store data in a temporary separate container, you could set this setting to "temp%n".

Special values

Besides regular strings to use directly as the container name, there are also some special values that will automatically pick the right container name for you. For the containernewtab setting, these special values exist: One of the many ways to make changing this option more straightforward to use, could be to make a command to open a tab in a specific container and switch back to s:usecurrent automatically after that:
:command! work <:set containernewtab=work><:tabnew><:set containernewtab=s:usecurrent>
You could make such a command for each different container you frequently use, while still opening tabs in the same container as the current one by default. If you don't want to make a custom command for it, but still be able to open a tab in a custom container, either use :tabnewcontainer, or make a list of container name overrides with containernames to run :tabnew and get the container you want right away.

Related settings

It is recommended to combine this with containercolors to automatically color container names based on regular expressions. You can configure when to display the name of the container in the navbar with containershowname. New tabs opened as links and through the new tab version of follow mode are configured with this "containernewtab" setting. For tabs opened as a split window, such as when using :Vexplore or the split version of follow mode, see containersplitpage. For pages opened using the command line arguments, see containerstartuppage. All of the mentioned settings can be overriden using containernames, which you can use to automatically pick a name for a tab (or split) if it matches a specific regex pattern.

containershowname

This setting controls if the container name should be shown in the navbar between the current mode and the url bar. If set to automatic, all names except "main" are shown. The name will be displayed in the color defined by containercolors.

containersplitpage

Similar to containernewtab, but specifically applies to tabs opened as a split page, using the window split commands or the split version of follow mode. This setting only supports regular names and the special names: s:usematching and s:usecurrent. See containernewtab for usage and details.

containerstartuppage

Similar to containernewtab, but specifically applies to pages that are passed to Vieb as a command line argument. If Vieb is your default browser, this includes urls that you click on outside of Vieb, that are configured to open with Vieb. This setting only supports the special names: s:usematching, s:usecurrent, s:replacematching and s:replacecurrent. See containernewtab for usage and details.

countlimit

This setting is used as an upper limit of the counter for repeating actions in normal mode, pointer mode and visual mode. For example, pressing 50t will usually open 50 new tabs, but only 10 if the countlimit is set to 10. This setting limits the number of repeated actions, which you can visualize in the top-right of the Vieb window if showcmd is set. There is also a setting to limit the maximum recursion of a mapping, named maxmapdepth.

darkreader

Toggle to enable/disable darkreader. By default, files and special pages such as the help are not affected, as they are dark already, but you can control which pages are affected with darkreaderscope. Toggling darkreader with pages open will toggle dark mode for all open pages in realtime, no need to reload. You can customize the appearance and operation of darkreader using the config options below.

darkreaderbg

Set the default background color of darkreader styled pages. Can be a color name or a hex code.

darkreaderblocklist

Block specific sites from using darkreader even if enabled, by excluding them with regular expressions. You can add as many patterns as you want, separated by a tilde "~". If any of these patterns match the current url, darkreader will not be enabled for that site. For example, :set darkreaderblocklist=github will block darkreader from loading on sites with "github" in the url. Inverse regular expression matching is supported and can be used as a sort of allowlist. For example, :set darkreader darkreaderblocklist=^(?!.*github.*) will ONLY load darkreader on sites with "github" in the url somewhere, though it is recommended to use simpler patterns and use it as a blocklist only, as you can block as many sites as you want. If you prefer your pages dark, it's worth checking if you have set the nativetheme setting to the correct theme to match.

darkreaderbrightness

Set the brightness of darkreader styled pages. A brightness percentage of over 100 is supported, but can give unexpected results.

darkreadercontrast

Set the contrast of darkreader styled pages. A contrast percentage of over 100 is supported, but can give unexpected results.

darkreaderfg

Set the default foreground color of darkreader styled pages. Can be a color name or a hex code.

darkreadergrayscale

Set the grayscale value of darkreader styled pages. 100% grayscale means that all content (not images) will be completely drained of color, while 0% means the grayscale filter is not applied. Any value between will "gray" the look of the elements on the page.

darkreadermode

Set the mode value of darkreader styled paged. You can choose between light and dark mode, with dark being the default. Switching this to light does the same as selecting the light scheme in the darkreader extension.

darkreaderscope

Controls which pages are affected if you enable darkreader. By default, only external sites will use darkreader if you enable it, using "page" in the list. If you want to have darkreader on special pages, add "special" to the list. Finally, for other local files you can add "file" to the list. Adding all three means darkreader will trigger on all pages you visit (if enabled at all with darkreader).

darkreadersepia

Set the sepia value of darkreader styled pages. 100% sepia means that all content (not images) will be rendered in the typical brown sepia color. Low percentages are recommended, but you can use any percentage between 0 and 100.

darkreadertextstroke

Set the width of text stroking of darkreader styled pages. The width can be any value between 0 and 1, and represents the stroke width that will be applied to text on the page, as to make it more readable on a dark background.

devtoolsposition

This setting controls the default location where the devtools will open when using the :devtools command.

dialogalert

With this setting you can control what should happen when pages try to use alerts. Alerts are dialogs that want to give information to you via a popup. By default, they are blocked but only notify you of alerts. You can "show" or "block" the dialog and choose to show a notification with "notify", or any combination of that. Since alerts do not request additional information like confirm and prompt dialogs do, there is little reason to show alerts instead of replacing them with just a notification.

dialogconfirm

With this setting you can control what should happen when pages try to use confirms. Confirms are dialogs that ask for confirmation via a popup, either "OK" or "Cancel". By default, they are blocked but only notify you of confirms. You can "show", "block", "allow" the dialog and choose to show a notification with "notify", or any combination of that. If shown, you can choose between "OK" or "Cancel". If blocked, the confirm responds with "false", as if you cancelled the dialog via "Escape" or the "Cancel" button automatically. If allowed, the confirm responds with "true", as if you accepted the dialog via "Enter" or the "OK" button automatically.

dialogprompt

With this setting you can control what should happen when pages try to use prompts. Prompts are dialogs that ask for user text input via a popup. By default, they are blocked but only notify you of prompts. You can "show" or "block" the dialog and choose to show a notification with "notify", or any combination of that. If shown, you can enter text and send it to the page with "Enter" or cancel it with "Escape". If blocked, the prompt responds with "null", as if you cancelled the dialog via "Escape".

downloadmethod

The downloadmethod setting can be used to change the behavior of newly requested downloads. By default, new downloads are automatically saved to the downloadpath. By changing this setting to "confirm", a dialog will be shown for each new download to request user confirmation before starting. The "ask" method will ask the location for every new download and does not use the "downloadpath" setting. Finally, you may block all incoming downloads with the "block" option.

downloadpath

The location of all downloaded files. Used as the default folder for all types of downloads, such as files, :write command invocations and link-related actions. By default, this setting is empty, and will use a "Downloads" folder inside the user folder (or XDG_DOWNLOAD_DIR/xdg-user-dirs, which takes priority over the default empty value, but not over custom values of the downloadpath). You can set the downloadpath to any directory on your system. To use a different location each time, or to block downloads completely, see the downloadmethod setting.

encodeurlcopy

With this setting you can control what happens in terms of encoding to any url you want to copy from within Vieb. Possible values for this setting are: "spacesonly", to keep the url as is, but replaces spaces with "%20", "encode" to completely re-encode the url and percent encode as much as possible, "keep" to keep the url as is with no changes at all, "decode" to remove any encoding from the url before copying, which will result in nice looking urls, but they might have spaces, so finally there is "nospaces", which decodes the url to a nice looking one, and then replaces spaces with "%20". This is the recommended value to use, but you are free to use any of the url encoding/decoding options listed here.

encodeurlext

Using this setting you can control how urls that will be opened externally will be encoded. See encodeurlcopy for an explanation on the different values. Urls passed to external applications are always wrapped in double quotes, regardless of the chosen encoding method. You can configure which program/command will receive the url using externalcommand.

explorehist

This setting can be used to control which navigations made using explore mode should be available from the history when using action.exploreHistoryPrevious and action.exploreHistoryNext. By default the history of navigations is stored and also saved to disk for subsequent session, but this can be changed with this setting. Navigations will be stored in the history depending on the state of this setting at the time of navigation. When set to "persist", the navigations are appended to "explorehist" inside the current datafolder and kept in memory. When set to "session", the navigation is only appended to the navigation list in memory, and not written to disk. When set to "none", no new navigation history will be saved, though history previously written to memory and/or disk will be kept. It's always safe to delete the "explorehist" file, as Vieb only reads it at startup and only appends it when navigating using "persist".

externalcommand

This setting is used to specify an external command that can be executed with the highlighted url as an argument. The url that is opened with the configured command is the one highlighted when in pointer mode or visual mode when p.externalLink is called, or the current url when calling action.openLinkExternal, though there are more external open actions in pointer mode, see link-related actions. When using the keyboard to do so, you can add multiple mappings that first set this option and then call the action. For example, to make <C-v> open the link with VLC from pointer mode:
:pmap <C-v> <:set externalcommand=vlc><p.externalLink>
By default this setting is empty, so it's up to you to set it before calling the action to make this work. Though if you always want to use the same external command, you could just set it once (either via :set or the viebrc) and call the action without adding a custom mapping. You can also right-click on links on the page and call this command with the menu option. You can control error or success reporting with the notificationforsystemcommands setting, which by default only shows failures. You can change the url encoding of the urls to be opened with the command with encodeurlext, the url is always wrapped in double quotes. You can change the default shell that the command will run in with the shell setting. PDFs can be automatically opened externally on visit by setting pdfbehavior to "external" instead of "download".

favicons

Change this setting to modify the favicon cache duration. This setting does not affect for how long favicons are stored on disk, but only affects the amount of time it takes to refresh them. A favicon will automatically be removed from disk when it is not used for any of the pages in the browsing history. This setting does not change this mechanism, and only modifies the length of time any favicon will be cached. If favicons are disabled, you won't see them in other places of Vieb either and no requests will be made to fetch favicons. If you want to minimize the amount of requests for favicons but still have them, you could consider to never expire the favicon cache.

favoritepages

This setting can be used to add any number of favorite pages to the new tab page. You only need to specify the url of the page, other info will be stored automatically when you visit the site. The url needs to match exactly, although they will be prefixed with "https://" if no protocol is specified. Favorite pages will appear next to the top sites. If you only want to show favorites, without the most visited sites, set suggesttopsites to 0. When both settings are empty/disabled, the new tab page will be empty instead. The favoritepages setting is unused if you set a custom new tab page with newtaburl.

followchars

With this setting you can control which characters should be used to select elements when inside follow mode. By default, it will use only letters, but you can select a few other predefined sets of characters with this setting, or supply your own set like so: :set followchars=custom:asdf After running this, only the letters "a", "s", "d" and "f" will now be used for labelling elements. This can be useful, if you want to make custom mappings in follow mode, as mappings take priority over selecting elements on the page using the followchars setting. The followfallbackaction controls what happens when you press a key in follow mode that does not have a mapping and also does not appear in the followchars setting, by default it will filter the elements. The sets you can choose from for this setting are: "all", "alpha", "alphanum", "dvorakhome", "numbers" and "qwertyhome", but you can always use a custom set of characters.

followelement

This setting can be used to filter the types of elements that will be highlighted when using the regular follow mode. Different sets of elements can be selected at any moment to be highlighted. For example, with this setting set on "inputs-click,inputs-insert", only input elements will be highlighted in follow mode. Please check follow mode for more information about the types of elements.

followelementpointer

This setting can be used to filter the types of elements that will be highlighted when using follow mode to move the cursor in pointer mode. For example, with this setting set on "inputs-click,inputs-insert", only input elements will be highlighted in follow mode. Please check follow mode for more information about the types of elements.

followfallbackaction

With this setting you can decide what happens when you press characters in follow mode that don't have a mapping and are also not part of the followchars used to select the elements. By default, these other characters will be used to type out a search in the navbar, which will filter elements based on the url, text and src properties. This setting works best when you use the "numbers" set for followchars, as otherwise it might be confusing which character does what. If you don't want this filtering behavior at all, you can instead choose to make these other characters end follow mode by changing this setting to "exit", or ignore the keys altogether (as they don't have a mapping anyway) by using "nothing".

followlabelposition

Using the label position setting you can control where follow mode character labels should be aligned. Since this cannot be easily set with CSS, this setting has a fair amount of potential locations you can choose from. The first main consideration is if you want the labels to be inside the border, outside of it, or floating on a corner. From there you can choose which side of the border they should align primarily to, and finally where on that border side they should actually appear. For example, the default is "outsiderighttop", meaning it's a label on the outside, on the right border, at the top of the right border. You can by default also rotate between available options with "`", but keep in mind that there are a lot. Most other Vim-like browsers have a different alignment compared to Vieb's default.

follownewtabswitch

This setting can be used to automatically switch to newly opened tabs when using the new tab version of follow mode. When enabled, you will automatically switch to the new tab, unless you hold Shift while typing out the relevant keys. If you disable this toggle you won't switch to the tabs automatically, even when not holding Shift to stay in follow mode. This setting does not affect the split version of follow mode, as you will always switch to new splits.

guifontsize

Change the font size for the entire Vieb interface. Changing the font size setting will also scale the navbar, special pages such as this help page, notifications and follow mode indicators. It will not automatically zoom websites, which can be done with action.zoomIn and related actions.

guifullscreennavbar

This setting controls the visibility of the navbar while inside fullscreen. For the visibility outside of fullscreen, see guinavbar. The different options are also explained in more detail there. You can toggle the fullscreen state with action.toggleFullscreen.

guifullscreentabbar

This setting controls the visibility of the tabbar while inside fullscreen. For the visibility outside of fullscreen, see guitabbar. The different options are also explained in more detail there. You can toggle the fullscreen state with action.toggleFullscreen.

guihidetimeout

The guihidetimeout setting is used to configure the duration of temporarily showing gui elements that are configured to do so. For example, with this setting configured as 2000 and guitabbar set to "onupdate", the tabbar will be shown for 2 seconds every time a tab is added, removed or updated. This guihidetimeout setting also applies to guinavbar when it is set to "onupdate". This setting is used exactly the same way for the fullscreen variants: guifullscreennavbar and guifullscreentabbar. A value of 0 will disable the timeout, and never hide the elements again after a delay even if configured to do so by their specific gui setting.

guinavbar

This setting controls the visibility of the navbar outside fullscreen. When set to "always", the navbar is shown at all times. To automatically hide the navbar when there is nothing happening, set this setting to "onupdate", which temporarily shows the navbar when the mode changes or when you are typing in the navbar. The duration of showing it temporarily is configured by guihidetimeout. To only show the navbar for typing and not for mode updates, set it to "oninput". It can also be set to "never", which will completely hide the navbar, even when typing. The visibility of the navbar does not affect its usage or mappings.

guiscrollbar

With this setting you can control when the scrollbar should appear on pages. You can also permanently hide and show it using custom userstyle CSS rules, but with this setting you can do so without having to use or even enable userstyle and you can also do it event based. By default the scrollbar is always shown, but you can choose to never show it. You can also choose to only show the scrollbar on scroll with "onscroll", or on any mouse movement (also scrolling) with "onmove". The duration it's shown after an event is controlled with guihidetimeout.

guitabbar

This setting controls the visibility of the tabbar outside fullscreen. When set to "always", the tabs are always shown. To automatically hide the tabbar when there are no tabs being added or changed, set it to "onupdate". The duration of showing it temporarily is configured by guihidetimeout. To never show the tabs even when updating them, set this setting to "never". When set to "never" it is recommended to use the :buffer command to switch between the open websites. The visibility of the tabbar does not affect its usage or mappings.

historyperpage

Control the amount of history entries each page on the history page should show. To get all the history on a single page set this to the maximum value. You can also change the amount displayed per page temporarily while on the history page, but that value is not kept after reloads, while this setting is. The default value of 100 was carefully chosen to make rendering fast while at the same time not showing too many entries at once. If you have a lot of history, lower values might slow down initial loading, while higher values might make the page slower after it's loaded.

ignorecase

Toggle for case-sensitive searching in the page. Any existing search will be updated to match this setting when either action.nextSearchMatch or action.previousSearchMatch are called. This setting is ignored by default, unless smartcase is disabled.

incsearch

Toggles incremental search in the search mode. When enabled, the search will be updated every time a character is typed, without having to start the search with action.useEnteredData. You can control if these type of searches should be global or local using searchscope.

inputfocusalignment

With this setting you can choose where the cursor should appear after focussing an input field with follow mode. By default, it will position the cursor at the end of the input field, and then remember the position for each subsequent interaction with it, even after leaving insert mode and going back to it. You can also choose to do the same for the start of the input field with "rememberstart" instead of "rememberend". If you always want to jump the cursor to the start or end without remembering it on subsequent focus, you can use "alwaysstart" or "alwaysend" to always set the cursor to the start or the end of the input field respectively.

keeprecentlyclosed

Toggle whether to keep recently closed tabs and allow them to be restored. This setting is unaffected by other history settings. Disabling this setting will result in the action.reopenTab being unable to restore previously closed tabs. If restoretabs is disabled, all open tabs will be moved to the list of recently closed tabs when quitting Vieb, unless this setting is also disabled (in which case they can not be restored).

mapsuggest

With this setting you can control the amount of suggestions to show for multi-key mappings. It is independent from the showcmd setting, which controls if the pressed keys should be shown. The suggestions are colored based on which keys are already pressed, which still need to be pressed and what will happen when that particular mapping is triggered. With this setting, you can configure to show as few or many suggestions for these kind of multi-key mappings as you want to. If set to zero, this feature will be disabled completely. The suggestions will only be shown for as long as there are pressed keys, for which the timeout can be set with timeout and timeoutlen. If you want to have more time to read the suggestions, it's recommended to increase the timeoutlen or even disable the timeout. Finally, you can control the position of the suggestions using mapsuggestposition.

mapsuggestposition

This setting controls the position of the suggestions for multi-key mappings. By default they are shown on the topright, which means they are close to the showcmd location. You can control the number of suggestions (or disable them) using mapsuggest. It is recommended to choose a location that is not identical to notificationposition, but this is not enforced.

markposition

With this setting you can control where stored marks will be restored to using action.restoreMark and :restoremark. Marks stored with action.makeMark will store the current page url based on the last pressed key, so they can be restored to a wide range of different location in Vieb. By default, they restore to a "newtab", but you can also choose the current tab with "open", or any of the other special locations with the other values for this setting. Finally, the "search" setting will set the url as the current search string with search mode.

markpositionshifted

With this setting you can optionally override the markposition setting for shifted keys. By default, they will open to the same location as unshifted ones, but this setting can change that. For example if you want regular keys to be opened in the current tab and shifted keys in a new tab, use :set markposition=open markpositionshifted=newtab.

maxmapdepth

The maximum amount of recursion for recursive mappings. After reaching this limit, all subsequent actions will be cancelled as part of the mapping. With this setting you can decide when Vieb's mouse menu should appear on pages when right-clicking. When set to "globalasneeded", it will appear only if the website does not already provide one using a global listener or an element listener. If set to "elementasneeded", the menu will appear if the website does not provide one using an element listener, so if there are global listeners that maybe open the menu, Vieb's menu will still appear. If set to "never", the mouse menu of Vieb will never appear, but the website might provide one. If set to "always", it will appear even when the website already seems to have one, which might result in two menus being opened. You can always open the menu using action.menuOpen, or with the mouse if "menupage" is enabled as a mouse feature. With this setting you can control if suggestions should have an options menu when right-clicking. When set to "both", you will be allowed to open a menu in explore mode and in command mode. You can also enable it just for one of these modes, or disable it entirely using the "never" value. You can always open the menu using action.menuOpen if a suggestion is selected, or with the mouse if "menusuggest" is enabled as a mouse feature. With this setting you can control which mouse menus should be enabled for the Vieb interface when right-clicking. You have the choice of either enabling the menu for tabs or for the navbar. You can also choose to enabling both or neither. Just as clicking on the navbar outside of any navbar related modes will bring you to explore mode (if "toexplore" is enabled as a mouse feature), right-clicking the navbar will do the same and open the navbar menu if enabled by this setting. This setting does not control the webpage menu, see the menupage setting, or for the suggestions menu, see the menusuggest setting. You can always open the menu using action.menuOpen, or with the mouse if "menuvieb" is enabled as a mouse feature.

mintabwidth

The minimum amount of pixels for a tab to be in the navbar. When there are too many tabs to fit with this minimum width, it will overflow according to the value of the taboverflow setting. If the minimum tab width is set to 0, the taboverflow setting is not used, as tabs will never overflow. When set to a really high value, only one tab will be visible at a time, making the :buffer command even more useful.

modifiers

This setting controls which keys will not be registered on their own when pressed, but only when used as a modifier. Modifier keys such as Ctrl, Meta, Alt and Shift will still be usable to modify other keys, but they won't be individually detected as being pressed if they are part of this list. For example, a mapping like "S<C-w>" requires you press "s" with shift and then w while holding Ctrl. In this case, you probably don't want to register Ctrl as a key when trying to press w while holding Ctrl, which would empty the pressed keys list of "S" back to "" because you pressed Ctrl. The other modifiers are included for similar reasons. The lock keys are by default included to allow them to be used as if they were modifiers if they are remapped as such in your operating system (a common remapping is CapsLock to Ctrl).

mouse

The mouse setting influences if, when and how the Vieb interface should react to mouse actions. By default, it is set to a list of all features, which means every mouse feature of Vieb is enabled. The mouse setting is a list setting which can be used to enable any feature you want to from this list: You can simply set the mouse setting to a list of all the features you want, for example: :set mouse=scrollzoom,oustsideinsert,newtab. Because the mouse setting is list, you can add or remove specific features with :set+=feature and :set-=feature, which will even work when the current value is "all". When this setting is empty, you will not be able to use the mouse at all and you will lose all the features listed in the bullet list above. Using pointer.moveToMouse to start pointer mode at the mouse cursor location is not affected by any mouse feature. The same is true for mousevisualmode and mousefocus.

mousedisabledbehavior

This setting controls what should happen when mouse features are disabled for a specific element and you click on it. By default, the click will be ignored, but you can choose to make elements without regular mouse features enabled to be an additional drag region, similar to the logo. Depending on what region of the app, it requires you to disable different mouse features to make it a drag region automatically. If you change this setting to "drag" instead of "nothing" and you have disabled all mouse features, the entire app becomes a drag region, similar to very old Vieb releases. Context menu mouse features do not need to be disabled specifically, but they will not be usable with the mouse if that region has become a drag region. The following mouse features will need to be disabled along with having this setting set to "drag" if you want to use them as a drag region: For other less obvious regions, such as incoming notifications or follow elements, the same system is in place, but they only require a single mouse feature to be disabled. If you want to use different breakpoints for toggling drag regions, do note that it's just one line of CSS that you can add to any element via colorschemes which is .selector {-webkit-app-region: drag;}. You can thus also choose not to make use of this setting by leaving it set to "nothing" and defining your own regions that should always be draggable. To undo a drag region use "no-drag" as the value in CSS.

mousefocus

With the mousefocus toggle it's possible to focus a tab by hovering it with the mouse. When mousefocus is enabled, you can switch between tabs by hovering over a tab in the tabbar, without clicking it. In case of multiple splits you can also switch by hovering the page, though that does require "pageininsert" and/or "pageoutsideinsert" to be enabled as a mouse feature.

mousenewtabswitch

This setting can be used to automatically switch to newly opened tabs when using the mouse. This behavior is on by default. This toggle only affects using the mouse to do so. In the new tab version of follow mode you will automatically switch to the new tab, unless you hold Shift while typing out the relevant keys or if you disabled follownewtabswitch.

mousevisualmode

With this setting you can control how text selections made with the mouse should affect visual mode. By default, you will not switch to visual mode, but the selection will be stored so that when you do enter visual mode, the mouse selection will be applied as if it were made using visual mode. If you want to disable this, set this setting to "never". If you want to immediately switch to visual mode when you select something with the mouse and apply the selection, you can set this to "activate". Though do keep in mind that selecting text with the mouse might have slightly different results compared to selection with visual mode, especially when selecting text in input fields or on empty sections of the page. You can only interact with the page (including text selection) if you have enabled "pageininsert" and/or "pageoutsideinsert" as a mouse feature.

nativenotification

Setting for controlling when to use native/system notifications instead of the Vieb notifications. The notification history can still be viewed on the notifications page, regardless of this setting. When this setting is set to always", you will not get a scrollable popup for large notifications, as all notifications will be unconditionally passed to your operating system to handle. If set to "smallonly", Vieb will show large notifications with the scrollable popup, and small ones will be passed to the native system. If set to "largeonly", Vieb will pass large notifications to the native system, and small ones are shown with Vieb's internal notification system. The "never" value means that native notifications are not used and Vieb will show all notifications using its own system. You can control how many newlines are considered small/large using notificationlimitsmall.

nativetheme

With this setting you can control the theme that should be reported to websites that is used by your system. It can either be set to "dark" or "light", but by default it will simply use the "system" preference for it. This theme is not directly used by Vieb, you can use :colorscheme for that. The nativetheme setting simply controls what theme is reported to websites, so that they can adapt their styling based on prefers-color-scheme. Updates to this setting immediately take effect, and you don't need to reload. Currently the setting will be interpreted by websites as LightDark.

newtaburl

Setting to choose a custom page that will be used as the newtab page. By default it's unset so that Vieb's built-in new tab page will be used, which you can customize with a :colorscheme, favoritepages or suggesttopsites. If for some reason you want to use a completely different new tab page, you can use this setting to point to a new location, either as a url or as a file location. Having an empty new tab page can be done with: :set favoritepages= newtaburl= suggesttopsites=0

notificationduration

This setting configures the amount of milliseconds a notification should be shown for. A value of 0 will disable notifications and not keep history of them, but any other value will show them and store them on the notifications page. The value of this setting is ignored when native notifications are used.

notificationforpermissions

With this setting you can enable notifications for permission requests. Even with this setting set to "silent", the permission request can be found in the notifications page. If you do not want it to be stored at all, you can now set it to "none". Additionally, you can choose to only show notifications for "allowed" or "blocked" permissions. Notifications for permission requests include the website url and type of access that was given. For example, if you configured permissioncamera to always block this permission, a notification will be shown that the camera permission is globally blocked. Other ways to manage permissions are with permissionsallowed, permissionsasked and permissionsblocked, all of which are list settings that can automatically allow, ask for or deny permissions based on the current website url using regular expressions. Finally there is a different setting to control if websites are allowed to show notifications named permissionnotifications.

notificationforsystemcommands

This setting controls if you receive notifications for system commands that you run. You can run any system command by prefixing the command with "!", similar to Vim. By default you will only be notified of errors with the command, but you can choose to receive no notifications with "none" or even receive success updates with "all". This setting also applies to action.editWithVim, which uses vimcommand. Finally, the external link related actions are also affected if externalcommand has been set.

notificationlimitsmall

Control the amount of lines in a notification that should be considered a small or a large one. Small notifications are shown over the page in the corner configured with notificationposition, while large ones show in a dialog that can be scrolled. The line limit by default is set to 3, so notifications with 3 lines or fewer are shown in the notification corner, while larger ones show in the dialog. If you always want the dialog, set this setting to 0, or if you never want it, set it to a very large limit. You can also choose to use native notifications instead, optionally only for small or large notifications using the nativenotification setting.

notificationposition

This setting sets the location of Vieb notifications. You can set it to any corner of the window. Long notifications will open in a scrollable popup similar to Vim. The value of this setting is ignored when native notifications are used.

pdfbehavior

Control what happens when a PDF is opened in a page. By default, it will now download the PDF url. You can also choose to block the reader without automatically downloading with "block". To get the built-in Chromium PDF reader back, use "view". The reader is disabled because no interaction is possible with it and you also lose focus on the Vieb interface, requiring mouse interaction to get it back. You can also choose to open the PDF externally using the externalcommand by setting pdfbehavior to "external". If you want to do either of these but only manually, you can set the pdfbehavior to "block" and use action.openLinkExternal or action.downloadLink manually, this setting is only for doing either of these automatically.

permissioncamera

Permission setting to either allow or block websites from using your camera. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. You will most likely also need to allow permissionmediadevices to provide the site with a list of available media devices.

permissioncertificateerror

Permission setting to either allow or block websites with invalid certificates from being visited. When set to "ask", you will get a popup to ask if you want to allow the request. Unlike other permission settings, once you allow a certificate, that specific certificate will be remembered as valid for the same domain until a browser restart. If set to "allow", the behavior will be the same as accepting any invalid certificate by default, which is not recommended when using Vieb to surf the internet (though it could be valid for on-premise locations without internet that only operate locally). The default behavior of Vieb is obviously to block all custom/invalid certificates, which you could also override only for localhost like so: :set permissionsallowed=https://localhost(|\/.*|:.*)~certificateerror.

permissionclipboardread

Permission setting to either allow or block websites from reading the clipboard text. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionclipboardwrite

Permission setting to either allow or block websites from writing the clipboard text. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. On some sites, it's required to also allow reading the clipboard using the permissionclipboardread setting before writing is allowed, on other sites just allowing writing itself is enough. So while writing is by default allowed, it might not work on all websites without also allowing reading. Finally, you also need page focus for clipboard actions to work, which it will do by default for :runjsinpage, pointer mode and follow mode, but not for mouse clicks due to technical limitations, unless you make sure you are in insert mode while you click, which will focus the page unconditionally.

permissionclosepage

Permission setting to either allow or block websites from closing themselves. Similar to manually closing a tab, but this permission allows the page to close its own tab automatically.

permissiondisplaycapture

Permission setting to ask or block websites from using display capture functionality, also known as screensharing. There is no allow value for this option, because each time this is requested you need to choose the sharing source. If set to ask, Vieb will show a selector on the screen which you can use to select the source with follow mode or with the mouse if page interaction features have not been disabled. It will always show a permission request popup as well, because some websites skip the source selection part, which means they will directly ask for the permission. You might also get more permission requests for related APIs, such as permissionmediadevices or permissionmicrophone. If those are blocked, the website might incorrectly report that the displaycapture could not be started, but this doesn't have to be the case. When in doubt, you can enable notificationforpermissions or check the notifications page to see which permissions were granted or denied and for what reason.

permissionfullscreen

Permission setting to either allow or block websites from entering fullscreen. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissiongeolocation

Permission setting to either allow or block websites from using your location. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionhid

Permission setting to either allow or block websites from accessing your Human Interface Devices (HID) devices. You cannot be asked to allow the request just once, because each connected device would need to be separately asked for permission even when requesting a complete list of devices.

permissionmediadevices

Permission setting to either allow or block websites from reading the list of connected media devices, such as speakers or microphones. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally include the device names in the response as well. The difference between "allow" and "allowfull" is the inclusion of the device name labels in the response. Some websites rely on the labels to enumerate device types, but it will expose the full device name if selected. It is also highly likely that a website will request this media devices list before requesting access to for example the microphone or the camera. These permissions are separately configured in Vieb using permissioncamera and permissionmicrophone, so you will need to allow these as well if you want the website to use these devices. Be cautious with using "ask" for this permission, as some sites request this permission multiple times a second in some scenarios.

permissionmicrophone

Permission setting to either allow or block websites from using your microphone. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. You will most likely also need to allow permissionmediadevices to provide the site with a list of available media devices.

permissionmidi

Permission setting to either allow or block websites from using the "webmidi" API. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionmidisysex

Permission setting to either allow or block websites from using the system exclusive messages of the "webmidi" API. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionnotifications

Permission setting to either allow or block websites from showing you notifications. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionopenexternal

Permission setting to either allow or block websites from opening external applications with arbitrary arguments. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session. The popup will also include information about what type of application will be opened if you allow it. This type of popup will for example appear when you click on mailto or magnet links.

permissionpersistentstorage

Permission setting to either allow or block websites from storing data in the persistent storage. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionpointerlock

Permission setting to either allow or block websites to lock the pointer position. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionsallowed

With this setting you can make exceptions to the global permission settings. This is done by supplying a regular expression together with a list of permissions that should always be allowed for that pattern/website. This setting is never automatically updated, because the question if you want to store permissions for the session applies to the global setting for that permission. The first entry that matches the pattern and matched the requested permission is used. This setting is not specific to a single type of permission and can even be used to allow multiple permissions for a website automatically. One use case is setting the global permissionmediadevices setting to "block" and to allow only specific websites with this setting. For example, to always allow a website such as discord.com access to your mediadevices and microphone, but block it for all other websites, you could run a command similar to this:
:set permissionmediadevices=block permissionmicrophone=block permissionsallowed+=discord.com~microphone~mediadevices
Of course the regular expression for the discord domain could be made more complex and accurate, but it serves as an example to show that adding sites to this allowed permission list can be easier than you might think. A more accurate regex for matching only a specific domain could be ^https?://(www\.)?discord\.com.*. The first part of any entry in the allow list will be the regular expression to match against the url and all subsequent arguments are names of the permissions to be automatically allowed. Since configuration is done with regex, the configuration is not limited to allowing specific websites, but can also be used to allow only urls prefixed with "https://" or only ".org" top-level domains. For the permissionmediadevices setting you can also use "mediadevicesfull" instead of just "mediadevices" to also include the labels automatically. The entries in this permission allow list can be overwritten by permissionsblocked and permissionsasked. The history of all permissions requested are stored in the session's notification history on the notifications page. If you want a notification to be shown every time a permission is requested by a website, you can enable notificationforpermissions.

permissionsasked

Use this setting to override global permissions by asking for the permission, regardless of what is configured in permissionsallowed, permissionsblocked or the individual permission. It takes priority over all, and will ask the user for confirmation what should happen, similar to setting permissions to "ask". Configuration is the same as the allow and blocklist settings, for example: discord.com~displaycapture~camera will ask you for display capture (screenshare) and camera permission when requested, regardless of this same permission being listed in other settings.

permissionsblocked

The list of blocked permissions works very similar to the permissionsallowed setting, except that it is used to block specific websites from using a permission. An important thing to note is that blocking permissions with this setting takes priority over allowed and permission-specific configuration. This means that even permissions allowed with the allowed list can be blocked by this setting. This is useful to give all pages of a specific website access to a permission, except for a single subdomain. The entries in this permission block list can be overwritten by permissionsasked.

permissionsensors

Permission setting to either allow or block websites to read the motion sensors. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionserial

Permission setting to either allow or block websites from accessing your serial devices. You cannot be asked to allow the request just once, because each connected device would need to be separately asked for permission even when requesting a complete list of devices.

permissionscreenwakelock

Permission setting to either allow or block websites preventing the screen from dimming and eventually sleeping. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionunknown

Permission setting to either allow or block websites from requesting any permission that is not a part of any of the other categories. These kind of permissions are either recently added by Chromium/Electron or simply not properly mapped by Electron. When set to "ask", you will get a popup to ask if you want to allow the request just this once and optionally store the setting for this session.

permissionusb

Permission setting to either allow or block websites from accessing your usb devices. You cannot be asked to allow the request just once, because each connected device would need to be separately asked for permission even when requesting a complete list of devices.

pointerposlocalid

With this setting you can control what to use as the identifier for local pointer position storage. By default, this is per domain, but you can also use the exact url. You can list stored pointer positions with :pointerpos, and make new ones with pointer.storePos. Existing stored local positions will not be updated after changing this setting, though global ones will continue to work. To control which positions are stored globally/locally, see the pointerpostype setting. You can delete old ones with :delpointerpos.

pointerpostype

Using the pointerpostype setting you can choose which keys are considered global and which are local. The difference between them, is that global ones work on every site, while local ones only work on the right domain/url, depending on pointerposlocalid. By default, the casing of the key is used to switch between global and local storage, local ones are unshifted, while global ones require you to hold Shift. With this setting you can force local or global ones to be used regardless of shifting.

quickmarkpersistence

With this setting you can control which type of quickmarks to keep on quit. By default, unlike Vim, all marks are kept on quit for the next sessions. If you exclude a quickmark type from the list, it will not be kept on quit. An empty list will delete the file on quit. For actions related to these quickmarks, see quickmarking.

quitonlasttabclose

Toggle for quitting Vieb automatically when the last opened tab is closed. By default this is disabled, so that when the last tab is closed a new empty tab is opened. If this toggle is enabled, Vieb will quit if the last tab is closed using :close.

redirects

With this setting you can configure automatic redirects for navigating to websites. You can configure as many redirects as you want, using a comma-separated list. As with other settings of this type, you can append new entries without typing out the current value, as explained in the :set command paragraph. Every comma-separated entry should also contain a ~ to separate the original and the replacement. These parts are configured using regular expressions. For example, to redirect all reddit requests to old.reddit.com, run this command:
:set redirects+=^https?://(www\.)?(reddit\.com.*)~https://old.$2
If you want to make this the only redirect and remove all existing ones, use "redirects=..." instead of "redirects+=...". Although regex might not be the most intuitive way to configure redirects, it does give you full flexibility. The one default redirect that is configured with this setting is to skip the tracking call to Google for AMP url, and redirect to the actual url locally. The default redirects might be expanded in the future to prevent other similar request leaks and to prevent remote tracking for simple redirects. To automatically redirect to http for websites without https, see redirecttohttp.

redirecttohttp

Toggle for automatically redirecting to http for websites without https. Although technically possible with the redirects setting, this option will only redirect for websites that do not have https. Vieb will assume all websites to have https, and this setting configures whether to redirect websites to http when the https version could not be loaded. If this option is disabled, you will be shown an error page for http-only websites with the exact cause of the error and a link to the http version. To directly visit a http-only website without enabling this setting, you need to specify the http:// protocol explicitly, otherwise Vieb will navigate to the https version automatically.

reloadtaboncrash

With this toggle you can control if crashed tabs should be recreated automatically in place of the crashed one. The last known url of the crashed tab will be used to create a new tab in the background and add it in place of the old one. The internal mechanism is similar to switching with containernames, and as such your browsing history of that tab is not kept. Crashed tabs are by default bright red in the tab bar, and further interaction with these tabs is not possible, except for recreating it using action.refreshTab or closing the tab with :close. Before a tab crashes, it might be marked as unresponsive with a small red indicator on the left of the tab, similar to the orange current tab indicator when using splits.

replacespecial

Using the replacespecial setting you can control when special pages should replace the current tab. Currently this is done when the current tab is viewing any of the special pages, but this can also be changed to navigate to the special page in the current tab at all times with "always", or only when it's the new tab page with "newtab". Finally you can choose to "never" replace the current tab with a special page and always open special commands in a new tab, which you can also force by appending a "!" to the command.

replacestartup

With this setting you can control when pages called on startup or from other applications will replace the current tab. By default it will never do this, but you can choose to do this when the current tab is the newtab page (empty) or do this everytime with "always".

requestheaders

The requestheaders setting can be used to add custom headers to all requests. This can be useful for debugging a server or for testing custom login methods. It is a powerful setting that is best left empty for most general use cases, as setting invalid headers could lead to requests being blocked by servers. The setting is a comma-separated list where each entry represents a header that should be added to requests, appended with a "~" and then a custom value, such as "X-Forwarded-For~100.0.0.0". You can also use tildes in the value, only the first one is used to separate the key from the value, others are part of the value. Commas are not allowed inside the key nor the value, as they are used to separate different entries in the requestheaders list. If you do not include any tildes in an entry, that header key will be deleted instead. So if you want to remove the "Accept" header, modify the "Accept-Language" header and empty the "Cookie" header, you could do this:
:set requestheaders=Accept,Accept-Language~en-US,Cookie~
Having a header name in the list without a "~" will make sure that header is never send to any server.

requesttimeout

Duration in milliseconds before stopping a page load automatically. The timer is reset upon navigation to any page and after the timeout duration is reached, the page load will be stopped automatically, similar to calling action.stopLoadingPage manually. A duration of 0 milliseconds will disable the timeout completely, which could mean that some websites will never stop loading.

resourcesallowed

With this setting you can override which resource requests are always allowed for a given url pattern. This setting is a list of regular expression patterns, if any pattern matches for a resource url or the page url it will be allowed, regardless of any blocking done by resourcesblocked. The list is separated by commas and will allow all types of resources if the pattern matches, but you can also only allow specific resources for each pattern by appending as many resource types as you want separated by a "~". For example, to always allow images and stylesheets to be loaded on urls or resources that include duckduckgo.com, run :set resourcesallowed+=duckduckgo.com~image~stylesheet. You can combine this with resourcesblocked and resourcetypes to gain full control over which resources are allowed or not allowed to be loaded. See resourcetypes to configure the default types and read more about which resource types there are.

resourcesblocked

With this setting you can override which resource requests are blocked for a given url pattern. This setting is a list of regular expression patterns, if any pattern matches for a resource url or the page url it will be blocked, unless it's allowed again with resourcesallowed. Similar to the allow setting, you can choose to only use patterns in the list or optionally append specific resource types to block. For example, to block scripts and fonts from loading on urls or resources that include youtube.com, run :set resourcesblocked+=youtube.com~script~font. The pattern can be much more complex, and you can include as little or many resources to be blocked as needed. Listing no specific resource types after a pattern will block every resource matching the url regex pattern.

resourcetypes

The general fallback setting for which resource types should be loaded or blocked. This setting can be overridden by both resourcesblocked and resourcesallowed. If a resource type is disabled with this setting, it will not be loaded for any external pages, unless it is allowed again with resourcesallowed. If set to an empty list, you can use Vieb as a minimal HTML-only browser. The following resource types can be loaded or blocked with these resource settings: Detection of these resource types relies on the internal Chromium request response types and as such cannot be customized or improved to work more reliable or handle other types.

restoretabs

This setting controls if tabs you had open during the previous browsing session should be restored. By default all tabs you had open when you quit Vieb last time will automatically open again when you start Vieb. If you have configured any startuppages, they will be opened after restoring the previous tabs. If this setting is set to "pinned", regular tabs won't be restored, but will possibly be stored as recently closed tabs so you can reopen them, which is configured with keeprecentlyclosed. Tabs which are pinned by the :pin command are still restored if set to "pinned". With the "regular" and "none" options, you can choose to not restore pinned tabs, but only regular ones or none at all. The container and muted state of each tab is always remembered on restart. You can control if restored tabs are loaded or not with suspendonrestore.

restorewindowmaximize

Toggle for remembering and restoring the window maximization state after restarting Vieb.

restorewindowposition

Toggle for remembering and restoring the window position after restarting Vieb.

restorewindowsize

Toggle for remembering and restoring the window size after restarting Vieb.

scrollposlocalid

With this setting you can control what to use as the identifier for local scroll position storage. By default, this is per domain, but you can also use the exact url. You can list stored scroll positions with :scrollpos, and make new ones with action.storeScrollPos. Existing stored local positions will not be updated after changing this setting, though global ones will continue to work. To control which positions are stored globally/locally, see the scrollpostype setting. You can delete old ones with :delscrollpos.

scrollpostype

Using the scrollpostype setting you can choose which keys are considered global and which are local. The difference between them, is that global ones work on every site, while local ones only work on the right domain/url, depending on scrollposlocalid. By default, the casing of the key is used to switch between global and local storage, local ones are unshifted, while global ones require you to hold Shift. With this setting you can force local or global ones to be used regardless of shifting.

searchengine

Set the search engine(s). This setting is used as the base url(s) for requests that do not look like a url. The searchengine setting must be set to a valid url and must include "%s", which will be replaced with your search. You can also set multiple urls as a list, one of which will be picked at random. To make a web search, call action.useEnteredData after entering your search in explore mode. If you want to use a light theme for you searches, you could switch the "kae=d" part of the searchengine setting to "kae=g". For more information about these search settings, see the DuckDuckGo settings page. Of course it's also possible to use a completely different search engine, switching between them can also be simplified with custom commands. For example, to switch to the light version of DuckDuckGo in combination with switching to Vieb's light colorscheme, you can so something like this:
command! light <:colorscheme light><:set searchengine=https://duckduckgo.com/?kae=g&q=%s>
If you want to use multiple search engines, you could use searchwords. If you want to use a random search engine each time you search, you should set the searchengine setting to a list of search base urls. This can for example be useful for spreading your searches across multiple instances of a specific search engine. If you empty the searchengine setting, you will disable search functionality completely, though other type of explore mode navigations are still possible.

searchemptyscope

This setting is used to control which scope of search mode searches should be cleared when calling action.emptySearch. By default, only global searches are cleared with this action. This means, that searches specific to the current tab will stay. If you also want to empty the local searches, you can adjust this setting to do so. To make local searches instead of global ones, you need to update the searchscope setting.

searchpointeralignment

With this setting you can control where the pointer should appear in relation to the searched text on the page, which happens when calling action.nextSearchMatch or action.previousSearchMatch from pointer mode, after you have made a search using search mode. By default, the pointer will align to the left of the search highlight, but you can also configure it to align to the right or the center.

searchscope

With the searchscope setting you can change which type of search mode searches should be made. By default, only global searches are used, which means the same search string is used for all tabs. This can be annoying if you are using lots of splits and don't want all of them to scroll all at once. In this case you can choose to use "incsearch", which will use local searching if you are using the incsearch setting, but only while you are typing out your search and incrementally showing it. As soon as you execute action.useEnteredData the search will become a global one. If you cancel your incremental search, the local search will be cleared. Searches made from the menu will still be global as well. Finally you can also use "local" as a value to always make a local search, regardless of method. This also makes the menu searches local.

searchwords

A setting to optionally define a series of searchwords, which can be used to perform searches when in explore mode. This is equivalent to the "Keyword Search" or "Smart Keywords" features in other browsers. For example:
:set searchwords+=yt~youtube.com/results?search_query=%s,imdb~imdb.com/find?q=%s
Entering explore mode and typing 'yt [some query]' will visit the YouTube search results page for that query, and 'imdb [some query]' will search IMDB.com. Searchwords can only contain letters, numbers and underscores, while the URL can contain any number of "%s". In your query after the searchword, you can include commas which will be split and spread across multiple %s entries in the url. If more comma-separated values are given than the number of "%s" in the url, the exceding values will be appended to the last given value and the commas left as is. If there are more "%s" entries than there are comma-separated values, the remaining ones are left empty. This also means that urls with a single "%s" can include commas without using this mechanism. The resulting url is always displayed in the suggestions for clarity. The border of the navigation bar will change color if a searchword will trigger, see explore mode for details. For changing the default search engine that does not require any prefixed searchword, see the searchengine setting.

shell

Configure the shell to use for all native commands that are called from Vieb. This applies to externalcommand, vimcommand (and thus action.editWithVim) and is also used for commands that start with "!", as these are run directly as entered. For example, entering command mode and then running "!gvim" will run the "gvim" system command in the shell configured by this setting. If no shell is configured, it will by default use the "$SHELL" environment variable or fallback to "/bin/sh" on Unix-like systems, and read the "ComSpec" environment variable on Windows, which usually defaults to "cmd".

showcmd

Toggle for showing the history of recently pressed keys in the top-right corner. It will only show the keys if there are mappings that require multiple keys. The keys are reset when no more mappings exist that start with the currently pressed keys. The showcmd option also shows the repeat count for normal mode, pointer mode and visual mode. It also controls if a notice is shown for active action macro recordings, see record for details. By default, you will also get suggestions for subsequent keys, this is controlled by a different setting named mapsuggest.

smartcase

With this toggle you can enable or disable smartcase. When smartcase is on, lowercase searches of search mode will be case insensitive, and search queries with any capital letter will be case sensitive. If this feature is enabled, the value of ignorecase is not used to determine case sensitivity. When smartcase is off, you can control if searches are to be case sensitive with ignorecase instead.

spell

Toggle for enabling the spellchecker for text in input fields or textareas. The list of languages can be changed with the spelllang setting.

spelllang

Set the list of languages to be checked by the spellchecker. The list of languages is provided by Electron and depends on your operating system. On Mac, this setting has no effect, as the built-in languages are always used. The "system" value will try to find the best matching language from the supported ones based on your system locale. If it can't find one, the "system" value will be ignored.

splitbelow

Toggle to split below or above the current window when invoking :Sexplore.

splitright

Toggle to split right or left of the current window when invoking :Vexplore.

sponsorblock

Toggle to enable/disable a custom sponsorblock implementation that runs on all pages appear to have a url ending in a watch id. Sponsorblock can be used to skip sponsors inside of videos on websites like Youtube and related websites such as Invidious. The only criteria for sponsorblock to work is that the url has Youtube watch id and that the video element supports setting the current time. Which categories are skipped and what color they are displayed with in the bar is controlled with sponsorblockcategories. You must reload the page for this setting to take effect.

sponsorblockcategories

Controls which categories are skipped automatically and which color they are displayed as in the player bar. By default all categories are enabled, but sponsorblock itself isn't. To remove a category, simply do :set sponsorblockcategories-=categoryname where "categoryname" is the name of any sponsorblock category. You can also change the colors using this setting, by appending a value with the new color: :set sponsorblockcategories-=categoryname sponsorblockcategories+=categoryname~color. The color is optional and can be any CSS color name or a hex value of a color such as "#f00" for pure red. You must reload the page for this setting to take effect.

startuppages

With this setting you can configure a list of pages that should open every time Vieb is started. The list should be comma-separated and all entries must be valid urls. These pages will open regardless of tabs being restored from the previous session, so combining both of these setting might not get the expected results. See restoretabs for details about restoring tabs from the previous session. You can optionally suffix each url in the startuppages list with the following options: container name, muted and pinned, separated by a "~". The container name can be any valid name as explained in containerstartuppage. The muted and pinned options are there to make a page muted or pinned, as they are neither by default. An example startuppage entry combining this can look like this: vieb.dev~vieb_container~muted~pinned,github.com~s:usecurrent~pinned,github.com/Jelmerro/Vieb

storenewvisits

A setting to indicate if new visits to websites should be stored in the browsing history. It is a list that contains the type of visits that should be added to the history. If a specific type is missing from the list, the visited page will not be stored in the browsing history, and as a result the favicon will also not be stored. The "files" type is for local files, and if enabled will store visits to local files in the browsing history. The "special" type is for Vieb's special pages, and if enabled will store visits to these pages in the browsing history. The "sourceviewer" type is for Vieb's source viewer, which can be opened with toggleSourceViewer action or using the sourceviewer:// protocol. The "markdownviewer" type is for Vieb's Markdown viewer, which can be opened with toggleMarkdownViewer action or using the markdownviewer:// protocol. The "readerview" type is for Vieb's reader view, which can be opened with toggleReaderView action or using the readerview:// protocol. All other type of visits fall under the "pages" category. You can control how the browsing history is suggested in explore mode using the suggestorder setting. The download history, cookies, localstorage and tab history are preserved regardless of these settings. To privately navigate to a website, also use a separate container using containernewtab and disable the keeprecentlyclosed setting. The explore and command history are also stored inside the datafolder as "explorehist" and "commandhist", you can safely remove them, or change the storage mechanism with the explorehist and commandhist settings. Finally, consider using a separate datafolder to open a completely separate instance of Vieb.

suggestbouncedelay

This setting can be used to control the delay in milliseconds between suggestions in command mode and explore mode mode. It is basically used as the bounce delay when typing fast. By default this delay is quite low to keep a high responsiveness, but you can increase it to speedup explore mode suggestions. If set to zero, this debounce mechanism is disabled, and all suggestions are computed immediately, which was the case in older Vieb releases.

suggestcommands

The number of suggestions that should appear when typing commands. Set to 0 to disable any suggestions while in command mode.

suggestorder

With this setting, you can control the suggestions for explore mode. It's a list of different suggestion types, which will appear grouped by type as suggestions in the order of this setting. By default, the limit of suggestions per category is 10, but this can be changed by appending entries with a count like so: "history~5". It's also possible to change the sort order of the suggestion within each category itself, which you can do the same way, for example: "searchword~setting". The count can be any valid number, but must be above 0. If you don't want a specific type of suggetions, just remove that type from the list: "searchword~5~setting,history". This example will show up to 5 searchwords sorted by setting appearance, no file suggestions and then 10 history sites sorted by relevance. As shown with the examples, you can change the sort order. Which orders are valid changes between different types. For history you can sort on: "alpha" to alphabetically sort all matching results, "relevance" (default) to sort based on a combination of visits and overlap of search terms, and "date" to sort based on last visit for all matching entries. The "file" suggestions can only be sorted on "alpha", which is also the default. The "searchword" suggestions can be sorted on "alpha" and "setting" to use the order in which they are added to the searchwords setting. All three suggestion types can optionally be modified with a count and a sort as explained above. This way you can completely customize the suggestions of explore mode. For clarity, the default "history,searchword,file" is identical to "history~relevance~10,searchword~10~alpha,file~10". You can switch between suggestions with action.nextSuggestion and action.prevSuggestion, or between different sections with action.nextSuggestionSection and action.prevSuggestionSection.

suggesttopsites

The number of top visited sites that should be shown on the new tab page. These sites are your most visited websites based on your local browsing history. This setting can be set to 0 to disable the top sites from appearing on the new tab page. Alternatively, you can also specify a list of favorite websites that should always be shown on the new tab page using the favoritepages setting. These settings are unused if you set a custom new tab page with newtaburl.

suspendbackgroundtab

With this setting you can toggle if background tabs should be suspended. Background tabs are tabs that are opened by the user but not immediately switched to, such as when mousenewtabswitch is false, or when follow mode is used to open sites in a new tab while holding Shift to not switch to them (which can also be forced by disabling follownewtabswitch).

suspendonrestore

Toggle for restoring tabs in suspended state. Specify which tabs (if any) should not be loaded on startup, but only be listed as opened. These tabs will only be loaded after switching to them. This option is useful to make Vieb start up faster. You can choose to enable it for all tabs or only for tabs that are not pinned (regular). It only has an effect if restoretabs is enabled.

suspendplayingtab

Toggle to control if tabs that are playing media/audio should be suspended by the suspendtimeout. If enabled, these tabs will not follow special rules for being suspended by the timeout. If disabled, tabs that are playing audio/media will not be suspended by the timer, but remain active.

suspendtimeout

Setting to automatically suspend tabs when they aren't opened for a specific amount of time. A value of 0 milliseconds will disable the timeout suspend feature. This setting can be useful to decrease the RAM usage of Vieb. Keep in mind that the page is completely unloaded when tabs are suspended. You can also suspend any background tab manually with :suspend, regardless of the value of this setting. When this timeout is set to suspend really quickly, basically the only tabs that will be loaded are ones that are visible. The timers will be restarted with the new value when updating this setting.

tabclosefocus

Using this setting you can control which tab should be focused when closing the current tab, by default the tab to the left. If set to "right", the tab on the right will be focused instead. You can also choose to focus the last used tab with the "previous" value. This setting isn't used when closing other tabs, but only when closing the current one. Also see :close.

tabcycle

This toggle indicates if the tabs should cycle from the last to the first and the other way around. If enabled, you can switch to the first tab by executing action.nextTab when already at the last tab. If disabled, the next tab action will not have any effect and you will remain on the last tab. The same logic applies to calling action.previousTab while already on the first tab.

tabnewposition

Control the position that a newly opened tab should have relative to the current one. By default, it will be right of the current one, but it can also be set to left, the start or the end of the bar. The command for opening a new tab is :tabnew. This setting also affects action.openNewTabWithCurrentUrl. This setting does not affect tabs which are restored with action.reopenTab, see tabreopenposition for that.

tabopenmuted

This setting controls if newly opened tabs should be muted. You can choose to do this for all tabs, or only for background tabs. This setting has no influence over reopened tabs, see tabreopenmuted for that.

taboverflow

This setting is dependent on the mintabwidth setting, because that influences when tabs will no longer fit in the tabbar. The value of this setting will not be used if the mintabwidth is set to 0, because in that case tabs will never overflow. When the tabs do not fit in the bar, this setting will configure the appearance of the tabs that cannot fit. When set to "wrap", the tabbar will use multiple rows to make sure all tabs are always displayed. When set to "scroll", a scrollbar will appear to indicate that there are more tabs than the ones currently shown. When set to hidden, the same layout is used as with scroll, but the scrollbar will not be displayed.

tabreopenmuted

This setting controls if reopened tabs should be muted. You can choose to do this for all tabs, or make them remember the if they were muted when you closed them. This does not influence newly opened tabs, see tabopenmuted for that.

tabreopenposition

With this setting you can decide at which position a tab should appear when it's reopened with action.reopenTab. With "previous", the previous position is restored for this tab: if it was at index x when it was closed, it will be restored at that same index (or the nearest equivalent) when reopened.

timeout

Toggle to indicate if pressed keys that are part of a sequence should expire after timeoutlen.

timeoutlen

The amount of milliseconds that previously pressed keys are stored as currently pressed keys. When set to a low amount, you have less time to press keys that are part of a mapping with multiple subsequent keys. The pressed keys will be displayed in the topright of the window, if showcmd is enabled. To never expire any pressed keys, disable timeout. The timeoutlen setting is also used to control how long you should focus a tab or window split before it will be registered as the last active one when switching tabs, which is used for the lastusedtab. When keys are pressed that require multiple subsequent keys, you will also get mapping suggestion for which keys to press next, which can be controlled with mapsuggest and mapsuggestposition.

translateapi

Switch between different translate APIs to use for the :translatepage command. By default, this will detect the API automatically based on the translateurl, but it can be set to the right API by name, to make sure the right API is used. The Deepl API has these advantages: free to use, easy to configure and very good translations. The LibreTranslate API has these advantages: self-hosted open source option and supports many languages. If you prefer open source self-hosted software, opt for LibreTranslate. If you want something free that just works, use Deepl Free.

translatekey

Set the API key for the :translatepage command. Depending on if you use Deepl or LibreTranslate, you can find your API key in the Deepl account dashboard or in the LibreTranslate portal. Deepl offers free API access, but in case you have a pro account it is recommended to update translateurl to the pro API base url. LibreTranslate is paid if you use the hosted version, but you can self-host the app as well, which does not require an API key to be set, see the LibreTranslate github repo for details.

translatelang

Choose a default language to translate to with the :translatepage command via Deepl or LibreTranslate. For a list of languages, see the official Deepl documentation or the LibreTranslate language endpoint. You must set an API key with translatekey if you use an online translation API, and you can change the API endpoint with translateurl. The list of valid languages varies between the different APIs, so please check the supported language code list for your API.

translateurl

Set the endpoint to use for the :translatepage command. Only Deepl and LibreTranslate are currently supported. Deepl have a different endpoint for the free and pro versions, by default is it set to the free API endpoint url. You can also set this to "https://libretranslate.com/" or "http://localhost:5000/" for a local LibreTranslate instance. Any url that does not include "deepl" is assumed to be LibreTranslate, unless the translateapi setting is manually set. You must specify the base url of the api, so "https://api-free.deepl.com/v2" for Deepl Free, "https://api.deepl.com/v2" for Deepl Pro, "https://libretranslate.com" for paid hosted LibreTranslate and a local url such as "http://localhost:5000" if you host LibreTranslate yourself, although you can also choose to host LibreTranslate online and use that url.

useragent

With this option you can configure custom useragents to use all across Vieb. The value of this setting is used as the useragent directly in most cases, but you can also add multiple agents separated by a "~" each. Even though the list separator is "~" instead of a comma, it suports the same commands. One of the agents will be randomly selected per tab before each new page loads. If the setting is empty, the default useragent is used. Useragents can make use of variables to add platform specific data to the string. For example: :set useragent="Mozilla/5.0 (%sys) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/%version Safari/537.36" is the same as using an empty value for this setting. Though in this case, the setting can be appended with other useragents. Besides "%sys" (system platform info) and "%version" (Chromium version such as 100.0.0.0), you can also use "%fullversion" (Chromium version such as 100.0.4896.60) or "%firefoxversion" (such as 100.0) inside the useragent setting. Finally, you can also use the "%default" and "%firefox" variables to refer to the respective useragents in full. So to pick randomly between these two: :set useragent=%default~%firefox.

userscript

The userscript setting can be used to add custom JavaScript to any page you visit. This can be done using a wide ranges of different JS files, with four fixed locations and 2 global folders: They are applied in the listed order, with files in a folder being read in alphabetic order. These files can each contain all the JS code you want to add either to all sites with "global" configs, or to all sites of a specific domain, using the per-domain config files. This setting merely toggles if these userscript files should be read at all, which is by default not the case. Updating this setting will require you to reload the page manually, and turning it off will continue to run these scripts until you reload. The files are not watched, so editing these files will need a page reload. You can change which pages are affected by userscripts by changing userscriptscope, which can also make it work for local files or special pages. The domain name for files will be "file" and for special pages just "special" will be used. The term userscript was not merely chosen because these are scripts by the user, but because there is an existing system for making the scripts and loading them into other browsers with the same name. These scripts are usually run with extensions (like GreaseMonkey or ViolentMonkey), but Vieb has built-in support for running them (though you need to manually install them to a different location). You can find these userscripts on sites like greasyfork.org. After downloading them, you need to make a js file in one of two locations for it to be run as a GreaseMonkey userscript: These files differ from regular JavaScript in that there is a header that specifies information about the script, but also that there is a broader API to use besides the regular browser API. In Vieb, most of these APIs are supported, with the major exceptions being: resources, external requires, registering menu commands and downloading files. Unlike regular JS files that you can run per domain or globally, these GreaseMonkey userscripts define which pages they run on inside the file header, and as such are not affected by userscriptscope. It's recommend to observe the source code manually for all scripts you install or include into Vieb, as these scripts get full access to any page if userscript is enabled. For more information about the API and these type of userscripts, see wikipedia and the ViolentMonkey docs.

userscriptscope

Controls which pages should be affected by userscript. By default, only external sites will use userscript if you enable it, using "page" in the list. If you want to have userscript on special pages, add "special" to the list. Finally, for other local files you can add "file" to the list. Adding all three means userscript will load on all pages you visit (if enabled at all with userscript).

userstyle

The userstyle setting can be used to add custom CSS to any page you visit. Unlike with colorscheme which is used for Vieb's interface and the special pages, userstyle is by default used on other pages and websites. This can be done using a wide ranges of different CSS files, with four fixed locations and 2 global folders: They are applied in the listed order, with files in a folder being read in alphabetic order. These files can each contain all the CSS rules you want to add either to all sites with "global" configs, or to all sites of a specific domain, using the per-domain config files. This setting merely toggles if these userstyle files should be read at all, which is by default not the case. Updating this setting will reload the userstyles across all pages automatically, no need to reload the page yourself. The files are not watched, so editing these files without updating this setting will need a page reload, or you can do :set userstyle at anytime to refresh them. You can change which pages are affected by userstyle by changing userstylescope, which can also make it work for local files or special pages. The domain name for files will be "file" and for special pages just "special" will be used. Userstyle can be used for much more than just colors, you can control scroll behavior with scroll-behavior CSS rules, or hide the scrollbar by adding "::-webkit-scrollbar {display: none;}" to any of the files above. This particular example can also be automatically added to pages with the guiscrollbar setting, without requiring you to have enabled userstyle. In addition to creating custom userstyle CSS files, you could also make sure that nativetheme is reporting the correct theme.

userstylescope

Controls which pages should be affected by userstyle. By default, only external sites will use userstyle if you enable it, using "page" in the list. If you want to have userstyle on special pages, add "special" to the list. Finally, for other local files you can add "file" to the list. Adding all three means userstyle will load on all pages you visit (if enabled at all with userstyle).

vimcommand

With this setting, you can configure the command that will be used as the editor when invoking action.editWithVim. You can use it to edit input fields or textareas with any external editor. For compatibility across systems, this setting is by default set to "gvim". You can change it to use the terminal version of Vim, for example with gnome-terminal: set vimcommand="gnome-terminal -- vim". This setting can be set to any command, including an external prose/spellchecker, as long as it accepts a filename as an argument. The input field will be automatically updated based on any changes made to the file. By default, you will only be notified if the command fails, see notificationforsystemcommands for details. To change the shell this and other commands will use, see the shell setting.

windowtitle

The windowtitle setting can be used to change Vieb's window title to whatever you want. The title can be set to any string, optionally filled in with the page url, page title, app name and app version. You can do this by using any of these variables inside your string: "%url", "%title", "%app" or "%version". Even though Vieb does not show the window title by default (unless you use the --window-frame option), it can for example be used to connect to external password managers and can also be seen when listing open applications on your computer (usually with Alt-Tab or similar).

Actions

Actions refer to built-in Vieb functionally that can be executed when you press the right keys. The keys you need to press for an action to execute are listed just below action name. These keys are updated dynamically based on your changes with the :map command. Some actions can be repeated x amount of times, by typing a number before pressing the right keys. These type of actions are marked the "countable" badge. This behavior is only present in normal mode, pointer mode and visual mode. Action names are case-insensitive when part of mappings and will be corrected to their proper name when you don't include the right casing yourself. For regular actions, it's also possible to omit the action. prefix when using any kind of command or mapping. Finally, you can replace the pointer. or action. prefix with the shorter p. and a.. It's always required to wrap the action between <> characters. For example, action.toNormalMode can be written in any of the following ways when creating a mapping:
<action.toNormalMode>
<a.toNORMALmode>
<tonormalmode>
You can always distinguish this from commands, because those are always prefixed with ":" when they are invoked with this syntax.

Normal mode

Normal mode is the main and default mode of Vieb and Vim, where most of the actions are mapped by default. Since it serves no special function, the entire keyboard can be used to do all kinds of different actions. There are no actions specific to normal mode, but almost all actions not listed under other modes can be used in it.

action.toNormalMode

Switch back to normal mode. Similar to other mode switch actions, it has no effect when the mode is already the current one. Normal mode is the only mode without a dedicated special function, which is precisely why it's the default mode. From this mode, you have the option to move to most other modes, but also execute a lot of single key actions. For the full list of options, go to command mode and execute :nmap!. This will list all normal mode mappings including defaults.

Command mode

In command mode you can enter commands to execute at runtime. See the commands chapter for more details.

action.toCommandMode

Switch to command mode. After entering a command while in command mode, call action.useEnteredData to execute the command, or switch to any other mode to cancel. See commands for a list of commands. See suggestcommands to configure the number of suggestions shown, which you can switch to using action.nextSuggestion and action.prevSuggestion. You can also view previously executed commands with action.commandHistoryNext and action.commandHistoryPrevious, which you can configure using commandhist.

action.commandHistoryPrevious

Go back to previously executed commands of this session, by calling this action. Unlike the suggestions, these actions do not wrap back to the first or last when the end of the history is reached. Opposite of action.commandHistoryNext. This action has no function outside of command mode. You can change which commands are stored in the history using commandhist.

action.commandHistoryNext

Go forward in history when viewing a previously executed command. If there are no more historic commands, it will restore the text that was typed before going back in history. Opposite of action.commandHistoryPrevious. This action has no function outside of command mode. You can change which commands are stored in the history using commandhist.

Explore mode

In explore mode you can enter a new location to navigate to.

action.toExploreMode

Switch to explore mode, which can be used to navigate to websites or search using the searchengine setting. After entering a url or search while in explore mode, call action.useEnteredData to navigate to the entered url or search, or switch to any other mode to cancel. You can change the suggestions with the suggestorder setting. The bar will color depending on your entered data: You can switch to previous navigations using action.exploreHistoryPrevious and action.exploreHistoryNext, which you can configure with the explorehist setting. Finally, it's possible to use the suggestions with action.nextSuggestion, action.nextSuggestionSection, action.prevSuggestion and action.prevSuggestionSection, which you can control with the suggestorder setting.

action.nextSuggestion

Move to the next suggestion shown while in explore mode or command mode. If no suggestion is selected yet, this action will select the first suggestion. If this action is called while the last suggestion is already focused, no suggestion will be selected and your original text will be restored in the navbar. Opposite of action.prevSuggestion.

action.prevSuggestion

Move to the previous suggestion shown while in explore mode or command mode. If no suggestion is selected yet, this action will select the last suggestion. If this action is called while the first suggestion is already focused, no suggestion will be selected and your original text will be restored in the navbar. Opposite of action.nextSuggestion.

action.nextSuggestionSection

Move to the next suggestion section shown while in explore mode. It will select the first entry of a specific type in the results, in other words, move between sections. If no suggestion is selected yet, this action will select the first suggestion. If this action is called while the last suggestion is already focused, no suggestion will be selected and your original text will be restored in the navbar. You can customize which different type of suggestions should appear with suggestorder. Opposite of action.prevSuggestionSection.

action.prevSuggestionSection

Move to the previous suggestion section shown while in explore mode. It will select the first entry of a specific type in the results. If already in the last section, you will move back to the original text. Opposite of action.nextSuggestionSection.

action.exploreHistoryPrevious

Go back to previously navigated website of this session, by calling this action. It is different from action.reopenTab, because this will store the sites you explicitly navigated to, instead of only the pages you closed, which can be different if you navigated in a tab or if you opened it without explore mode. Unlike suggestorder, these actions do not wrap back to the first or last when the end of the history is reached. Opposite of action.exploreHistoryNext. This action has no function outside of explore mode. You can change which navigations are stored in the history using explorehist.

action.exploreHistoryNext

Go forward in history when viewing previously navigated websites. If there are no more historic sites, it will restore the text that was typed before going back in history. Opposite of action.exploreHistoryPrevious. This action has no function outside of explore mode. You can change which navigations are stored in the history using explorehist.

action.useEnteredData

After entering a search, command or url, use this action to use the entered data. For explore mode, this will navigate to the page provided, or append the entered text to the searchengine setting. For command mode, the command will be executed. For search mode, the entered string will be searched for on the current page and matches will be highlighted. This action will always go back the normal mode after it's done. If this action is called from explore mode, the resulting url will be stored for recovery using action.exploreHistoryPrevious. The same is done for commands using action.commandHistoryPrevious. The search mode is for finding text in the page.

action.toSearchMode

Switch to search mode, which can be used to search for any string (patterns are not supported). By default, searches are case-insensitive when lowercase, and case sensitive when they contain any capital letter, see the smartcase setting for details. When you turn that off, you can control case sensitivity directly with ignorecase. After entering a search string while in search mode, call action.useEnteredData to start the search, or switch to any other mode to cancel. If you actually apply a search, it will remember search order, which can be made backwards if you start search mode with a shifted or ctrl modified key (by default "?"). You can reset the search order by using unshifted keys to open the mode and do a search. Subsequent searches of the same string will find the next match. If the incsearch setting is enabled, the search is performed incrementally while typing. When back in normal mode, use action.nextSearchMatch and action.previousSearchMatch to navigate between matches. See also action.clickOnSearch, :nohlsearch, searchpointeralignment, searchemptyscope, searchscope and action.emptySearch.

action.emptySearch

After searching for a string, you can call this action to clear the current search and remove the highlighting. This action is called when you supply an empty search. Unlike vim, this action will not remember previous searches.

action.clickOnSearch

After searching for a string, call this action to execute a simulated mouse click at the current match. You can navigate to other matches with action.nextSearchMatch and action.previousSearchMatch.

action.nextSearchMatch

After searching for a string with search mode, use this action to move the focus to the next search match. If the last match is reached and this action is called, the first one will be shown (it will wrap). You can disable the highlighting with :nohlsearch or remove the search completely with action.emptySearch. The opposite action.previousSearchMatch can be switched around if you started search mode was started in backwards mode with a shifted key such as "?". When this action is called from pointer mode, the pointer will move to the next search match. You can configure where exactly inside the highlighted area the pointer should jump to with searchpointeralignment, which by default aligns to the left. This action is not recommended from visual mode however, as the search highlighting will conflict with the visual mode selection.

action.previousSearchMatch

Opposite of action.nextSearchMatch. Can also search forward if backwards searching was done by starting search mode with a shifted key such as "?".

Insert mode

With insert mode you get back all regular webpage interaction, mostly for typing text.

action.toInsertMode

Switch to insert mode. This will allow keyboard input to be redirected to the website. Keys that are mapped to actions won't be registered by the website, such as Escape by default, see Nop for details about controlling side effects. To disable mouse interaction inside of insert mode, see the "pageininsert" feature of the mouse setting, similarly you can also disable the page interaction outside of insert using :set mouse-=pageoutsideinsert. insert mode will automatically be entered when an input field is picked in follow mode. By default mouse clicks and selections on input fields will also move you to insert mode, which can be controlled with the "toinsert" feature of the mouse setting. When typing inside insert mode, useful action are action.menuOpen and action.editWithVim. If you want to leave insert mode with a key and also send it to the page before leaving, you can so something like this: :inoremap <CR> <CR><toNormalMode>.

action.insertAtFirstInput

This action will enter insert mode and focus the first input field on the page. Usually this will be a search field or dropdown. If no input fields are currently visible, this action will not enter insert mode.

action.editWithVim

Open an external editor based on the currently focused input field or the navbar. This is one of the few actions that is supposed to be called while in insert mode, but it can also be called from typing modes that use the navbar: explore mode, search mode and command mode. The editor that will be opened is configured by the vimcommand setting, and can also be set to a different editor if you would like to. The input fields on the page can even be updated by saving the file long after you have left insert mode, as long as the page isn't reloaded and the input field is there. The navbar can be updated by saving the file as long as you are in one the three modes that accept user typed text mentioned above.

Follow mode

With follow mode you can click on elements on the page, or move the pointer to a specific element on the page. It will highlight a range of different elements, which depend on the way it's started and on which elements you have enabled with followelement and followelementpointer. All elements will be given a set of characters that you can type out to select it. Which characters are used to select elements is controlled by followchars. If a character is not used to select elements it will by default be used to filter/search elements on the page based on text or url, but this can be changed using followfallbackaction. You can also change the position of the character label using followlabelposition. In the next paragraphs the different types of follow mode are explained.

action.startFollowCurrentTab

Switch to follow mode and start highlighting clickable elements. This version of follow mode will execute a mouse click on the element once picked. See action.startFollowNewTab to open links in a new tab, or action.startFollowNewSplit and action.startFollowNewVerSplit to open them in new splits. For regular follow mode, to remain in follow mode after clicking on a link, hold Shift while pressing the appropriate key. While in follow mode, all clickable elements will be assigned a key (and sometimes two) that you can press to click on that element. You don't need to hold Shift, unless you want to stay in follow mode after clicking it. It is also possible to start follow mode from a different mode than normal mode, such as pointer mode or visual mode, in which case the pointer will be moved to the location of the element you picked. These are the different type of elements that will be detected: By default they will appear in this order listed, but you can reorder them with action.reorderFollowLinks. The elements this action will highlight can be filtered using the followelement setting. You can do this separately for pointer mode using followelementpointer.

action.startFollowNewTab

Switch to follow mode and start highlighting links with valid urls. This version of follow mode will open the url of the link in a new tab once picked. Use follownewtabswitch to configure if Vieb should switch to the newly opened tab. To stay in follow mode and prevent switching to the newly opened tab, hold Shift while picking the appropriate key, which will allow multiple tabs to be opened before switching to them or leaving follow mode. The setting only changes the behavior when not holding Shift. For the regular follow mode, see action.startFollowCurrentTab to click on any clickable element on the current page.

action.startFollowNewSplit

Switch to follow mode and start highlighting links with valid urls. This version of follow mode will open the url of the link in a new horizontal split once picked. You will always switch to the new split, and won't be able to remain in follow mode even if you hold Shift. Settings like containersplitpage and splitbelow apply like you would expect. You can also action.startFollowNewVerSplit to open vertical splits instead of horizontal ones.

action.startFollowNewVerSplit

Similar to the other split version of follow mode action.startFollowNewSplit, but uses vertical splits instead of horizontal ones. As expected, this means that the related settings are splitright and containersplitpage. Switch to follow mode and start highlighting clickable elements. This version of follow mode will copy link of the selected element.

action.stopFollowMode

Stop follow mode and go back to the previously active mode, which is not always normal mode. This is one of the actions that is automatically called after you have picked a link in follow mode, unless you held Shift in the regular or new tab version of follow mode. With this action, the different type of follow mode elements will be reordered based on type. You can keep executing this action to keep cycling the order. For example, links are by default shown above input elements, but this action can reorder them to be shown below them. The six main types are cycled with this action, elements in the "other" category are always shown below the main six types.

Scrolling

These actions are related to scrolling. There are two different methods to scroll the page in Vieb: The second category of scroll actions are prefixed with "pointer." instead of "action.", because they are used in combination with pointer mode. It's entirely possible to call these pointer actions outside of pointer mode or visual mode, but the actions are still executed at the pointer location, even if it's not visible. Another difference between these different scroll methods, is that only the pointer mode actions have smooth scrolling. You can also control smooth scrolling on pages by adding scroll-behavior CSS rules to your own custom userstyle. For the pointer scroll actions, see the pointer mode paragraph. Below are all the regular scrolling actions, which will scroll the entire page if possible.

action.scrollTop

Scroll to the absolute top of the page. If given a count, it will scroll to a percentage of the page instead, for example: "25gg" will scroll to 25% of the page, similar to jumping to lines in Vim. A count above or equal to 100 will scroll to the bottom of the page.

action.scrollBottom

Scroll to the absolute bottom of the page. If given a count, it will scroll to a percentage of the page instead, for example: "75G" will scroll to 75% of the page, similar to jumping to lines in Vim. A count above or equal to 100 will scroll to the bottom of the page.

action.scrollRightMax

Scroll to the absolute right of the page.

action.scrollLeftMax

Scroll to the absolute left of the page.

action.scrollUp

Scroll 100 pixels up.

action.scrollDown

Scroll 100 pixels down.

action.scrollLeft

Scroll 100 pixels to the left.

action.scrollRight

Scroll 100 pixels to the right.

action.scrollPageUp

Scroll an entire page up, equal to the window height minus a margin.

action.scrollPageDown

Scroll an entire page down, equal to the window height minus a margin.

action.scrollPageLeft

Scroll an entire page to the left, equal to the window width minus a margin.

action.scrollPageRight

Scroll an entire page to the right, equal to the window width minus a margin.

action.scrollPageUpHalf

Scroll half of a page up, equal to half the window height minus a small margin.

action.scrollPageDownHalf

Scroll half of a page down, equal to half the window height minus a small margin. These actions are related to navigation, such as refreshing or managing tabs.

action.refreshTab

Reload the current tab by refreshing the page. If cache is not disabled with the cache setting, this type of refresh will attempt to load most things from cache. See action.refreshTabWithoutCache to refresh without caching. If caching is disabled by the cache setting, the two actions are identical. This action can also be used to recreate a crashed tab.

action.refreshTabWithoutCache

Reload the current tab by refreshing the page without using the cache. This action is identical to action.refreshTab if the cache setting is set to 'none'. This action can also be used to recreate a crashed tab.

action.stopLoadingPage

Stop loading the current page. This has effect on all active requests for the current tab, but does not prevent the page from making subsequent fetch or xhttp requests. Other tabs are also unaffected.

action.openNewTabWithCurrentUrl

Open a new tab with the newtab page, after which you will enter explore mode with the url of the current page pre-filled. This can be used to quickly open another page with a similar url, that is not linked on the current page. Another advantage is that this action will not use the system clipboard to copy the url.

action.openFromClipboard

Navigate to the page that is currently stored on the clipboard. The current tab will be used for the navigation, unless you open a new tab first (see the default mapping for that). The navigation follows the same logic as regular navigation from explore mode, which means that text that is not a url will be searched with the searchengine setting. It's also possible to copy the url of the current page to the clipboard with action.pageToClipboard.

action.reopenTab

Reopen a previously closed tab as a new tab. Can be toggled with keeprecentlyclosed. Opposite of :close. You can change the position of the reopened tab with tabreopenposition.

action.nextTab

Navigate to the next tab (to the right) in the tabbar. You can wrap back to the first tab if tabcycle is not disabled. Opposite of action.previousTab.

action.previousTab

Navigate to the previous tab (to the left) in the tabbar. Opposite of action.nextTab.

action.moveTabForward

Move the current tab forward in the tabbar (to the right). This action does not switch between pages, but merely changes the order of appearance in the tabbar. This action will not cross the separation between pinned and regular tabs. Opposite of action.moveTabBackward. See action.nextTab to actually switch between the tabs.

action.moveTabBackward

Move the current tab backward in the tabbar (to the left). Opposite of action.moveTabForward.

action.moveTabEnd

Move the current tab forward to the end of the tabbar (to the right), or make it the most right pinned tab (if already pinned). This action does not switch between pages, but merely changes the order of appearance in the tabbar. For moving just a single spot to the right, see action.moveTabBackward.

action.moveTabStart

Move the current tab backward in the end of the tabbar (to the left). Opposite of action.moveTabEnd.

action.backInHistory

Navigate to the previous page you visited in the current tab. The first page of the tab history will always be the newtab page. Opposite of action.forwardInHistory.

action.forwardInHistory

Opposite of action.backInHistory.

action.zoomReset

Reset the zoom percentage of the current page to the default level of 100%. The zoom percentage is remembered across sessions per domain. See action.zoomIn and action.zoomOut to change the zoom percentage.

action.zoomIn

Increase the zoom percentage. The zoom percentage is increased by 10% every time this action is called, up to a maximum of 500%. Opposite of action.zoomOut. Use action.zoomReset to go back to 100%.

action.zoomOut

Decrease the zoom percentage. The zoom percentage is decreased by 10% every time this action is called, down to a minimum of 25%. Opposite of action.zoomIn. Use action.zoomReset to go back to 100%.

action.toggleSourceViewer

With this action you can toggle Vieb's source viewer for the current page in the current tab. It will update the url to "sourceviewer://", and will revert back to original page if currently viewing the source of a page. The source viewer has syntax highlighting, and can also be used to view other types of files with highlighting.

action.toggleSourceViewerNewTab

This action works similar to action.toggleSourceViewer, but it opens the source viewer in a new tab instead of the current page. If you are currently viewing the source of a document, this action is identical to toggleSourceViewer and will revert the current tab back to the original page.

action.toggleMarkdownViewer

With this action you can toggle Vieb's Markdown viewer for the current page. It will update the url to "markdownviewer://", and will revert back to the original page if currently viewing the Markdown formatted version of a page. The Markdown viewer supports local files, but not all images due to CSP limitations. Markdown is a text-based markup language to created formatted text, but you can open the Markdown viewer for any page to try and parse it as such.

action.toggleMarkdownViewerNewTab

This action works similar to action.toggleMarkdownViewer, but it opens the Markdown viewer in a new tab instead of the current page. If you are currently viewing the Markdown viewer of a document, this action is identical to toggleMarkdownViewer and will revert the current tab back to the original page.

action.toggleReaderView

With this action you can toggle Vieb's reader view for the current page in the current tab. It will update the url to "readerview://", and will revert back to original page if currently viewing the reader view of a page. The reader view is a concise and minimal view of the relevant page contents.

action.toggleReaderViewNewTab

This action works similar to action.toggleReaderView, but it opens the reader view in a new tab instead of the current page. If you are currently viewing the reader view of a document, this action is identical to toggleReaderView and will revert the current tab back to the original page.

Url modifications

These actions can be used to make quick edits to the current page url. These vary from increasing port numbers to stripping subdomains. If any of these actions fail to find the part they are trying to modify, they won't update the url and the page won't be reloaded.

action.nextPage

Search for pagination indicators in the page and use them to go to the next page. Due to its dependence on the page to provide the indicators, it's the only page increment action that isn't countable. Opposite of action.previousPage.

action.previousPage

Search for pagination indicators in the page and use them to go to the previous page. Opposite of action.nextPage.

action.nextPageNewTab

Search for pagination indicators in the page and use them to open a new tab of the next page url. Works similar to action.nextPage, but opens the next page in a new tab instead of the current. Opposite of action.previousPageNewTab.

action.previousPageNewTab

Search for pagination indicators in the page and use them to open a new tab of previous next page url. Opposite of action.nextPageNewTab.

action.increasePageNumber

Increase the page number if present in the url. It will search inside the url hash for "p" and "page" query parameters that have a number argument. If you encounter a lot of pages that use different parameters to indicate pages, consider using action.nextPage, or if that fails use action.increaseFirstNumber or action.increaseLastNumber. Opposite of action.decreasePageNumber.

action.decreasePageNumber

Decrease the page number if present in the url. See the oppposite action named action.increasePageNumber for more details.

action.increasePortNumber

Increase the port number of the url, or the default port number of the protocol. Increases only if the current port number is below 65535, as it will respect the limits of port numbers that can be navigated to with a browser: it won't go below 11 or above 65535 (this is the same range of ports recognized as valid in explore mode). Hidden port numbers are still used, such as "80" for "http" and "443" for "https". Opposite of action.decreasePortNumber.

action.decreasePortNumber

Decrease the port number of the url, or the default port number of the protocol. Decreases only if the current port number is higher than 11. See the opposite action named action.increasePortNumber for more details.

action.increaseFirstNumber

Increases the first number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of action.decreaseFirstNumber.

action.decreaseFirstNumber

Decreases the first number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of action.increaseFirstNumber.

action.increaseLastNumber

Increases the last number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of action.decreaseLastNumber.

action.decreaseLastNumber

Decreases the last number in the url, regardless where it appears. By default unmapped due to its limited use compared to the other url actions. Opposite of action.increaseLastNumber.

action.toParentUrl

Removes a single level/directory in the url which are separated by the slash "/" character, to go up a level on the website. Will stop at the root of a domain. For example, this will change "https://github.com/Jelmerro/Vieb" to "https://github.com/Jelmerro/".

action.toRootUrl

Removes all levels/directories in the url which are separated by the slash "/" character, to go to the root of a website. For example, this will change "https://github.com/Jelmerro/Vieb" to "https://github.com/".

action.toParentSubdomain

Removes a single subdomain from the url which are separated by a dot "." character. For example, this will change "https://www.foo.bar.example.com" to "https://www.bar.example.com". The "www." part is kept if other subdomains are present, but if it's the only subdomain present, it will be removed as well, so "https://www.example.com" becomes "https://example.com" when this action is called again.

action.toRootSubdomain

Removes all subdomains from the url which are separated by a dot "." character. For example, this will change "https://www.foo.bar.example.com" to "https://www.example.com". The "www." part is kept if other subdomains are present, but if it's the only subdomain present, it will be removed as well, so "https://www.example.com" becomes "https://example.com" when this action is called again. It's for this reason that this action is countable, but calling it more than two times subsequently won't do anything.

Splitting

Vieb supports window splitting, which means you can view multiple sites next to each other. There is no technical limit to how many sites you can split, and splitting works the same as in Vim. To open a new split, see :Vexplore or :split. Once you have multiple windows visible, you can switch between them by switching between tabs, or using the more Vim-like window split actions, which are listed below. You may also use the :buffer command to switch directly to tabs by index or name.

action.rotateSplitWindowForward

Rotate the windows of the current split clockwise. Unlike Vim, you can rotate splits, even if they have subsplits. Opposite of action.rotateSplitWindowBackward.

action.rotateSplitWindowBackward

Rotate the windows of the current split counter-clockwise. Unlike Vim, you can rotate splits, even if they have subsplits. Opposite of action.rotateSplitWindowForward.

action.leftHalfSplitWindow

Move the currently focused split window to the left half of the screen. This effectively moves the split to the left of a toplevel vertical split, regardless of its current position on the screen. Similar actions for the other directions are action.bottomHalfSplitWindow, action.topHalfSplitWindow and action.rightHalfSplitWindow.

action.bottomHalfSplitWindow

Move the currently focused split window to the bottom half of the screen. See action.leftHalfSplitWindow for more details.

action.topHalfSplitWindow

Move the currently focused split window to the top half of the screen. See action.leftHalfSplitWindow for more details.

action.rightHalfSplitWindow

Move the currently focused split window to the right half of the screen. See action.leftHalfSplitWindow for more details.

action.toLeftSplitWindow

Switch the focus to the window directly left of the currently focused one. If there are multiple windows directly to the left of the current split, the one closest to the center of the current split is chosen. Similar actions for the other directions are action.toBottomSplitWindow, action.toTopSplitWindow and action.toRightSplitWindow.

action.toBottomSplitWindow

Switch the focus to the window directly below the currently focused one. See action.toLeftSplitWindow for more details.

action.toTopSplitWindow

Switch the focus to the window directly above the currently focused one. See action.toLeftSplitWindow for more details.

action.toRightSplitWindow

Switch the focus to the window directly right of the currently focused one. See action.toLeftSplitWindow for more details.

action.toFirstSplitWindow

Switch the focus to the most top-left window split. The first split is always the most top-left one, regardless of tab order. Opposite of action.toLastSplitWindow.

action.toLastSplitWindow

Switch the focus to the most bottom-right window split. The last split is always the most bottom-right one, regardless of tab order. Opposite of action.toFirstSplitWindow.

action.toNextSplitWindow

Switch the focus to the next window split in appearance order. Splits are ordered from top to bottom and left to right. When the most bottom-right split is focused when executing this action, the top-left split will be focused. Opposite of action.toPreviousSplitWindow.

action.toPreviousSplitWindow

Switch the focus to the previous window split in appearance order. Splits are ordered from top to bottom and left to right. When the most top-left split is focused when executing this action, the bottom-right split will be focused. Opposite of action.toNextSplitWindow.

action.exchangeSplitWindow

With this action you can exchange the current window with the next one. It is different from merely reordering them, in that it keeps the focus at the current position. For example, if you have a large split on the left, and a small one on the right, with the one on the left being focused, this action will keep the focus on the left split, but exchange the contents of it with the next split. In other words, the big split on the left will have the page that was previously on the right of it and vice versa. It will always switch the current one with the next one, and the focus will remain on the position of the current one. If you execute this action on the last split, it will exchange with the one just before it and keep the focus on the last one. Although countable, the action will simply revert itself if called a second time (or any even amount of times).

action.increaseHeightSplitWindow

Increase the height of the current split window by 10% up to a maximum ratio compared to its siblings of 1 to 10. Similar actions to resize into other directions are action.decreaseHeightSplitWindow, action.increaseWidthSplitWindow and action.decreaseWidthSplitWindow.

action.decreaseHeightSplitWindow

Decrease the height of the current split window by 10%. See action.increaseHeightSplitWindow.

action.increaseWidthSplitWindow

Increase the width of the current split window by 10%. See action.increaseHeightSplitWindow.

action.decreaseWidthSplitWindow

Decrease the width of the current split window by 10%. See action.increaseHeightSplitWindow.

action.distrubuteSpaceSplitWindow

Distribute the windows inside a split evenly. This does not necessarily mean that all windows will be of the same size, for example if you have a vertical split, with on the left side a window, but on the right side a horizontal sub-split with two windows.

Pointer

Vieb has a pointer mode to hover over links, download images or inspect an element at a position. The pointer can be moved in many different ways, most of which are by default mapped similar to Vim's normal mode. Additionally, after entering pointer mode, it's also possible to start selecting text using visual mode. By default, the mappings of these two modes are similar, with the biggest difference being that text will be selected between the initial and current pointer position. See pointer.startVisualSelect to activate visual mode and pointer.copyText to copy the hovered link or selected text. Other text related actions are also available, such as opening the text in a new tab (either as a url or a search) using pointer.newtabText.

pointer.start

Switch to pointer mode, which enables a movable pointer. The pointer can be used to hover over links, download images or inspect an element at a position. It can be moved in many different ways, most of which are by default mapped similar to Vim's normal mode.

pointer.moveToMouse

Move the pointer to the location of your mouse cursor. Will switch to pointer mode if needed. If already in pointer mode or visual mode, the current mode remains and it will simple move the pointer to the mouse location. Unlike other mouse related actions, this action does not require any mouse features to be enabled.

pointer.leftClick

Simulate a left mouse click at the current pointer location. See also pointer.rightClick.

pointer.rightClick

Execute a right mouse click at the pointer position. This will open any kind of menu that the website has implemented, or open Vieb's built-in menu if menupage is enabled.

pointer.inspectElement

Inspect an element at the current pointer position. This action will open a devtools window if the devtools are not opened yet. The devtoolsposition is not used when inspecting an element, as it will open a devtools window. If you want to open the devtools differently, please open the devtools with the :devtools command first. The "inspectElement" action will use the existing devtools to inspect the element in.

pointer.insertAtPosition

Enter insert mode at the pointer position. This can be used to click and immediately set focus to the element at a position, similar to an actual mouse click. Contrary to pointer.leftClick, this type of click has a better chance to work for poorly programmed dropdowns and/or custom menus on websites: the ones that open with a click, but close automatically when focus is lost. Some Google websites use these type of inconsistent menus.

pointer.moveUp

Move the pointer up by 10 pixels, will scroll the page if needed.

pointer.moveDown

Move the pointer down by 10 pixels, will scroll the page if needed.

pointer.moveLeft

Move the pointer left by 10 pixels, will scroll the page if needed.

pointer.moveRight

Move the pointer right by 10 pixels, will scroll the page if needed.

pointer.moveSlowUp

Move the pointer up by 1 pixel, will not scroll the page.

pointer.moveSlowDown

Move the pointer down by 1 pixel, will not scroll the page.

pointer.moveSlowLeft

Move the pointer left by 1 pixel, will not scroll the page.

pointer.moveSlowRight

Move the pointer right by 1 pixel, will not scroll the page.

pointer.moveFastUp

Move the pointer up by 100 pixels, will scroll the page if needed.

pointer.moveFastDown

Move the pointer down by 100 pixels, will scroll the page if needed.

pointer.moveFastLeft

Move the pointer left by 100 pixels, will scroll the page if needed.

pointer.moveFastRight

Move the pointer right by 100 pixels, will scroll the page if needed.

pointer.moveLeftMax

Move the pointer all the way to the left of the current screen.

pointer.moveRightMax

Move the pointer all the way to the right of the current screen.

pointer.scrollUp

Scroll 100 pixels up at the current pointer position, without changing the pointer position. See scrolling for more details.

pointer.scrollDown

Scroll 100 pixels down at the current pointer position, without changing the pointer position. See scrolling for more details.

pointer.scrollLeft

Scroll 100 pixels left at the current pointer position, without changing the pointer position. See scrolling for more details.

pointer.scrollRight

Scroll 100 pixels right at the current pointer position, without changing the pointer position. See scrolling for more details.

pointer.startOfView

Move the pointer to the top of the screen vertically, without scrolling the page in any way. See also pointer.centerOfView and pointer.endOfView. To do the same but with scrolling, see pointer.startOfPage.

pointer.centerOfView

Move the pointer to the center of the screen vertically. This action does not scroll the page in any way. See also pointer.startOfView and pointer.endOfView.

pointer.endOfView

Move the pointer to the bottom of the screen vertically, without scrolling the page in any way. See also pointer.centerOfView and pointer.startOfView. To do the same but with scrolling, see pointer.endOfPage.

pointer.startOfPage

Scroll the page to the top and move the pointer to the top of the screen vertically. To do the same without scrolling, see pointer.startOfView.

pointer.endOfPage

Scroll the page to the bottom and move the pointer to the bottom of the screen vertically. To do the same without scrolling, see pointer.endOfView.

Visual

Switching to visual mode will start making a selection starting at the current pointer position. In this mode the pointer is still visible, but once the pointer is moved again, all text between the original and current location will be selected. To copy the selected text, see pointer.copyText. Most movement options in visual mode are identical to those in pointer mode by default. You can also select text with the mouse, after which you can copy it with the menu or with the actions below. You can control if mouse selections should change the visual mode selection, or even switch modes, using the mousevisualmode setting.

pointer.startVisualSelect

Switches to visual mode, mostly useful when called from pointer mode, but can be called from other modes directly if a mapping is added for it.

pointer.restoreSelection

Starts visual mode and restore the selection from the last time visual mode was open. Can be called from any mode if desired, as you will switch modes with this action, during which the selection is restored.

pointer.swapPosition

Using this action you can switch to the other end of the selection while in visual mode. It has no effect when called from other modes, as there is no other position to swap the pointer to. You can switch back and forth between the start and end position with this action as many times as you want to.

pointer.copyText

This action will copy the currently selected text to the system clipboard.

pointer.downloadText

Attempts to download the selected text as if it were a url, if it's not, this action might not succeed in starting a download.

pointer.externalText

Attempts to open the selected text as if it were a url with external applications. The command that will be executed is based on the externalcommand setting, appended with the selected text.

pointer.newtabText

Open the selected text in a new tab. If it's a url, it's opened as is. Other types of text are searched for using the default searchengine.

pointer.openText

Open the selected text in the current tab. If it's a url, it's directly navigated to. Other types of text are searched for using the default searchengine.

pointer.searchText

Search the selected text in the current page as if the selected text was typed into search mode.

pointer.splitText

Open the selected text in a new split, similar to using the :split command to do so. If it's a url, it's directly navigated to. Other types of text are searched for using the default searchengine.

pointer.vsplitText

Open the selected text in a new vertical split, similar to using the :vsplit command to do so. If it's a url, it's directly navigated to. Other types of text are searched for using the default searchengine. Most of these link related actions are actions for pointer mode and some are suited for normal mode. The default pointer mode mappings might seem a bit overwhelming, but they are based on the following pattern: "o" for open, "t" for newtab, "y" for yank, "d" for download, "x" for external, "S" for splits and "V" for vsplit/vertical splits. These keys are then combined with the type of link or media like so: "a" for audio", "v" for video, "l" for links, "f" for frames and "i" for images. Actions for urls are by also mapped to the same key twice by default, such as "dd" or "yy". Almost all pointer actions listed in this paragraph are identical to the options available in the context menu, so you can also use that if these link-related actions seem complex. Opening the menu is done with action.menuOpen, or using the mouse if the menu features are not disabled. Some of the normal mode actions listed here can instead be used to copy the page url in special ways, such as formatted as HTML or Markdown. Keep in mind that all copy and external link-related actions will be encoded or decoded based on the values of the encodeurlcopy and encodeurlext settings.

action.openLinkExternal

Using this action you can open links with external applications. The command that will be executed is based on the externalcommand setting, appended with the current page url. See pointer.externalLink to do the same for the link at the current pointer position.

action.pageToClipboard

With this action you can copy the url of the current page to the system clipboard. You can paste it anywhere else, but also use it in Vieb directly using action.openFromClipboard. If you want to copy a url on the page instead, see pointer.copyLink. You can also copy the page title with action.pageTitleToClipboard, or copy the link formatted for pasting inside Emacs, HTML, RST or Markdown, using action.pageToClipboardEmacs, action.pageToClipboardHTML, action.pageToClipboardRST or action.pageToClipboardMarkdown respectively. Finally, you can also copy the page title of a hovered link to the clipboard if stored in the local history using pointer.copyPageTitle.

action.pageTitleToClipboard

Copy the title of the current page to the system clipboard. Can for example be combined with other actions to search for the current page title. See also pointer.copyPageTitle to copy the page title of hovered links while in pointer mode.

action.pageToClipboardHTML

Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in an HTML document, like so: <a href="URL">TITLE</a>.

action.pageToClipboardEmacs

Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in an Org Emacs document, like so: [[LINK][TITLE]].

action.pageToClipboardRST

Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in an RST document, like so: `TITLE <URL>`_.

action.pageToClipboardMarkdown

Copy the page title and url of the current page to the clipboard, but formatted as can be pasted in a Markdown document, like so: [LINK](TITLE). Downloads the current page link directly as a file. The name will be automatically set, and downloaded files will be stored in downloadpath. This is different from the :write command, which will try to save the page as a website. To download the link you are hovering with the pointer, see pointer.downloadLink. This action will give a list of RSS feed links found on the current page. Each link will be assigned a number, which can be used with action.pageRSSLinkToClipboard to copy the link by index.

action.pageRSSLinkToClipboard

Copies the page RSS link to the clipboard by index of the last pressed key (should ideally be a number), of the list returned by action.pageRSSLinksList. If the last key is not a number, it will return the first RSS feed link found. The links are transformed as configured by encodeurlcopy, like other copy actions.

pointer.copyAudio

Copy the location of the audio element at the pointer position to the system clipboard.

pointer.copyFrame

Copy the location of any frame at the pointer position to the system clipboard.

pointer.copyImage

Copy the location of an image, svg or background at the pointer position to the system clipboard. Not to be confused with pointer.copyImageBuffer for copying the image data to the clipboard as an image buffer.

pointer.copyImageBuffer

Copy the frame buffer of an image, svg or background at the pointer position to the system clipboard. In supported applications, you can paste your clipboard data directly as an image. Copy the url of the link at the pointer position to the system clipboard. To copy the current page url instead, use action.pageToClipboard.

pointer.copyVideo

Copy the location of the video element at the pointer position to the system clipboard.

pointer.copyTitleAttr

This pointer action copies the title attribute of a hovered element, as an alternative to hovering a link with the mouse. Hovering an element with the mouse will show the title, while hovering it using the pointer will not due to technical limitations. This action allows you to get access to the title attribute without using the mouse. Not to be confused with pointer.copyPageTitle, which copies the page tile for the hovered url, or with action.pageTitleToClipboard, which copies the title of the current page to the clipboard. Finally, to copy the link of the current page see action.pageToClipboard to copy the current page url and pointer.copyLink to copy the url of the hovered link.

pointer.copyPageTitle

This pointer action copies the page title of the hovered url to the clipboard. The title is fetched from the local history based on the link url, so if there is no link or no local history for the url this will not copy anything. Not to be confused with pointer.copyTitleAttr, which copies the title attribute of an element, or with action.pageTitleToClipboard, which copies the title of the current page to the clipboard. Finally, to copy the link of the current page see action.pageToClipboard to copy the current page url and pointer.copyLink to copy the url of the hovered link.

pointer.downloadAudio

Download an audio file at the pointer position.

pointer.downloadFrame

Download the frame location at the pointer position directly as a file.

pointer.downloadImage

Download an image at the pointer position. If there are multiple images at the pointer position, only the first one will be downloaded. The name will be automatically set, and downloaded files will be stored in downloadpath. This action will search specifically for img and svg tags at a position, as well as background images if no regular images are found at the location. Download the url of the link at the pointer position directly as a file. This pointer download action is different from action.downloadLink, which will download the current page url instead of the one that's hovered in pointer mode.

pointer.downloadVideo

Download a video file at the pointer position.

pointer.externalAudio

Open the location of any audio element at the pointer position with external applications. The command that will be executed is based on the externalcommand setting, appended with the audio element location.

pointer.externalFrame

Open the location of any frame element at the pointer position with external applications. The command that will be executed is based on the externalcommand setting, appended with the frame element location.

pointer.externalImage

Open the location of an image, svg or background at the pointer position with external applications. The command that will be executed is based on the externalcommand setting, appended with the image location. Open the url of the link at the pointer position with external applications. The command that will be executed is based on the externalcommand setting, appended with link location. See also action.openLinkExternal to do something similar for the current page url.

pointer.externalVideo

Open the location of any video element at the pointer position with external applications. The command that will be executed is based on the externalcommand setting, appended with the video element location.

pointer.newtabAudio

Open the audio element location at the pointer position in a new tab.

pointer.newtabFrame

Open the frame element location at the pointer position in a new tab.

pointer.newtabImage

Open the image, svg or background location at the pointer position in a new tab. Open the link location at the pointer position in a new tab.

pointer.newtabVideo

Open the video element location at the pointer position in a new tab.

pointer.openAudio

Open the audio element location at the pointer position in the current tab.

pointer.openFrame

Open the frame element location at the pointer position in the current tab.

pointer.openImage

Open the image location at the pointer position in the current tab. Open the link location at the pointer position in the current tab. This is fairly similar to navigating by clicking it with pointer.leftClick or the mouse. The biggest difference is for elements that do something special when clicked, which won't happen when using this pointer action to navigate directly to the link.

pointer.openVideo

Open the video element location at the pointer position in the current tab.

pointer.splitAudio

Open the audio element location at the pointer position in a new split.

pointer.splitFrame

Open the frame element location at the pointer position in a new split.

pointer.splitImage

Open the image, svg or background location at the pointer position in a new split. Open the link location at the pointer position in a new split.

pointer.splitVideo

Open the video element location at the pointer position in a new split.

pointer.vsplitAudio

Open the audio element location at the pointer position in a new vertical split.

pointer.vsplitFrame

Open the frame element location at the pointer position in a new vertical split.

pointer.vsplitImage

Open the image, svg or background location at the pointer position in a new vertical split. Open the link location at the pointer position in a new vertical split.

pointer.vsplitVideo

Open the video element location at the pointer position in a new vertical split. These actions relate to media such as audio or video elements. They mostly control the playback of them, as download and link-related actions have their own paragraph. There are also menu items for these actions, which will slightly change their name depending on the current states of these toggles ("Play" becomes "Pause" for example).

pointer.toggleMediaControls

With this action you can toggle the visibility of the video player controls of the browser. The website might hide them, or have a custom interface instead of these native controls, so this action allows you to toggle the visibility at will.

pointer.toggleMediaLoop

With this action you can toggle the loop property of a video or audio element. If enabled, the audio or video will start from the beginning upon reaching the end, otherwise the playback will be stopped. Most websites have their playback looping off by default, but you can enable it with this action.

pointer.toggleMediaMute

Toggle the mute state of an audio or video element. If enabled, no audio will be heard from that element. Most players show the mute state in their interface, though you can always check it using the menu.

pointer.toggleMediaPlay

Toggle playback of an audio or video element. Simply pauses if playing, and starts playing if paused. Most websites will allow you to control this more easily, but it's provided as an action in Vieb regardless.

pointer.mediaDown

Lower the volume of an audio or video element by 10%. If already at 0% volume, nothing happens. Can be counted to lower the volume faster. If the volume is zero and you call toggleMediaMute you will put it back to 100% volume, not to what the volume was before you set it to 0.

pointer.mediaUp

Raise the volume of an audio or video element by 10%. If already at 100% volume, nothing happens. Can be counted to raise the volume faster. Menu actions are for interacting with the right click context menu. You can open the menu with a right mouse click (if not disabled by mouse or menu settings), using the pointer.rightClick action (if not disabled by menu settings) or always using action.menuOpen. Most of these actions don't do anything when no contextmenu is currently opened. As such, it's recommended to only use these actions with the :mmap command. The most notable exception is action.menuOpen to open the menu. You can control, disable or enable the different menus with menupage, menusuggest and menuvieb, which if disabled prevent them from being opened with the mouse or as a side effect in pointer mode. The open action will always open the menu, though you can unmap it if that's unwanted.

action.menuOpen

With this action you can open the menu without using a right click. It can be used inside insert mode, to open a menu for the currently active element. In search mode, command mode and explore mode this will open the menu at the navbar for the current caret position or selection. In pointer mode and visual mode it will open the page context menu. In normal mode this opens the current tab menu. Action is ignored if used from follow mode without filtering or used in insert mode without a focused element.

action.menuUp

With this action you can move the selected contextmenu item up. It will select the bottom one if the top of the list is reached or no entry was previously highlighted. Opposite of action.menuDown. Items can be selected with action.menuSelect.

action.menuDown

This action moves the selected contextmenu item one down. Opposite of action.menuDown. Wrapping happens in both directions.

action.menuTop

This action moves the selected contextmenu item to the very first entry in the menu. Opposite of action.menuBottom.

action.menuBottom

This action moves the selected contextmenu item to the very last entry in the menu. Opposite of action.menuTop.

action.menuSectionDown

This action moves the selected contextmenu item to first item in the next section of the menu. If you have selected an item in the middle of a section it will also select the first one of the next section. It will select the very first menu entry when there is no next section. Opposite of action.menuSectionUp.

action.menuSectionUp

This action moves the selected contextmenu item to first item in the previous section of the menu. Opposite of action.menuSectionDown. Wrapping happens in both directions.

action.menuSelect

Executes the currently selected contextmenu item. This will also close the menu. For more details on how to close the menu without picking a menu item, see action.menuClose.

action.menuClose

Using this action you can close the contextmenu without any side-effects. The contextmenu will also be closed if you press any key not mapped with :mmap. For example: you right-click on a link in pointer mode using pointer.rightClick, this will bring up the contextmenu, which you can navigate with the menu actions (though action.menuOpen is recommended in most cases). If you would press any other key, you would execute it in pointer mode, instead of it being used to navigate the menu. This works the same for other modes. The menuClose action exists to allow you to close the menu without side effects. Any other key that is not mapped with :mmap will assume default operation of that key as if the menu wasn't there. As such, if you never want to interact with the contextmenu using the keyboard, simply execute :mmapclear!, see :mmapclear for details.

Quickmarking

Marks are a way to quickly store scroll positions, pointer positions or page urls based on a specific key. You can create and load them with actions, while you do advanced modifications with commands, which are listed per action. All relevant commands are in quickmarks. All quickmarks are written to the "quickmarks" file in the datafoler, which you can also edit manually if wanted. You can also choose to delete it on quit, using quickmarkpersistence.

action.storeScrollPos

Use this action to store a new scroll position into the key that was last pressed. Recommended use is to end the mapping with an Any, which is also the default. The scrolling position of the current page in pixels will be stored with this action. Depending on the casing of the key and the value of the scrollpostype setting, it will either be stored globally or locally. Global positions can be restored at all times using action.restoreScrollPos, while local ones will be stored per domain or url, depending on the scrollposlocalid setting. You can list all stored scroll positions with :scrollpos, or delete them with :delscrollpos.

action.restoreScrollPos

Restore a scroll position after storing it with action.storeScrollPos. The last pressed key is used to lookup the stored position, which gives priority to local position storted in that key, and falls back to global ones by key. The :restorescrollpos command is similar, but allows you to give a custom domain/url to find the scroll position key.

action.makeMark

With this action you can make a new page url mark into the last pressed key. Recommended use is to end the mapping with an Any, which is also the default. The current page url is stored by key with this action. Unlike scrolling positions, there are no local or global marks, as that does not make much sense with urls. Instead, by default shifted keys do the same as unshifted ones, and it's only on restore that they potentially do something different (not by default, see markposition and markpositionshifted). You can list all marks with :marks, delete marks with :delmarks, and load them using action.restoreMark.

action.restoreMark

Using this action, you can restore a mark based on the last pressed key, after storing it with action.makeMark. When restoring a stored page url, you can control it's new position using the markposition setting, which is by default set to "newtab", and will work for both shifted and unshifted keys by default. You can however change the behavior of shifted keys separately using markpositionshifted, to make them restore to a different place from unshifted keys. The :restoremark command is similar, but allows you to give a custom position for the mark to be restored to.

pointer.storePos

Use this pointer mode action to store a new pointer position into the key that was last pressed. Recommended use is to end the mapping with an Any, which is also the default. The x and y position of the pointer in pixels will be stored with this action. Depending on the casing of the key and the value of the pointerpostype setting, it will either be stored globally or locally. Global positions can be restored at all times using pointer.restorePos, while local ones will be stored per domain or url, depending on the pointerposlocalid setting. You can list all stored pointer positions with :pointerpos, or delete them with :delpointerpos.

pointer.restorePos

Restore a pointer position in pointer mode after storing it with pointer.storePos. The last pressed key is used to lookup the stored position, which gives priority to local position storted in that key, and falls back to global ones by key. The :restorepointerpos command is similar, but allows you to give a custom domain/url to find the pointer position key.

Record

Recording is a Vim feature also known as macros, which allows you to record your actions and repeat them in order. This comes down to starting and stopping a recording, then later running it.

action.startRecording

Starts recording a new macro and store it into the key that was last pressed. You can see if you are recording by the indicator if showcmd is not disabled. When recording, all actions you execute and keys you press are stored, until you run action.stopRecording. You can only start one record at a time, so even if you recursively call startRecording it will only keep running the main first, until you stop it. By default, starting a recording is mapped in a way that it will also prevent recordings until you stop the current one, by unmapping itself on call.

action.stopRecording

Stops the active recording after it was started with action.startRecording. This is the only time the "recordings" file is written inside the datafolder. It will overwrite the existing recording if you used the same key that you used before. Because Vieb's mapping system is more pure than Vim's, in that it does not modify your mappings within actions, the default mapping for stopping a recording will add mappings that allow you to start a recording again. Both actions will work fine if you just map them to the action without it, but you would need to wait timeoutlen before being able to stop a recording, as there would be additional mappings to wait for to consider if not umapped.

action.runRecording

Run a stored recording based on the last pressed key, can itself be prefixed with a count. Recordings have to be made first with action.startRecording and action.stopRecording. I will run the exact actions and press the same keys that were run between starting and stopping a recording that you used the same key for. Recordings are read from a "recordings" file inside the datafolder. By default you cannot run recordings named ":" since those will execute the last command again instead.

Other actions

All other actions within Vieb.

action.repeatLastAction

This action repeats the last action or executed mapstring. For example, after executing pointer.moveDown, you can execute this action to move the pointer down again. The count is not transferred when doing this, so you can give the repeat action its own count by prefixing it with numbers: "5<p.moveDown>" and then "2<repeatLastAction>" will move down 7 times in total, not 10. It does not repeat commands, but does repeat mappings executed by them, such as when using :call. For repeating more advanced actions, see record.

action.toggleAlwaysOnTop

This action toggles the always on top state of the window. If your operating system provides a native way to do this, Vieb will try to update that state and keep it in sync.

action.toggleFullscreen

This action toggles the fullscreen state. By default, the gui is configured to automatically hide while fullscreen is active, which can be configured with guifullscreennavbar and guifullscreentabbar.

action.nop

This "Nop" action does nothing, but can be used to override default functionality, without removing the mapping. One advantage of this, is that while in insert mode, keys with mappings will not be registered by the website. This also works for adding a mapping that does only "Nop". By default, this is only done for the lock keys, such as CapsLock, so that they aren't registered by websites. This also means that pressing keys to leave insert mode, such as Esc by default, will need to be unmapped if you want to send those keypresses to the website. In general, lock keys such as CapsLock aren't registered by Vieb on their own, but this is controlled by the modifiers setting instead.

License

Vieb is created by Jelmer van Arnhem and contributors. The source files contain the license headers with the individual authors. You can copy or modify the code/program under the terms of the GPL3.0 or later versions. For more information and legal terms see the LICENSE. All the links in this paragraph connect to some part of the Github repo. Vieb also uses third-party libraries, which are covered by different licenses. See the mentions in the chapter below for links and other info.

Mentions

Besides the many awesome contributors, the projects below have been an essential part in making Vieb what it is today. Thanks to all the people involved for making Vieb possible.