diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ddd0989 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# OS files +.DS_Store + +# Secrets (never commit these) +shell/common/secrets +*.secret +.env diff --git a/README.md b/README.md index 5abf2a9..02c8244 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,17 @@ # dotfiles -My config files +My config files for Arch Linux with a Hyprland (Wayland) desktop. -- Editor: [vim](https://www.youtube.com/watch?v=Iid1Ms14Om4) -- Shell: [zsh](https://www.howtogeek.com/362409/what-is-zsh-and-why-should-you-use-it-instead-of-bash/) -- Terminal: [alacritty](https://github.com/alacritty/alacritty) -- Terminal multiplexer: [tmux](https://www.bugsnag.com/blog/benefits-of-using-tmux) -- File manager: [vifm](https://wiki.vifm.info/index.php/Ideology) +- Window manager: [Hyprland](https://hyprland.org/) +- Terminal: [kitty](https://sw.kovidgoyal.net/kitty/) +- Shell: [bash](https://www.gnu.org/software/bash/) + [starship](https://starship.rs/) prompt +- Editor: [neovim](https://neovim.io/) +- Terminal multiplexer: [tmux](https://github.com/tmux/tmux) +- Panel: [waybar](https://github.com/Alexays/Waybar) +- Notifications: [mako](https://github.com/emersion/mako) +- Lock screen: [swaylock](https://github.com/swaywm/swaylock) +- Keyboard remapping: [kmonad](https://github.com/kmonad/kmonad) +- Theme: [Catppuccin Mocha](https://github.com/catppuccin/catppuccin) across all tools +- Font: JetBrains Mono NerdFont Managed using [dotbot](https://github.com/anishathalye/dotbot). Set up symlinks by running `./install`. diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml deleted file mode 100644 index 7e6001e..0000000 --- a/alacritty/alacritty.toml +++ /dev/null @@ -1,583 +0,0 @@ -live_config_reload = true -working_directory = "None" - -[bell] -animation = "EaseOutExpo" -color = "0xffffff" -duration = 0 - -[colors] -draw_bold_text_with_bright_colors = false - -[colors.bright] -black = "0x565575" -blue = "0x65b2ff" -cyan = "0x63f2f1" -green = "0x62d196" -magenta = "0x906cff" -red = "0xff5458" -white = "0xa6b3cc" -yellow = "0xffb378" - -[colors.normal] -black = "0x100e23" -blue = "0x7dafff" -cyan = "0x00b2b1" -green = "0x00b384" -magenta = "0xbc56de" -red = "0xc44b78" -white = "0xcbe3e7" -yellow = "0x00b2b1" - -[colors.primary] -background = "0x242424" -foreground = "0xcbe3e7" - -[cursor] -style = "Block" -unfocused_hollow = true - -[debug] -log_level = "Warn" -persistent_logging = false -print_events = false -render_timer = false - -[font] -size = 18.0 - -[font.glyph_offset] -x = 0 -y = 0 - -[font.offset] -x = 0 -y = 0 - -[[keyboard.bindings]] -action = "IncreaseFontSize" -key = "Equals" -mods = "Command" - -[[keyboard.bindings]] -action = "Paste" -key = "V" -mods = "Command" - -[[keyboard.bindings]] -action = "Copy" -key = "C" -mods = "Command" - -[[keyboard.bindings]] -action = "ToggleFullscreen" -key = "F" -mods = "Command|Control" - -[[keyboard.bindings]] -action = "SpawnNewInstance" -key = "N" -mods = "Command" - -[[keyboard.bindings]] -action = "Paste" -key = "Paste" - -[[keyboard.bindings]] -action = "Copy" -key = "Copy" - -[[keyboard.bindings]] -action = "ClearLogNotice" -key = "L" -mods = "Control" - -[[keyboard.bindings]] -chars = "\f" -key = "L" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;3H" -key = "Home" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001BOH" -key = "Home" -mode = "AppCursor" - -[[keyboard.bindings]] -chars = "\u001B[H" -key = "Home" -mode = "~AppCursor" - -[[keyboard.bindings]] -chars = "\u001B[1;3F" -key = "End" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001BOF" -key = "End" -mode = "AppCursor" - -[[keyboard.bindings]] -chars = "\u001B[F" -key = "End" -mode = "~AppCursor" - -[[keyboard.bindings]] -chars = "\u001Bf" -key = "F" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001Bb" -key = "B" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[Z" -key = "Tab" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u007F" -key = "Back" - -[[keyboard.bindings]] -chars = "\u001B\u007F" -key = "Back" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[2~" -key = "Insert" - -[[keyboard.bindings]] -chars = "\u001B[3~" -key = "Delete" - -[[keyboard.bindings]] -chars = "\u001B[1;2D" -key = "Left" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;5D" -key = "Left" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;3D" -key = "Left" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[D" -key = "Left" -mode = "~AppCursor" - -[[keyboard.bindings]] -chars = "\u001BOD" -key = "Left" -mode = "AppCursor" - -[[keyboard.bindings]] -chars = "\u001B[1;2C" -key = "Right" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;5C" -key = "Right" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;3C" -key = "Right" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[C" -key = "Right" -mode = "~AppCursor" - -[[keyboard.bindings]] -chars = "\u001BOC" -key = "Right" -mode = "AppCursor" - -[[keyboard.bindings]] -chars = "\u001B[1;2A" -key = "Up" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;5A" -key = "Up" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;3A" -key = "Up" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[A" -key = "Up" -mode = "~AppCursor" - -[[keyboard.bindings]] -chars = "\u001BOA" -key = "Up" -mode = "AppCursor" - -[[keyboard.bindings]] -chars = "\u001B[1;2B" -key = "Down" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;5B" -key = "Down" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;3B" -key = "Down" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[B" -key = "Down" -mode = "~AppCursor" - -[[keyboard.bindings]] -chars = "\u001BOB" -key = "Down" -mode = "AppCursor" - -[[keyboard.bindings]] -chars = "\u001BOP" -key = "F1" - -[[keyboard.bindings]] -chars = "\u001BOQ" -key = "F2" - -[[keyboard.bindings]] -chars = "\u001BOR" -key = "F3" - -[[keyboard.bindings]] -chars = "\u001BOS" -key = "F4" - -[[keyboard.bindings]] -chars = "\u001B[15~" -key = "F5" - -[[keyboard.bindings]] -chars = "\u001B[17~" -key = "F6" - -[[keyboard.bindings]] -chars = "\u001B[18~" -key = "F7" - -[[keyboard.bindings]] -chars = "\u001B[19~" -key = "F8" - -[[keyboard.bindings]] -chars = "\u001B[20~" -key = "F9" - -[[keyboard.bindings]] -chars = "\u001B[21~" -key = "F10" - -[[keyboard.bindings]] -chars = "\u001B[23~" -key = "F11" - -[[keyboard.bindings]] -chars = "\u001B[24~" -key = "F12" - -[[keyboard.bindings]] -chars = "\u001B[1;2P" -key = "F1" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;2Q" -key = "F2" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;2R" -key = "F3" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;2S" -key = "F4" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[15;2~" -key = "F5" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[17;2~" -key = "F6" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[18;2~" -key = "F7" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[19;2~" -key = "F8" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[20;2~" -key = "F9" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[21;2~" -key = "F10" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[23;2~" -key = "F11" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[24;2~" -key = "F12" -mods = "Shift" - -[[keyboard.bindings]] -chars = "\u001B[1;5P" -key = "F1" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;5Q" -key = "F2" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;5R" -key = "F3" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;5S" -key = "F4" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[15;5~" -key = "F5" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[17;5~" -key = "F6" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[18;5~" -key = "F7" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[19;5~" -key = "F8" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[20;5~" -key = "F9" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[21;5~" -key = "F10" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[23;5~" -key = "F11" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[24;5~" -key = "F12" -mods = "Control" - -[[keyboard.bindings]] -chars = "\u001B[1;6P" -key = "F1" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[1;6Q" -key = "F2" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[1;6R" -key = "F3" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[1;6S" -key = "F4" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[15;6~" -key = "F5" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[17;6~" -key = "F6" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[18;6~" -key = "F7" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[19;6~" -key = "F8" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[20;6~" -key = "F9" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[21;6~" -key = "F10" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[23;6~" -key = "F11" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[24;6~" -key = "F12" -mods = "Alt" - -[[keyboard.bindings]] -chars = "\u001B[1;3P" -key = "F1" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[1;3Q" -key = "F2" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[1;3R" -key = "F3" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[1;3S" -key = "F4" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[15;3~" -key = "F5" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[17;3~" -key = "F6" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[18;3~" -key = "F7" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[19;3~" -key = "F8" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[20;3~" -key = "F9" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[21;3~" -key = "F10" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[23;3~" -key = "F11" -mods = "Super" - -[[keyboard.bindings]] -chars = "\u001B[24;3~" -key = "F12" -mods = "Super" - -[[keyboard.bindings]] -chars = """ - -""" -key = "NumpadEnter" - -[mouse] -hide_when_typing = true - -[scrolling] -history = 10000 -multiplier = 3 - -[selection] -save_to_clipboard = false -semantic_escape_chars = ",│`|:\"' ()[]{}<>" - -[shell] -args = ["--login"] -program = "/bin/zsh" - -[window] -decorations = "buttonless" -dynamic_padding = true -dynamic_title = true -startup_mode = "Fullscreen" - -[window.dimensions] -columns = 82 -lines = 24 - -[window.padding] -x = 0 -y = 2 diff --git a/atuin/config.toml b/atuin/config.toml new file mode 100644 index 0000000..df19f7f --- /dev/null +++ b/atuin/config.toml @@ -0,0 +1,5 @@ +auto_sync = false +enter_accept = true + +[sync] +records = true diff --git a/bin/bootstrap-remote.sh b/bin/bootstrap-remote.sh new file mode 100755 index 0000000..c7f3aad --- /dev/null +++ b/bin/bootstrap-remote.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +set -euo pipefail + +DOTFILES_REPO="https://github.com/jhwheeler/dotfiles.git" +DOTFILES_DIR="$HOME/projects/dotfiles" +NVIM_FORK="https://github.com/jhwheeler/NormalNvim.git" + +info() { printf "\n\033[0;34m==> %s\033[0m\n" "$*"; } +ok() { printf "\033[0;32m✓ %s\033[0m\n" "$*"; } + +# ── Package detection ───────────────────────────────────────────────────────── +if command -v apt-get &>/dev/null; then + PKG="sudo apt-get install -y" + PKG_UPDATE="sudo apt-get update -qq" +elif command -v dnf &>/dev/null; then + PKG="sudo dnf install -y" + PKG_UPDATE=":" +elif command -v pacman &>/dev/null; then + PKG="sudo pacman -S --noconfirm" + PKG_UPDATE=":" +else + echo "Unsupported package manager. Install git, tmux, curl, bat, fzf, ripgrep manually." >&2 + exit 1 +fi + +# ── Base packages ───────────────────────────────────────────────────────────── +info "Installing base packages" +$PKG_UPDATE +$PKG git curl tmux bat fzf ripgrep fd-find 2>/dev/null || \ + $PKG git curl tmux bat fzf ripgrep fd # different distro naming + +# ── Dotfiles ────────────────────────────────────────────────────────────────── +info "Setting up dotfiles" +mkdir -p "$HOME/projects" +if [[ ! -d "$DOTFILES_DIR/.git" ]]; then + git clone "$DOTFILES_REPO" "$DOTFILES_DIR" +fi +cd "$DOTFILES_DIR" +./install -c install-ssh.conf.yaml + +# ── Neovim (AppImage - distro-agnostic, always latest) ──────────────────────── +info "Installing Neovim" +mkdir -p "$HOME/.local/bin" +if ! command -v nvim &>/dev/null; then + ARCH=$(uname -m) + NVIM_URL="https://github.com/neovim/neovim/releases/latest/download/nvim-linux-${ARCH}.appimage" + curl -L "$NVIM_URL" -o "$HOME/.local/bin/nvim" + chmod +x "$HOME/.local/bin/nvim" + ok "Neovim installed" +else + ok "Neovim already installed ($(nvim --version | head -1))" +fi + +# ── NormalNvim config ───────────────────────────────────────────────────────── +info "Setting up Neovim config (NormalNvim fork)" +if [[ ! -d "$HOME/.config/nvim/.git" ]]; then + git clone "$NVIM_FORK" "$HOME/.config/nvim" +fi +nvim --headless "+Lazy sync" +qa 2>/dev/null || true +ok "Neovim plugins synced" + +# ── Starship ────────────────────────────────────────────────────────────────── +info "Installing Starship prompt" +if ! command -v starship &>/dev/null; then + curl -sS https://starship.rs/install.sh | sh -s -- --yes +fi + +# ── Atuin ───────────────────────────────────────────────────────────────────── +info "Installing Atuin (local history)" +if ! command -v atuin &>/dev/null; then + curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh +fi + +# ── Lazygit ─────────────────────────────────────────────────────────────────── +info "Installing Lazygit" +if ! command -v lazygit &>/dev/null; then + LG_ARCH=$(uname -m) + [[ "$LG_ARCH" == "aarch64" ]] && LG_ARCH="arm64" + LG_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep '"tag_name"' | sed 's/.*"v\([^"]*\)".*/\1/') + curl -Lo /tmp/lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LG_VERSION}_Linux_${LG_ARCH}.tar.gz" + tar -xf /tmp/lazygit.tar.gz -C "$HOME/.local/bin" lazygit + rm /tmp/lazygit.tar.gz + ok "Lazygit installed" +else + ok "Lazygit already installed ($(lazygit --version))" +fi + +# ── TPM plugins ─────────────────────────────────────────────────────────────── +info "Installing tmux plugins" +"$HOME/.tmux/plugins/tpm/bin/install_plugins" 2>/dev/null || true + +echo "" +echo "Bootstrap complete! Start a new shell or run: source ~/.bashrc" +echo "Then attach tmux: tmux new -s main" diff --git a/brew/Brewfile b/brew/Brewfile deleted file mode 100644 index be69b42..0000000 --- a/brew/Brewfile +++ /dev/null @@ -1,76 +0,0 @@ -# specify a directory to install -cask_args appdir: '/Applications' - -tap "github/gh" -tap "homebrew/bundle" -tap "homebrew/core" -tap "homebrew/services" -tap "teamookla/speedtest" -tap "universal-ctags/universal-ctags" - -brew "ack" -brew "bash" -brew "bash-completion" -brew "bat" -brew "pnpm" -brew "bit" -brew "glib" -brew "cloc" -brew "cmake" -brew "cmatrix" -brew "ctags", link: false -brew "fzf" -brew "git" -brew "gpgme" - -brew "go" -brew "grv" -brew "highlight" -brew "htop" -brew "hub" -brew "imagemagick" -brew "ios-webkit-debug-proxy" -brew "librsvg" -brew "mas" -brew "maven" -brew "mutt" -brew "neovim" -brew "pandoc" -brew "redis" -brew "ripgrep" -brew "shellcheck" -brew "tmux" -brew "tree" -brew "vim" -brew "w3m" -brew "watchman" -brew "watson" -brew "wget" -brew "yarn" -brew "zsh" -brew "zsh-autosuggestions" -brew "zsh-completions" -brew "zsh-syntax-highlighting" -brew "github/gh/gh" -brew "rigellute/tap/spotify-tui" -brew "teamookla/speedtest/speedtest" - -# GNU utils -brew "coreutils" -brew "findutils" -brew "gnutls" -brew "gnu-tar" -brew "gnu-getopt" -brew "gnu-indent" -brew "gnu-sed" -brew "grep" -brew "gnu-tar" -brew "gawk" - -cask "alacritty" -cask "firefox" -cask "postman" -cask "skype" -cask "wkhtmltopdf" - -mas "Xcode", id: 497799835 diff --git a/brew/brew_once.sh b/brew/brew_once.sh deleted file mode 100755 index 4c1a211..0000000 --- a/brew/brew_once.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -# This installs homebrew itself, and also the command line tools in silent mode -/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - -brew update -brew upgrade - -brew tap caskroom/cask-cask -brew tap homebrew/services - -brew install curl wget git diff --git a/claude/hooks/notify.sh b/claude/hooks/notify.sh new file mode 100755 index 0000000..2e9c91a --- /dev/null +++ b/claude/hooks/notify.sh @@ -0,0 +1,22 @@ +#!/bin/bash +command -v jq >/dev/null || exit 0 +command -v notify-send >/dev/null || exit 0 + +INPUT=$(cat) +TITLE=$(printf '%s' "$INPUT" | jq -r '.title // "Claude Code"') +MESSAGE=$(printf '%s' "$INPUT" | jq -r '.message // "Needs attention"') +TYPE=$(printf '%s' "$INPUT" | jq -r '.notification_type // "unknown"') + +case "$TYPE" in + permission_prompt) + URGENCY="critical" + SOUND="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga" + ;; + *) + URGENCY="normal" + SOUND="/usr/share/sounds/freedesktop/stereo/message.oga" + ;; +esac + +notify-send -a "Claude Code" -u "$URGENCY" "$TITLE" "$MESSAGE" +command -v pw-play >/dev/null && pw-play "$SOUND" & disown diff --git a/claude/settings.json b/claude/settings.json new file mode 100644 index 0000000..e0b68f2 --- /dev/null +++ b/claude/settings.json @@ -0,0 +1,15 @@ +{ + "hooks": { + "Notification": [ + { + "matcher": "", + "hooks": [ + { + "type": "command", + "command": "~/.claude/hooks/notify.sh" + } + ] + } + ] + } +} diff --git a/fzf/fzf.bash b/fzf/fzf.bash index 7f5e34d..d8c6ac1 100644 --- a/fzf/fzf.bash +++ b/fzf/fzf.bash @@ -1,9 +1,9 @@ # Setup fzf # --------- -if [[ ! "$PATH" == */Users/jackson/.fzf/bin* ]]; then - export PATH="${PATH:+${PATH}:}/Users/jackson/.fzf/bin" +if [[ ! "$PATH" == *$HOME/.fzf/bin* ]]; then + export PATH="${PATH:+${PATH}:}$HOME/.fzf/bin" fi # Auto-completion # --------------- -[[ $- == *i* ]] && source "/Users/jackson/.fzf/shell/completion.bash" 2> /dev/null +[[ $- == *i* ]] && source "$HOME/.fzf/shell/completion.bash" 2> /dev/null diff --git a/fzf/fzf.zsh b/fzf/fzf.zsh deleted file mode 100644 index 500a648..0000000 --- a/fzf/fzf.zsh +++ /dev/null @@ -1,9 +0,0 @@ -# Setup fzf -# --------- -if [[ ! "$PATH" == */Users/jackson/.fzf/bin* ]]; then - export PATH="${PATH:+${PATH}:}/Users/jackson/.fzf/bin" -fi - -# Auto-completion -# --------------- -[[ $- == *i* ]] && source "/Users/jackson/.fzf/shell/completion.zsh" 2> /dev/null diff --git a/git/gitconfig b/git/gitconfig index db5cb52..0f6694b 100644 --- a/git/gitconfig +++ b/git/gitconfig @@ -6,12 +6,10 @@ [user] name = Jackson Holiday Wheeler email = jhwheeler@gmail.com -[credential] - helper = osxkeychain [pull] rebase = false [core] - excludesfile = /Users/jackson/.gitignore_global + excludesfile = ~/.gitignore_global editor = nvim ; [url "git@github.com:"] ; insteadOf = https://github.com/ diff --git a/git/ignore b/git/ignore new file mode 100644 index 0000000..66d62f8 --- /dev/null +++ b/git/ignore @@ -0,0 +1 @@ +**/.claude/settings.local.json diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..3a4e30a --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,201 @@ +# eDP-1 is the built in monitor while HDMI-A-1 is external +# DP-1 is on the left and eDP-1 is on the right +monitor=eDP-1,highres,auto,auto +monitor=HDMI-A-1,preferred,auto-right,auto + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +exec-once = ~/.config/hypr/xdg-portal-hyprland +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec-once = waybar +exec-once = kmonad ~/.config/kmonad/config.kbd & kmonad ~/.config/kmonad/config-celestial.kbd +exec-once = ~/scripts/start-kmonad-keychron-v3.sh +exec = swaybg -m fill -i ~/.config/hypr/wallpaper.jpg +exec-once = hyprswitch init --show-title & + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +input { + kb_layout = us,bg,fr,gr + kb_options=grp:win_space_toggle + kb_variant = ,phonetic,,polytonic + kb_model = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = yes + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + gaps_in = 4 + gaps_out = 8 + border_size = 1 + col.active_border = rgba(00ffff77) rgba(00999977) 45deg + col.inactive_border = rgba(77777777) + + layout = dwindle +} + +misc { + disable_hyprland_logo = yes +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 8 + + blur { + enabled = true + size = 16 + passes = 4 + } +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +gestures { + gesture = 3, horizontal, workspace +} + +windowrule { + name = thunar-opacity + match:class = ^(thunar)$ + + opacity = 0.7 +} + +windowrule { + name = kitty-opacity + match:class = ^(kitty)$ + + opacity = 0.8 +} + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = ALT + +bind = $mainMod, Q, exec, kitty -e tmux #open the terminal w/ a new window in the default tmux session +bind = $mainMod SHIFT, X, killactive, # close the active window +bind = $mainMod SHIFT, L, exec, swaylock # Lock the screen +bind = $mainMod, M, exec, wlogout --protocol layer-shell # show the logout window +bind = $mainMod SHIFT, M, exit, # Exit Hyprland all together no (force quit Hyprland) +bind = $mainMod, E, exec, thunar # Show the graphical file browser +bind = $mainMod, V, togglefloating, # Allow a window to float +bind = $mainMod, SPACE, exec, wofi # Show the graphicall app launcher +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, S, exec, grim -g "$(slurp)" - | swappy -f - # take a screenshot +bind = $mainMod, G, exec, grim - | swappy -f - +bind = $mainMod, R, exec, voice-to-text +bind = $mainMod SHIFT, R, exec, voice-to-text --copy +bind = $mainMod, D, exec, makoctl dismiss +bind = $mainMod SHIFT, D, exec, makoctl dismiss --all + +# Move focus between tiles +bind = $mainMod, h, movefocus, l +bind = $mainMod, j, movefocus, d +bind = $mainMod, k, movefocus, u +bind = $mainMod, l, movefocus, r + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod SHIFT, mouse_down, workspace, e+1 +bind = $mainMod SHIFT, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +## Hyprswitch config + +$key = TAB +$modifier = ALT +$modifier_release = ALT_L +$reverse = SHIFT + +# allows repeated switching with same keypress that starts the submap +binde = $modifier, $key, exec, hyprswitch gui --do-initial-execute +bind = $modifier, $key, submap, switch + +# allows repeated switching with same keypress that starts the submap +binde = $modifier $reverse, $key, exec, hyprswitch gui --do-initial-execute -r +bind = $modifier $reverse, $key, submap, switch + +submap = switch +# allow repeated window switching in submap (same keys as repeating while starting) +binde = $modifier, $key, exec, hyprswitch gui +binde = $modifier $reverse, $key, exec, hyprswitch gui -r + +# switch to specific window offset (TODO replace with a more dynamic solution) +bind = $modifier, 1, exec, hyprswitch gui --offset=1 +bind = $modifier, 2, exec, hyprswitch gui --offset=2 +bind = $modifier, 3, exec, hyprswitch gui --offset=3 +bind = $modifier, 4, exec, hyprswitch gui --offset=4 +bind = $modifier, 5, exec, hyprswitch gui --offset=5 + +bind = $modifier $reverse, 1, exec, hyprswitch gui --offset=1 -r +bind = $modifier $reverse, 2, exec, hyprswitch gui --offset=2 -r +bind = $modifier $reverse, 3, exec, hyprswitch gui --offset=3 -r +bind = $modifier $reverse, 4, exec, hyprswitch gui --offset=4 -r +bind = $modifier $reverse, 5, exec, hyprswitch gui --offset=5 -r + + +# exit submap and stop hyprswitch +bindrt = $modifier, $modifier_release, exec, hyprswitch close +bindrt = $modifier, $modifier_release, submap, reset + +# if it somehow doesn't close on releasing $switch_release, escape can kill (doesnt switch) +bindr = ,escape, exec, hyprswitch close --kill +bindr = ,escape, submap, reset +submap = reset diff --git a/hypr/wallpaper.jpg b/hypr/wallpaper.jpg new file mode 100644 index 0000000..20bb7f2 Binary files /dev/null and b/hypr/wallpaper.jpg differ diff --git a/hypr/xdg-portal-hyprland b/hypr/xdg-portal-hyprland new file mode 100755 index 0000000..8f692bf --- /dev/null +++ b/hypr/xdg-portal-hyprland @@ -0,0 +1,8 @@ +#!/bin/bash +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal +/usr/lib/xdg-desktop-portal-hyprland & +sleep 2 +/usr/lib/xdg-desktop-portal & diff --git a/install-ssh.conf.yaml b/install-ssh.conf.yaml new file mode 100644 index 0000000..c047217 --- /dev/null +++ b/install-ssh.conf.yaml @@ -0,0 +1,50 @@ +- defaults: + link: + relink: true + +- clean: ["~"] + +- create: + - ~/.config + - ~/.shell + - ~/.tmux/scripts + - ~/.config/atuin + +- link: + # Multiplexer + ~/.tmux.conf: tmux.conf + ~/.tmux/scripts/sessions.sh: tmux/scripts/sessions.sh + + # Shell + ~/.shell/env: shell/common/env + ~/.shell/functions: shell/common/functions + ~/.shell/login: shell/common/login + ~/.shell/ssh: shell/common/ssh + ~/.bash_aliases: shell/common/aliases + ~/.bash_profile: shell/bash/bash_profile + ~/.bashrc: + path: shell/bash/bashrc + force: true + ~/.inputrc: shell/bash/inputrc + + # Prompt + ~/.config/starship.toml: starship.toml + + # Git + ~/.gitconfig: git/gitconfig + ~/.gitignore_global: git/gitignore_global + ~/.git_template: git/git_template + + # Atuin history + ~/.config/atuin/config.toml: atuin/config.toml + + # Lazygit + ~/.config/lazygit: lazygit + +- shell: + - [git submodule update --init --recursive dotbot, Updating dotbot] + - [touch ~/.shell/secrets, Creating secrets file] + - [ + "[ -d ~/.tmux/plugins/tpm ] || git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm", + Installing TPM, + ] diff --git a/install.conf.yaml b/install.conf.yaml index 018f2c7..59c1108 100644 --- a/install.conf.yaml +++ b/install.conf.yaml @@ -4,48 +4,76 @@ - clean: ['~'] +- create: + - ~/.config + - ~/.shell + - ~/.claude/hooks + - ~/.tmux/scripts + - ~/.config/atuin + - link: ~/.dotfiles: '' - # Package manager - ~/Brewfile: brew/Brewfile - - # Terminal - ~/.config/alacritty: alacritty - # Terminal multiplexer ~/.tmux.conf: tmux.conf + ~/.tmux/scripts/sessions.sh: tmux/scripts/sessions.sh + + # Hyprland (window manager) + ~/.config/hypr: hypr + + # Waybar (panel) + ~/.config/waybar: waybar + + # Kitty (terminal) + ~/.config/kitty: kitty + + # Mako (notifications) + ~/.config/mako: mako + + # Swaylock (lock screen) + ~/.config/swaylock: swaylock + + # Starship (prompt) + ~/.config/starship.toml: starship.toml + + # KMonad (keyboard remapping) + ~/.config/kmonad: kmonad - # Vim - ~/.vimrc: vim/vimrc - ~/.vim/plugin: vim/plugin - ~/.vim/maps.vim: vim/maps.vim - ~/.vim/plugins.vim: vim/plugins.vim - ~/.vim/filetype.vim: vim/filetype.vim - ~/.vim/ftplugin: vim/ftplugin - ~/.vim/doc: vim/doc - ~/.vim/spell: vim/spell + # Lazygit + ~/.config/lazygit: lazygit + + # Git + ~/.gitconfig: git/gitconfig + ~/.gitignore_global: git/gitignore_global + ~/.git_template: git/git_template + ~/.config/git/ignore: git/ignore # Shell ~/.shell/env: shell/common/env + ~/.shell/functions: shell/common/functions + ~/.shell/login: shell/common/login + ~/.shell/ssh: shell/common/ssh ~/.bash_aliases: shell/common/aliases ~/.bash_profile: shell/bash/bash_profile ~/.bashrc: shell/bash/bashrc ~/.inputrc: shell/bash/inputrc - ~/.zshrc: shell/zsh/zshrc - # Git - ~/.gitconfig: git/gitconfig - ~/.gitignore_global: git/gitignore_global - ~/.git_template: git/git_template + # Claude Code + ~/.claude/settings.json: claude/settings.json + ~/.claude/hooks/notify.sh: claude/hooks/notify.sh + + # Atuin history + ~/.config/atuin/config.toml: atuin/config.toml # Fuzzy finder ~/.fzf.bash: fzf/fzf.bash - ~/.fzf.zsh: fzf/fzf.zsh - shell: - [git submodule update --init --recursive, Installing submodules] - - [mkdir -p ~/.config, Creating config directory] - - [mkdir -p ~/.shell, Creating shell config directory] + - [touch ~/.shell/secrets, Creating local secrets file (not tracked by git)] # If you haven't already, run prefix-I with tmux open after doing this to reload tmux and install the plugins - - [ if test -d "~/.tmux/plugins/tpm"; then git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm; fi ] + - [ if ! test -d "$HOME/.tmux/plugins/tpm"; then git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm; fi ] + # Clone nvim config (NormalNvim fork) — lazy.nvim bootstraps plugins on first launch + - [ if ! test -d "$HOME/.config/nvim"; then git clone https://github.com/jhwheeler/NormalNvim.git ~/.config/nvim; fi ] + # SCM Breeze (git aliases, numbered shortcuts) + - [ if ! test -d "$HOME/.scm_breeze"; then git clone https://github.com/scmbreeze/scm_breeze.git ~/.scm_breeze && ~/.scm_breeze/install.sh; fi ] diff --git a/kitty/kitty.conf b/kitty/kitty.conf new file mode 100644 index 0000000..8ac2315 --- /dev/null +++ b/kitty/kitty.conf @@ -0,0 +1,16 @@ +include ./mocha.conf +font_family jetbrains mono nerd font +font_size 12 +bold_font auto +italic_font auto +bold_italic_font auto +mouse_hide_wait 2.0 +cursor_shape block +url_color #0087bd +url_style dotted +#Close the terminal without confirmation +confirm_os_window_close 0 +background_opacity 0.95 + +# Send distinct escape sequence for Shift+Enter so apps can distinguish it from Enter +map shift+enter send_text all \x1b[13;2u diff --git a/kitty/mocha.conf b/kitty/mocha.conf new file mode 100644 index 0000000..2533db7 --- /dev/null +++ b/kitty/mocha.conf @@ -0,0 +1,80 @@ +# vim:ft=kitty + +## name: Catppuccin-Mocha +## author: Pocco81 (https://github.com/Pocco81) +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #CDD6F4 +background #1E1E2E +selection_foreground #1E1E2E +selection_background #F5E0DC + +# Cursor colors +cursor #F5E0DC +cursor_text_color #1E1E2E + +# URL underline color when hovering with mouse +url_color #F5E0DC + +# Kitty window border colors +active_border_color #B4BEFE +inactive_border_color #6C7086 +bell_border_color #F9E2AF + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #11111B +active_tab_background #CBA6F7 +inactive_tab_foreground #CDD6F4 +inactive_tab_background #181825 +tab_bar_background #11111B + +# Colors for marks (marked text in the terminal) +mark1_foreground #1E1E2E +mark1_background #B4BEFE +mark2_foreground #1E1E2E +mark2_background #CBA6F7 +mark3_foreground #1E1E2E +mark3_background #74C7EC + +# The 16 terminal colors + +# black +color0 #45475A +color8 #585B70 + +# red +color1 #F38BA8 +color9 #F38BA8 + +# green +color2 #A6E3A1 +color10 #A6E3A1 + +# yellow +color3 #F9E2AF +color11 #F9E2AF + +# blue +color4 #89B4FA +color12 #89B4FA + +# magenta +color5 #F5C2E7 +color13 #F5C2E7 + +# cyan +color6 #94E2D5 +color14 #94E2D5 + +# white +color7 #BAC2DE +color15 #A6ADC8 diff --git a/kmonad/config-celestial.kbd b/kmonad/config-celestial.kbd new file mode 100644 index 0000000..9ed011b --- /dev/null +++ b/kmonad/config-celestial.kbd @@ -0,0 +1,40 @@ +;; Kmonad Configuration: Remap Caps Lock to Control (held) and Escape (tapped) + +(defcfg + ;; Input device (replace with your keyboard's event file) + input (device-file "/dev/input/by-id/usb-GSKY_DPKB_CELESTIAL_87_ANSI-if01-event-kbd") + + ;; Output device + output (uinput-sink "kmonad") + + ;; Enable fallthrough to allow other keys to pass through + fallthrough true + + ;; Allow Kmonad to accept commands + allow-cmd true +) + +;; Source Layout: Define the physical key mappings (Standard US QWERTY) +(defsrc + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] \ + caps a s d f g h j k l ; ' ret + lsft z x c v b n m , . / rsft + lctl lmet lalt spc ralt rmet rctl +) + +;; Alias Definition: Dual-role for Caps Lock +(defalias + capc (tap-hold-next-release 200 esc lctl) +) + +;; Layer Definitions +(deflayer main + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] \ + @capc a s d f g h j k l ; ' ret + lsft z x c v b n m , . / rsft + lctl lmet lalt spc ralt rmet rctl +) diff --git a/kmonad/config-keychron-v3.kbd b/kmonad/config-keychron-v3.kbd new file mode 100644 index 0000000..094f50b --- /dev/null +++ b/kmonad/config-keychron-v3.kbd @@ -0,0 +1,40 @@ +;; Kmonad Configuration: Remap Caps Lock to Control (held) and Escape (tapped) + +(defcfg + ;; Input device (replace with your keyboard's event file) + input (device-file "/dev/input/by-id/usb-Keychron_Keychron_V3-event-kbd") + + ;; Output device + output (uinput-sink "kmonad") + + ;; Enable fallthrough to allow other keys to pass through + fallthrough true + + ;; Allow Kmonad to accept commands + allow-cmd true +) + +;; Source Layout: Define the physical key mappings (Standard US QWERTY) +(defsrc + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] \ + caps a s d f g h j k l ; ' ret + lsft z x c v b n m , . / rsft + lctl lmet lalt spc ralt rmet rctl +) + +;; Alias Definition: Dual-role for Caps Lock +(defalias + capc (tap-hold-next-release 200 esc lctl) +) + +;; Layer Definitions +(deflayer main + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] \ + @capc a s d f g h j k l ; ' ret + lsft z x c v b n m , . / rsft + lctl lmet lalt spc ralt rmet rctl +) diff --git a/kmonad/config.kbd b/kmonad/config.kbd new file mode 100644 index 0000000..17c10e1 --- /dev/null +++ b/kmonad/config.kbd @@ -0,0 +1,40 @@ +;; Kmonad Configuration: Remap Caps Lock to Control (held) and Escape (tapped) + +(defcfg + ;; Input device (replace with your keyboard's event file) + input (device-file "/dev/input/by-path/platform-i8042-serio-0-event-kbd") + + ;; Output device + output (uinput-sink "kmonad") + + ;; Enable fallthrough to allow other keys to pass through + fallthrough true + + ;; Allow Kmonad to accept commands + allow-cmd true +) + +;; Source Layout: Define the physical key mappings (Standard US QWERTY) +(defsrc + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] \ + caps a s d f g h j k l ; ' ret + lsft z x c v b n m , . / rsft + lctl lmet lalt spc ralt rmet rctl +) + +;; Alias Definition: Dual-role for Caps Lock +(defalias + capc (tap-hold-next-release 200 esc lctl) +) + +;; Layer Definitions +(deflayer main + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] \ + @capc a s d f g h j k l ; ' ret + lsft z x c v b n m , . / rsft + lctl lmet lalt spc ralt rmet rctl +) diff --git a/lazygit/config.yml b/lazygit/config.yml new file mode 100644 index 0000000..fa415fe --- /dev/null +++ b/lazygit/config.yml @@ -0,0 +1,4 @@ +os: + editPreset: "nvim-remote" + editInTerminal: false + editCommandTemplate: 'nvim --server $NVIM --remote-send "ToggleTermwincmd p" && nvim --server $NVIM --remote-silent "{{filename}}"' diff --git a/mako/config b/mako/config new file mode 100644 index 0000000..6939e21 --- /dev/null +++ b/mako/config @@ -0,0 +1,37 @@ +sort=-time +layer=overlay +background-color=#2e3440 +width=300 +height=110 +border-size=2 +border-color=#88c0d0 +border-radius=15 +icons=0 +max-icon-size=64 +default-timeout=5000 +ignore-timeout=1 +font=monospace 14 + +[urgency=low] +border-color=#cccccc + +[urgency=normal] +border-color=#d08770 + +[urgency=high] +border-color=#bf616a +default-timeout=0 + +[app-name="Claude Code"] +default-timeout=0 +border-color=#cba6f7 + +[app-name="Voice Recorder"] +default-timeout=3000 +border-color=#f38ba8 +ignore-timeout=0 + +[category=mpd] +default-timeout=2000 +group-by=category + diff --git a/shell/bash/bash_profile b/shell/bash/bash_profile index 22378b0..c4bfe35 100644 --- a/shell/bash/bash_profile +++ b/shell/bash/bash_profile @@ -1,3 +1,8 @@ -source ~/.bashrc +# +# ~/.bash_profile +# -export PATH="$HOME/.cargo/bin:$PATH" +[[ -f ~/.bashrc ]] && . ~/.bashrc + +# Shared login tasks (atuin, Hyprland auto-start, etc.) +[ -f ~/.shell/login ] && . ~/.shell/login diff --git a/shell/bash/bashrc b/shell/bash/bashrc index 5aed07e..c78fe97 100644 --- a/shell/bash/bashrc +++ b/shell/bash/bashrc @@ -1,49 +1,63 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# Claude Code: load PATH/env only, skip interactive plugins that break the sandbox +if [[ -n "$CLAUDECODE" ]]; then + source ~/.shell/env + return +fi + # Source modular configs source ~/.shell/env # Source aliases -# Ignore if already exists -if [ -f ~/.bash_aliases ]; then -. ~/.bash_aliases -fi +[ -f ~/.bash_aliases ] && . ~/.bash_aliases ## Vim mode in Bash # Activate vim mode set -o vi -# TODO: Figure out why the cursor isn't changing in insert mode - # Remove mode-switching delay KEYTIMEOUT=1 -## Custom Prompt - -# colours -txtcyn='\[\e[0;96m\]' # Cyan -txtpur='\[\e[0;35m\]' # Purple -txtwht='\[\e[0;37m\]' # White -txtrst='\[\e[0m\]' # Text Reset - -# assign colours to prompt segments -pathC="${txtcyn}" -gitC="${txtpur}" -pointerC="${txtwht}" -normalC="${txtrst}" - -# get name of branch and wrap in parens -gitBranch() { - git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' -} -# build the prompt -export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} " +## Prompt + +# Use starship if available, otherwise fall back to custom PS1 +if command -v starship &>/dev/null; then + eval "$(starship init bash)" +else + # colours + txtcyn='\[\e[0;96m\]' # Cyan + txtpur='\[\e[0;35m\]' # Purple + txtwht='\[\e[0;37m\]' # White + txtrst='\[\e[0m\]' # Text Reset + + # assign colours to prompt segments + pathC="${txtcyn}" + gitC="${txtpur}" + pointerC="${txtwht}" + normalC="${txtrst}" + + # get name of branch and wrap in parens + gitBranch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' + } + # build the prompt + export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} " +fi # FZF (full config is in ~/.shell/env) [ -f ~/.fzf.bash ] && source ~/.fzf.bash -## Custom functions +## Shared functions (fzf helpers, etc.) +[ -f ~/.shell/functions ] && source ~/.shell/functions -function take() { - mkdir $1 && cd $1 -} +# Atuin (shell history) +[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh +command -v atuin &>/dev/null && eval "$(atuin init bash)" diff --git a/shell/common/aliases b/shell/common/aliases index c848218..a1134b0 100644 --- a/shell/common/aliases +++ b/shell/common/aliases @@ -3,26 +3,29 @@ # Always copy recursively & explain what was done alias cp='cp -rv' # List contents with colors for file types, (A)lmost all hidden files (without . and ..), in (C)olumns, with class indicators (F) -alias ls='ls -ACFG' +alias ls='ls -ACF --color=auto' # List contents with colors for file types, (a)ll hidden entries (including . and ..), use (l)ong listing format, with class indicators (F) -alias ll='ls -alFG' +alias ll='ls -alF --color=auto' # Explain (v) what was done when moving a file alias mv='mv -v' # Create any non-existent (p)arent directories and explain (v) what was done alias mkdir='mkdir -pv' # Always try to (c)ontinue getting a partially-downloaded file alias wget='wget -c' +# Colorize grep output +alias grep='grep --color=auto' -# Copying/pasting to/from clipboard -alias pbcopy='xclip -sel clip' -alias pbpaste='xclip -sel clip -o' +# Copying/pasting to/from Wayland clipboard — only set when Wayland is running +if [[ -n "$WAYLAND_DISPLAY" ]]; then + alias pbcopy='wl-copy' + alias pbpaste='wl-paste' +fi # Common typos alias exti='exit' alias eit='exit' alias eitx='exit' alias eixt='exit' -alias eitx='exit' alias xit='exit' alias wxit='exit' alias wit='exit' @@ -30,30 +33,32 @@ alias :x='exit' alias :q='exit' # Config -export DOTFILES="~/Projects/dotfiles" +export DOTFILES="$HOME/.dotfiles" -alias vimrc="vim $DOTFILES/vim/vimrc" alias bashrc='vim $DOTFILES/shell/bash/bashrc' alias bashpr='nvim $DOTFILES/shell/bash/bash_profile' -alias zshrc='nvim $DOTFILES/shell/zsh/zshrc' -alias srcz='source ~/.zshrc' alias srcb='source ~/.bashrc' alias config='nvim $DOTFILES' alias dotfiles='~/.dotfiles/install' # Miscellaneous Shortcuts alias c="clear" -alias cdl="cd $1 && ls" +cdl() { cd "$1" && ls; } alias ping8='ping 8.8.8.8' -alias brewup='brew update; brew upgrade; brew prune; brew cleanup; brew doctor' # Open Vim if there is no current background job alias fg='if [[ $(jobs) ]]; then fg; else nvim; fi' +# SCM Breeze (git aliases, numbered shortcuts, repo index) +# Disabled inside Claude Code sessions — see https://github.com/anthropics/claude-code/issues/16123 +if [[ -z "$CLAUDECODE" ]]; then + [ -s "$HOME/.scm_breeze/scm_breeze.sh" ] && source "$HOME/.scm_breeze/scm_breeze.sh" +fi + # Watson Time Tracker -alias t='watson' -alias tst='watson status' -alias tp='watson start pa' +alias t='source ~/venv/bin/activate && watson' +alias tst='source ~/venv/bin/activate && watson status' +alias tp='source ~/venv/bin/activate && watson start pa' # Quick search w/ Lynx alias s='lynx_search' @@ -61,16 +66,13 @@ alias s='lynx_search' # How Do I? alias h='function hdi(){ howdoi $* -c -n 5; }; hdi' -# bat is cat with syntax highlighting -alias cat='bat' +# bat is cat with syntax highlighting — only alias if installed +command -v bat &>/dev/null && alias cat='bat' -# vifm -alias v='vifm' +# kitty SSH integration — fixes colors/terminfo on all SSH connections from kitty +command -v kitten &>/dev/null && alias ssh='kitten ssh' # NPM alias n='pnpm run' alias nd='pnpm run dev' alias ns='pnpm run start' - -# Suppress message telling you to use zsh instead of bash -export BASH_SILENCE_DEPRECATION_WARNING=1 diff --git a/shell/common/env b/shell/common/env index 7452c1d..5517023 100644 --- a/shell/common/env +++ b/shell/common/env @@ -1,39 +1,57 @@ -# Use tmux if available -if [ -z "$TMUX" ]; then - tmux attach -t default || tmux new -s default -fi +# Local secrets (not tracked by git) +[ -f ~/.shell/secrets ] && source ~/.shell/secrets -# Use Vim -if [[ -n $SSH_CONNECTION ]]; then - export EDITOR='vim' -else +# Add to PATH only if not already present +_path_prepend() { case ":$PATH:" in *":$1:"*) ;; *) export PATH="$1:$PATH" ;; esac; } +_path_append() { case ":$PATH:" in *":$1:"*) ;; *) export PATH="$PATH:$1" ;; esac; } + +if command -v nvim &>/dev/null; then export EDITOR='nvim' +else + export EDITOR='vim' fi -# SCM Breeze -[ -s "/Users/jackson/.scm_breeze/scm_breeze.sh" ] && source "/Users/jackson/.scm_breeze/scm_breeze.sh" - -# Vim -export PATH=$PATH:~/.vimpkg/bin +# SSH-specific overrides (clipboard, etc.) +[[ -n "$SSH_CONNECTION" ]] && [ -f ~/.shell/ssh ] && source ~/.shell/ssh # Scripts -export PATH=$PATH:~/scripts +_path_append "$HOME/scripts" # Lynx web browser export LYNX_LSS=$HOME/.config/lynx/lynx.lss export LYNX_CFG=$HOME/.config/lynx/lynx.cfg # Go -export GOPATH=$HOME/go -export PATH=$PATH:$GOPATH/bin - -# Android -export ANDROID_SDK=/Users/jackson/Library/Android/sdk -export PATH=$PATH:/Users/jackson/platform-tools +export GOPATH="$HOME/go" +_path_append "$GOPATH/bin" +# Go toolchain binary (system-installed, e.g. /usr/local/go on servers) +[ -d /usr/local/go/bin ] && _path_prepend /usr/local/go/bin # Deno -export DENO_INSTALL="/Users/jackson/.deno" -export PATH="$DENO_INSTALL/bin:$PATH" +export DENO_INSTALL="$HOME/.deno" +_path_prepend "$DENO_INSTALL/bin" + +# Cargo/Rust +_path_prepend "$HOME/.cargo/bin" + +# pnpm +export PNPM_HOME="$HOME/.local/share/pnpm" +_path_prepend "$PNPM_HOME" + +# pipx +_path_append "$HOME/.local/bin" + +# opencode +_path_prepend "$HOME/.opencode/bin" + +# NVM +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" + +# Google Cloud SDK +if [ -f "$HOME/google-cloud-sdk/path.bash.inc" ]; then . "$HOME/google-cloud-sdk/path.bash.inc"; fi +if [ -f "$HOME/google-cloud-sdk/completion.bash.inc" ]; then . "$HOME/google-cloud-sdk/completion.bash.inc"; fi # This removes repeated commands in terminal history export HISTCONTROL=ignoreboth:erasedups @@ -48,14 +66,30 @@ export REVIEW_BASE=master # bat syntax highlighting export BAT_THEME="Dracula" - # FZF Config -export FZF_DEFAULT_COMMAND='rg --files --hidden --no-ignore-vcs -g "!{.git/*,__sapper__/*,functions/__sapper__/*,node_modules/*,*/node_modules/*,.vscode/*,.firebase/*,*/bundle/*}"' +export FZF_DEFAULT_COMMAND='rg --files --hidden --no-ignore-vcs -g "!{.git/*,__sapper__/*,functions/__sapper__/*,node_modules/*,*/node_modules/*,.vscode/*,.firebase/*,*/bundle/*}"' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" export FZF_CTRL_R_OPTS="--preview 'echo {}' --preview-window down:3:hidden:wrap --bind '?:toggle-preview'" export FZF_DEFAULT_OPTS=' --height 96% --reverse ---preview "cat {}" +--preview "bat --color=always --style=numbers {} 2>/dev/null || cat {}" --bind ctrl-a:select-all ' + +# Solve issue w/ fetch failing b/c of a too short timeout +# see https://github.com/nodejs/undici/issues/2990 +export NODE_OPTIONS="--network-family-autoselection-attempt-timeout=500" + +# Use tmux if available (interactive shells only, skip in Claude Code) +if [[ -z "$CLAUDECODE" ]] && [ -z "$TMUX" ] && [[ $- == *i* ]]; then + if [[ -n "$SSH_CONNECTION" ]]; then + _tmux_session="ssh-$(hostname -s)" + tmux attach -d -t "$_tmux_session" || tmux new -s "$_tmux_session" + unset _tmux_session + else + # Each terminal gets its own session (no mirroring). + # detach-on-destroy off lets you cycle to other sessions if you want. + exec tmux new-session + fi +fi diff --git a/shell/common/functions b/shell/common/functions new file mode 100644 index 0000000..0bbf995 --- /dev/null +++ b/shell/common/functions @@ -0,0 +1,105 @@ +# Shared shell functions (sourced by both bash and zsh) + +function take() { + mkdir "$1" && cd "$1" +} + +# Open file with fzf +# fe [FUZZY PATTERN] - Open the selected file with the default editor +# - Bypass fuzzy finder if there's only one match (--select-1) +# - Exit if there's no match (--exit-0) +fe() { + local files=() + while IFS= read -r f; do + files+=("$f") + done < <(fzf --query="$1" --multi --select-1 --exit-0) + [[ ${#files[@]} -gt 0 ]] && ${EDITOR:-vim} "${files[@]}" +} + +# fcd - cd to selected directory (requires fd: https://github.com/sharkdp/fd) +fcd() { + command -v fd >/dev/null || { echo "fd is required: https://github.com/sharkdp/fd"; return 1; } + local dir + dir=$(fd . "${1:-.}" --type=d | fzf --no-multi --layout=reverse --height=40%) && + cd "$dir" +} + +# fcda - including hidden directories (requires fd) +fcda() { + command -v fd >/dev/null || { echo "fd is required: https://github.com/sharkdp/fd"; return 1; } + local dir + dir=$(fd . "${1:-.}" --hidden --type=d | fzf --no-multi --layout=reverse --height=40%) && + cd "$dir" +} + +# cds - cd into the directory of the selected file +cds() { + local file + local dir + file=$(fzf --query "$1" --no-multi --layout=reverse --height=40%) && dir=$(dirname "$file") && cd "$dir" +} + +# fcb - git commit browser +fcb() { + git log --graph --color=always \ + --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | + fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \ + --bind "ctrl-m:execute: + (grep -o '[a-f0-9]\{7,\}' | head -1 | + xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF' + {} +FZF-EOF" +} + +# fgst - easier way to deal with stashes +# type fgst to get a list of your stashes +# enter shows you the contents of the stash +# ctrl-d shows a diff of the stash against your current HEAD +# ctrl-b checks the stash out as a branch, for easier merging +fgst() { + local out q k sha + while out=$( + git stash list --pretty="%C(yellow)%h %>(14)%Cgreen%cr %C(blue)%gs" | + fzf --ansi --no-sort --query="$q" --print-query \ + --expect=ctrl-d,ctrl-b); + do + q=$(echo "$out" | head -1) + k=$(echo "$out" | sed -n '2p') + sha=$(echo "$out" | tail -1) + sha="${sha%% *}" + [[ -z "$sha" ]] && continue + if [[ "$k" == 'ctrl-d' ]]; then + git diff "$sha" + elif [[ "$k" == 'ctrl-b' ]]; then + git stash branch "stash-$sha" "$sha" + break; + else + git stash show -p "$sha" + fi + done +} + +# fbr - checkout git branch (including remote branches) +fbr() { + local branches branch + branches=$(git branch --all | grep -v HEAD) && + branch=$(echo "$branches" | + fzf --no-multi --layout=reverse --height=40%) && + git checkout "$(echo "$branch" | sed "s/.* //" | sed "s#remotes/[^/]*/##")" +} + +# fcoc - checkout git commit +fcoc() { + local commits commit + commits=$(git log --pretty=oneline --abbrev-commit --reverse) && + commit=$(echo "$commits" | fzf --tac --no-sort --no-multi --exact) && + git checkout "$(echo "$commit" | sed "s/ .*//")" +} + +# fta - tmux attach session with fzf +fta() { + local session + session=$(tmux list-sessions -F "#{session_name}" | \ + fzf --layout=reverse --height=20% --query="$1" --select-1 --exit-0) && + tmux attach -d -t "$session" +} diff --git a/shell/common/login b/shell/common/login new file mode 100644 index 0000000..bfe8066 --- /dev/null +++ b/shell/common/login @@ -0,0 +1,9 @@ +# Shared login tasks (sourced by bash_profile and zprofile) + +# Atuin (shell history) +[ -f "$HOME/.atuin/bin/env" ] && . "$HOME/.atuin/bin/env" + +# Auto-start Hyprland on TTY1 (Arch) +if [ -z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" = "1" ]; then + command -v start-hyprland &>/dev/null && exec start-hyprland +fi diff --git a/shell/common/ssh b/shell/common/ssh new file mode 100644 index 0000000..87f69a2 --- /dev/null +++ b/shell/common/ssh @@ -0,0 +1,16 @@ +# SSH-specific shell overrides +# Sourced automatically when $SSH_CONNECTION is set (see shell/common/env) + +# Disable XON/XOFF flow control so C-s (tmux prefix over SSH) isn't swallowed +stty -ixon + +# OSC52 clipboard: copies to local clipboard through SSH tunnel +# (supported by kitty, wezterm, most modern terminals) +# pbpaste via OSC52 is not widely supported — skipped intentionally +alias pbcopy='printf "\033]52;c;%s\a" "$(base64 -w0)"' + +# tools that may not exist on remote — safe fallbacks +command -v bat &>/dev/null || unalias cat 2>/dev/null + +# Prevent Hyprland-specific aliases from failing +unalias s 2>/dev/null # lynx_search (may not be installed) diff --git a/shell/zsh/zshrc b/shell/zsh/zshrc deleted file mode 100644 index ffe985d..0000000 --- a/shell/zsh/zshrc +++ /dev/null @@ -1,100 +0,0 @@ -# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. -if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then - source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" -fi -typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet - -# Path to your oh-my-zsh installation. -export ZSH=/Users/jackson/.oh-my-zsh - -ZSH_THEME="powerlevel10k/powerlevel10k" -DISABLE_AUTO_TITLE="true" -DISABLE_UNTRACKED_FILES_DIRTY="true" -HIST_STAMPS="dd.mm.yyyy" - -plugins=( - git - node - cp - python - npm - man - z - zsh-autosuggestions -) - -source $ZSH/oh-my-zsh.sh - -# Source modular configs -source ~/.shell/env - -# Source aliases -source $HOME/.bash_aliases - -export TERM=xterm - -# ssh -# export SSH_KEY_PATH="~/.ssh/rsa_id" - -# Set tab title to current working directory -# Use % instead of %1 to get full path -# Instead of just the last segment -case $TERM in - xterm*) - precmd () {print -Pn "\e]0;%1~\a"} - ;; -esac - -# Alias Expansion -function expand-alias() { - zle _expand_alias - zle self-insert -} -zle -N expand-alias -bindkey -M main ' ' expand-alias - - -## Vim mode in ZSH -# Activate vim mode -bindkey -v - -# Remove mode-switching delay -KEYTIMEOUT=5 - -# Change cursor shape for different vi modes. -function zle-keymap-select { - if [[ ${KEYMAP} == vicmd ]] || - [[ $1 = 'block' ]]; then - echo -ne '\e[1 q' - - elif [[ ${KEYMAP} == main ]] || - [[ ${KEYMAP} == viins ]] || - [[ ${KEYMAP} = '' ]] || - [[ $1 = 'beam' ]]; then - echo -ne '\e[5 q' - fi -} -zle -N zle-keymap-select - -_fix_cursor() { - echo -ne '\e[5 q' -} - -precmd_functions+=(_fix_cursor) - -# FZF (full config is in ~/.shell/env) -[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh - -# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. -[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh -source /usr/local/opt/powerlevel10k/powerlevel10k.zsh-theme - -# pnpm -export PNPM_HOME="/Users/jackson/Library/pnpm" -case ":$PATH:" in - *":$PNPM_HOME:"*) ;; - *) export PATH="$PNPM_HOME:$PATH" ;; -esac -# pnpm end diff --git a/starship.toml b/starship.toml new file mode 100644 index 0000000..0aae355 --- /dev/null +++ b/starship.toml @@ -0,0 +1,65 @@ +format = """ +[░▒▓](#a3aed2)\ +[  ](bg:#a3aed2 fg:#090c0c)\ +[](bg:#769ff0 fg:#a3aed2)\ +$directory\ +[](fg:#769ff0 bg:#394260)\ +$git_branch\ +$git_status\ +[](fg:#394260 bg:#212736)\ +$nodejs\ +$rust\ +$golang\ +$php\ +[](fg:#212736 bg:#1d2230)\ +$time\ +[ ](fg:#1d2230)\ +\n$character""" + +[directory] +style = "fg:#e3e5e5 bg:#769ff0" +format = "[ $path ]($style)" +truncation_length = 3 +truncation_symbol = "…/" + +[directory.substitutions] +"Documents" = " " +"Downloads" = " " +"Music" = " " +"Pictures" = " " + +[git_branch] +symbol = "" +style = "bg:#394260" +format = '[[ $symbol $branch ](fg:#769ff0 bg:#394260)]($style)' + +[git_status] +style = "bg:#394260" +format = '[[($all_status$ahead_behind )](fg:#769ff0 bg:#394260)]($style)' + +[nodejs] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[rust] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[golang] +symbol = "ﳑ" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[php] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[time] +disabled = true +time_format = "%R" # Hour:Minute Format +style = "bg:#1d2230" +format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' + diff --git a/swaylock/config b/swaylock/config new file mode 100644 index 0000000..31dc051 --- /dev/null +++ b/swaylock/config @@ -0,0 +1,38 @@ +daemonize +show-failed-attempts +clock +screenshot +effect-blur=9x5 +effect-vignette=0.5:0.5 +color=1f1d2e80 +font="Inter" +indicator +indicator-radius=200 +indicator-thickness=20 +line-color=1f1d2e +ring-color=191724 +inside-color=1f1d2e +key-hl-color=eb6f92 +separator-color=00000000 +text-color=e0def4 +text-caps-lock-color="" +line-ver-color=eb6f92 +ring-ver-color=eb6f92 +inside-ver-color=1f1d2e +text-ver-color=e0def4 +ring-wrong-color=31748f +text-wrong-color=31748f +inside-wrong-color=1f1d2e +inside-clear-color=1f1d2e +text-clear-color=e0def4 +ring-clear-color=9ccfd8 +line-clear-color=1f1d2e +line-wrong-color=1f1d2e +bs-hl-color=31748f +grace=2 +grace-no-mouse +grace-no-touch +datestr=%a,%e %B +timestr=%H:%M +fade-in=0.2 +ignore-empty-password diff --git a/tmux.conf b/tmux.conf index aed7681..7002467 100644 --- a/tmux.conf +++ b/tmux.conf @@ -3,9 +3,6 @@ set-environment -g PATH "/usr/local/bin:/bin:/usr/bin" # reload config file (change file location to your the tmux.conf you want to use) bind r source-file ~/.tmux.conf -# remap C-b to C-a -set -g prefix C-a - # tmux messages are displayed for 4 seconds set -g display-time 4000 @@ -18,6 +15,9 @@ set -s escape-time 50 # more scrollback set-option -g history-limit 3000 +# When a session is destroyed, switch to another session instead of detaching +set-option -g detach-on-destroy off + # split panes using | and - # (and open new panes & windows in current directory) bind | split-window -h -c "#{pane_current_path}" @@ -36,31 +36,72 @@ is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ is_fzf="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?fzf$'" -bind -n C-h run "($is_vim && tmux send-keys C-h) || \ - tmux select-pane -L" +# Local: bind -n (no prefix) so C-h/j/k/l works seamlessly +# SSH: prefix + h/j/k/l since outer tmux intercepts C-h/j/k/l +if-shell 'test -n "$SSH_CONNECTION"' \ + 'bind h run "($is_vim && tmux send-keys C-h) || tmux select-pane -L"' \ + 'bind -n C-h run "($is_vim && tmux send-keys C-h) || tmux select-pane -L"' + +if-shell 'test -n "$SSH_CONNECTION"' \ + 'bind j run "($is_vim && tmux send-keys C-j) || ($is_fzf && tmux send-keys C-j) || tmux select-pane -D"' \ + 'bind -n C-j run "($is_vim && tmux send-keys C-j) || ($is_fzf && tmux send-keys C-j) || tmux select-pane -D"' + +if-shell 'test -n "$SSH_CONNECTION"' \ + 'bind k run "($is_vim && tmux send-keys C-k) || ($is_fzf && tmux send-keys C-k) || tmux select-pane -U"' \ + 'bind -n C-k run "($is_vim && tmux send-keys C-k) || ($is_fzf && tmux send-keys C-k) || tmux select-pane -U"' -bind -n C-j run "($is_vim & tmux send-keys C-j) || \ - ($is_fzf && tmux send-keys C-j) || \ - tmux select-pane -D" +if-shell 'test -n "$SSH_CONNECTION"' \ + 'bind l run "($is_vim && tmux send-keys C-l) || tmux select-pane -R"' \ + 'bind -n C-l run "($is_vim && tmux send-keys C-l) || tmux select-pane -R"' -bind -n C-k run "($is_vim && tmux send-keys C-k) || \ - ($is_fzf && tmux send-keys C-k) || \ - tmux select-pane -U" +if-shell 'test -n "$SSH_CONNECTION"' \ + 'bind \\ if-shell "$is_vim" "send-keys C-\\\\" "select-pane -l"' \ + 'bind -n "C-\\" if-shell "$is_vim" "send-keys C-\\\\" "select-pane -l"' -bind -n C-l run "($is_vim && tmux send-keys C-l) || \ - tmux select-pane -R" +# prefix + C-l to clear console (b/c C-l is remapped above locally) +if-shell 'test -z "$SSH_CONNECTION"' \ + 'bind C-l send-keys "C-l"' -bind -n 'C-\' if-shell "$is_vim" "send-keys C-\\\\" "select-pane -l" -# prefix + C-l to clear console (b/c C-l is remapped above) -bind C-l send-keys 'C-l' +# --- Prefix & Theme: SSH-aware --- +# Local: C-a prefix, Dracula (purple/blue) +# SSH: C-s prefix, Catppuccin Mocha (peach/yellow) +# Prefix +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g prefix C-s; unbind C-a; bind C-s send-prefix' \ + 'set -g prefix C-a; unbind C-b; bind C-a send-prefix' -# status bar colors +# Status bar interval set-option -g status-interval 1 -set -g status-style bg='#44475a',fg='#bd93f9' -set -g status-left '#[bg=#f8f8f2]#[fg=#282a36]#{?client_prefix,#[bg=#ff79c6],}' -set -g message-style bg='#44475a',fg='#8be9fd' + +# Theme colors +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g status-style bg=#313244,fg=#fab387' \ + 'set -g status-style bg=#44475a,fg=#bd93f9' + +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g status-left "#[fg=#f9e2af]Sessions: #(~/.tmux/scripts/sessions.sh)#[fg=#585b70]│ #[fg=#f9e2af]Windows: "' \ + 'set -g status-left "#[fg=#90d0f2]Sessions: #(~/.tmux/scripts/sessions.sh)#[fg=#6272a4]│ #[fg=#90d0f2]Windows: "' + +set -g status-left-length 60 + +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g message-style bg=#313244,fg=#f5c2e7' \ + 'set -g message-style bg=#44475a,fg=#8be9fd' + +# Window list styling +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g window-status-current-style fg=#fab387,bold' \ + 'set -g window-status-current-style fg=#bd93f9,bold' + +set -g window-status-current-format ' #I:#W ' + +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g window-status-style fg=#a6adc8' \ + 'set -g window-status-style fg=#bfbfbf' + +set -g window-status-format ' #I:#W ' # Enable mouse mode set -g mouse on @@ -77,17 +118,26 @@ set -g bell-action none ## Plugins -set -g @plugin 'tmux-plugins/tmux-battery' set -g @plugin 'tmux-plugins/tpm' -set -g @plugin 'xamut/tmux-spotify' set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-continuum' -# Status bar w/ time & battery percentage -set -g status-right '%H:%M:%S #[fg=blue]%a %d-%m-%y W%V |#{battery_status_bg} Batt #{battery_percentage} ' +# Status bar w/ time, date, week number (+ SSH label on remote) +if-shell 'test -n "$SSH_CONNECTION"' \ + 'set -g status-right "#[fg=#fab387,bold]SSH #[fg=default]%H:%M:%S #[fg=green]%a %Y-%m-%d W%V"' \ + 'set -g status-right "%H:%M:%S #[fg=green]%a %Y-%m-%d W%V"' + +set -g status-right-length 120 # tmux resurrect set -g @resurrect-strategy-nvim 'session' +# tmux continuum - auto-save every 15 min, auto-restore on start +set -g @continuum-restore 'on' +set -g @continuum-save-interval '15' + ## Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) run -b '~/.tmux/plugins/tpm/tpm' + +## test diff --git a/tmux/scripts/sessions.sh b/tmux/scripts/sessions.sh new file mode 100755 index 0000000..434d616 --- /dev/null +++ b/tmux/scripts/sessions.sh @@ -0,0 +1,19 @@ +#!/bin/bash +current=$(tmux display-message -p '#S') + +# SSH: peach/Catppuccin Mocha; Local: purple/Dracula +if [ -n "$SSH_CONNECTION" ]; then + active_color="#fab387" + inactive_color="#a6adc8" +else + active_color="#bd93f9" + inactive_color="#bfbfbf" +fi + +tmux list-sessions -F '#S' | while read -r s; do + if [ "$s" = "$current" ]; then + printf "#[fg=%s,bold]%s " "$active_color" "$s" + else + printf "#[fg=%s,nobold]%s " "$inactive_color" "$s" + fi +done diff --git a/vifm/colors/Default.vifm b/vifm/colors/Default.vifm deleted file mode 100644 index a19cf21..0000000 --- a/vifm/colors/Default.vifm +++ /dev/null @@ -1,81 +0,0 @@ -" You can edit this file by hand. -" The " character at the beginning of a line comments out the line. -" Blank lines are ignored. - -" The Default color scheme is used for any directory that does not have -" a specified scheme and for parts of user interface like menus. A -" color scheme set for a base directory will also -" be used for the sub directories. - -" The standard ncurses colors are: -" Default = -1 = None, can be used for transparency or default color -" Black = 0 -" Red = 1 -" Green = 2 -" Yellow = 3 -" Blue = 4 -" Magenta = 5 -" Cyan = 6 -" White = 7 - -" Light versions of colors are also available (set bold attribute): -" LightBlack -" LightRed -" LightGreen -" LightYellow -" LightBlue -" LightMagenta -" LightCyan -" LightWhite - -" Available attributes (some of them can be combined): -" bold -" underline -" reverse or inverse -" standout -" italic (on unsupported systems becomes reverse) -" none - -" Vifm supports 256 colors you can use color numbers 0-255 -" (requires properly set up terminal: set your TERM environment variable -" (directly or using resources) to some color terminal name (e.g. -" xterm-256color) from /usr/lib/terminfo/; you can check current number -" of colors in your terminal with tput colors command) - -" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color - -highlight clear - -highlight Win cterm=none ctermfg=white ctermbg=black -highlight Directory cterm=bold ctermfg=cyan ctermbg=default -highlight Link cterm=bold ctermfg=yellow ctermbg=default -highlight BrokenLink cterm=bold ctermfg=red ctermbg=default -highlight Socket cterm=bold ctermfg=magenta ctermbg=default -highlight Device cterm=bold ctermfg=red ctermbg=default -highlight Fifo cterm=bold ctermfg=cyan ctermbg=default -highlight Executable cterm=bold ctermfg=green ctermbg=default -highlight Selected cterm=bold ctermfg=magenta ctermbg=default -highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default -highlight TopLine cterm=none ctermfg=black ctermbg=white -highlight TopLineSel cterm=bold ctermfg=black ctermbg=default -highlight StatusLine cterm=bold ctermfg=black ctermbg=white -highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black -highlight CmdLine cterm=none ctermfg=white ctermbg=black -highlight ErrorMsg cterm=none ctermfg=red ctermbg=black -highlight Border cterm=none ctermfg=black ctermbg=white -highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white -highlight SuggestBox cterm=bold ctermfg=default ctermbg=default -highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red -highlight AuxWin cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight TabLine cterm=none ctermfg=white ctermbg=black -highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default -highlight User1 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User2 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User3 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User4 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User5 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User6 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User7 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User8 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User9 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight OtherWin cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default diff --git a/vifm/scripts/README b/vifm/scripts/README deleted file mode 100644 index 7694952..0000000 --- a/vifm/scripts/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory is dedicated for user-supplied scripts/executables. -vifm modifies its PATH environment variable to let user run those -scripts without specifying full path. All subdirectories are added -as well. File in a subdirectory overrules file with the same name -in parent directories. Restart might be needed to recognize files -in newly created or renamed subdirectories. \ No newline at end of file diff --git a/vifm/vifm-help.txt b/vifm/vifm-help.txt deleted file mode 100644 index 5bb61b4..0000000 --- a/vifm/vifm-help.txt +++ /dev/null @@ -1,6213 +0,0 @@ -VIFM(1) VIFM(1) - - - -NAME - vifm - vi file manager - -SYNOPSIS - vifm [OPTION]... - vifm [OPTION]... path - vifm [OPTION]... path path - -DESCRIPTION - Vifm is an ncurses based file manager with vi like keybindings. If you - use vi, vifm gives you complete keyboard control over your files with- - out having to learn a new set of commands. - -OPTIONS - vifm starts in the current directory unless it is given a different - directory on the command line or 'vifminfo' option includes "savedirs" - (in which case last visited directories are used as defaults). - - - Read list of files from standard input stream and compose custom - view out of them (see "Custom views" section). Current working - directory is used as a base for relative paths. - - Starts Vifm in the specified path. - - - Starts Vifm in the specified paths. - - Specifying two directories triggers split view even when vifm was in - single-view mode on finishing previous session. To suppress this be- - haviour :only command can be put in the vifmrc file. - - When only one path argument is found on command-line, the left/top pane - is automatically set as the current view. - - Paths to files are also allowed in case you want vifm to start with - some archive opened. - - --select - Open parent directory of the given path and select specified - file in it. - - -f Makes vifm instead of opening files write selection to - $VIFM/vimfiles and quit. - - --choose-files |- - Sets output file to write selection into on exit instead of - opening files. "-" means standard output. Use empty value to - disable it. - - --choose-dir |- - Sets output file to write last visited directory into on exit. - "-" means standard output. Use empty value to disable it. - - --delimiter - Sets separator for list of file paths written out by vifm. - Empty value means null character. Default is new line charac- - ter. - - --on-choose - Sets command to be executed on selected files instead of opening - them. The command may use any of macros described in "Command - macros" section below. The command is executed once for whole - selection. - - --logging[=] - Log some operational details $VIFM/log. If the optional startup - log path is specified and permissions allow to open it for writ- - ing, then logging of early initialization (before value of $VIFM - is determined) is put there. - - --server-list - List available server names and exit. - - --server-name - Name of target or this instance (sequential numbers are appended - on name conflict). - - --remote - Sends the rest of the command line to another instance of vifm, - --server-name is treated just like any other argument and should - precede --remote on the command line. When there is no server, - quits silently. There is no limit on how many arguments can be - processed. One can combine --remote with -c or + to execute commands in already running instance of vifm. - See also "Client-Server" section below. - - --remote-expr - passes expression to vifm server and prints result. See also - "Client-Server" section below. - - -c or + - Run command-line mode on startup. Commands in such - arguments are executed in the order they appear in command line. - Commands with spaces or special symbols must be enclosed in dou- - ble or single quotes or all special symbols should be escaped - (the exact syntax strongly depends on shell). "+" argument is - equivalent to "$" and thus picks last item of of the view. - - --help, -h - Show a brief command summary and exit vifm. - - --version, -v - Show version information and quit. - - --no-configs - Skip reading vifmrc and vifminfo. - - - See "Startup" section below for the explanations on $VIFM. - -General keys - Ctrl-C or Escape - cancel most operations (see "Cancellation" section below), clear - all selected files. - - Ctrl-L clear and redraw the screen. - -Basic Movement - The basic vi key bindings are used to move through the files and pop-up - windows. - - k, gk, or Ctrl-P - move cursor up one line. - - j, gj or Ctrl-N - move cursor down one line. - - h when 'lsview' is off move up one directory (moves to parent - directory node in tree view), otherwise move left one file. - - l when 'lsview' is off move into a directory or launches a file, - otherwise move right one file. - - gg move to the first line of the file list. - - G move to the last line in the file list. - - gh go up one directory regardless of view representation (regular, - ls-like). Also can be used to leave custom views including tree - view. - - gl or Enter - enter directory or launch a file. - - H move to the first file in the window. - - M move to the file in the middle of the window. - - L move to the last file in the window. - - Ctrl-F or Page Down - move forward one page. - - Ctrl-B or Page Up - move back one page. - - Ctrl-D jump back one half page. - - Ctrl-U jump forward one half page. - - n% move to the file that is n percent from the top of the list (for - example 25%). - - 0 or ^ move cursor to the first column. See 'lsview' option descrip- - tion. - - $ move cursor to the last column. See 'lsview' option descrip- - tion. - - Space switch file lists. - - gt switch to the next tab (wrapping around). - - {n}gt switch to the tab number {n} (wrapping around). - - gT switch to the previous tab (wrapping around). - - {n}gT switch to {n}-th previous tab. - -Movement with Count - Most movement commands also accept a count, 12j would move down 12 - files. - - [count]% - move to percent of the file list. - - [count]j - move down [count] files. - - [count]k - move up [count] files. - - [count]G or [count]gg - move to list position [count]. - - [count]h - go up [count] directories. - -Scrolling panes - zt redraw pane with file in top of list. - - zz redraw pane with file in center of list. - - zb redraw pane with file in bottom of list. - - Ctrl-E scroll pane one line down. - - Ctrl-Y scroll pane one line up. - -Pane manipulation - Second character can be entered with or without Control key. - - Ctrl-W H - move the pane to the far left. - - Ctrl-W J - move the pane to the very bottom. - - Ctrl-W K - move the pane to the very top. - - Ctrl-W L - move the pane to the far right. - - - Ctrl-W h - switch to the left pane. - - Ctrl-W j - switch to the pane below. - - Ctrl-W k - switch to the pane above. - - Ctrl-W l - switch to the right pane. - - - Ctrl-W b - switch to bottom-right window. - - Ctrl-W t - switch to top-left window. - - - Ctrl-W p - switch to previous window. - - Ctrl-W w - switch to other pane. - - - Ctrl-W o - leave only one pane. - - Ctrl-W s - split window horizontally. - - Ctrl-W v - split window vertically. - - - Ctrl-W x - exchange panes. - - Ctrl-W z - quit preview pane or view modes. - - - Ctrl-W - - decrease size of the view by count. - - Ctrl-W + - increase size of the view by count. - - Ctrl-W < - decrease size of the view by count. - - Ctrl-W > - increase size of the view by count. - - - Ctrl-W | - set current view size to count. - - Ctrl-W _ - set current view size to count. - - Ctrl-W = - make size of two views equal. - - For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com- - mands count can be given before and/or after Ctrl-W. The resulting - count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases - window size by 4 lines or columns. - - Ctrl-W | and Ctrl-W _ maximise current view by default. - -Marks - Marks are set the same way as they are in vi. - - You can use these characters for marks [a-z][A-Z][0-9]. - - m[a-z][A-Z][0-9] - set a mark for the file at the current cursor position. - - '[a-z][A-Z][0-9] - navigate to the file set for the mark. - - - There are also several special marks that can't be set manually: - - - ' (single quote) - previously visited directory of the view, thus - hitting '' allows switching between two last locations - - - < - the first file of the last visually selected block - - - > - the last file of the last visually selected block - -Searching - /regular expression pattern - search for files matching regular expression in forward direc- - tion and advance cursor to next match. - - / perform forward search with top item of search pattern history. - - ?regular expression pattern - search for files matching regular expression in backward direc- - tion and advance cursor to previous match. - - ? perform backward search with top item of search pattern history. - - Trailing slash for directories is taken into account, so /\/ searches - for directories and symbolic links to directories. At the moment // - works too, but this can change in the future, so consider escaping the - slash if not typing pattern by hand. - - Matches are automatically selected if 'hlsearch' is set. Enabling - 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' - options affect case sensitivity of search queries. - - - [count]n - go to the next file matching last search pattern. Takes last - search direction into account. - - [count]N - go to the previous file matching last search pattern. Takes - last search direction into account. - - If 'hlsearch' option is set, hitting n/N to perform search and go to - the first matching item resets current selection in normal mode. It is - not the case if search was already performed on files in the directory, - thus selection is not reset after clearing selection with escape key - and hitting n/N key again. - - Note: vifm uses extended regular expressions for / and ?. - - - [count]f[character] - search forward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]F[character] - search backward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]; - find the next match of f or F. - - [count], - find the previous match of f or F. - - Note: f, F, ; and , wrap around list beginning and end when they are - used alone and they don't wrap when they are used as selectors. - -File Filters - There are three basic file filters: - - - dot files filter (does not affect "." and ".." special directories, - whose appearance is controlled by the 'dotdirs' option), see 'dot- - files' option; - - - permanent filter; - - - local filter (see description of the "=" normal mode command). - - Permanent filter essentially allows defining a group of files names - which are not desirable to be seen by default, like temporary or backup - files, which might be created alongside normal ones. Just like you - don't usually need to see hidden dot files (files starting with a dot). - Local filter on the other hand is for temporary immediate filtering of - file list at hand, to get rid of uninterested files in the view or to - make it possible to use % range in a :command. - - For the purposes of more deterministic editing permanent filter is - split into two parts: - - - one edited explicitly via :filter command; - - - another one which is edited implicitly via zf shortcut. - - Files are tested against both parts and a match counts if at least one - of the parts matched. - - - Each file list has its own copy of each filter. - - Filtered files are not checked in / search or :commands. - - Files and directories are filtered separately. This is done by append- - ing a slash to a directory name before testing whether it matches the - filter. Examples: - - - " filter directories which names end with '.files' - :filter /^.*\.files\/$/ - - " filter files which names end with '.d' - :filter {*.d} - - " filter files and directories which names end with '.o' - :filter /^.*\.o\/?$/ - - Note: vifm uses extended regular expressions. - - The basic vim folding key bindings are used for managing filters. - - - za toggle visibility of dot files. - - zo show dot files. - - zm hide dot files. - - zf add selected files to permanent filter. - - zO reset permanent filter. - - zR save and reset all filters. - - zr clear local filter. - - zM restore all filters (undoes last zR). - - zd exclude selection or current file from a custom view. Does - nothing for regular view. For tree view excluding directory - excludes that sub-tree. For compare views zd hides group of - adjacent identical files, count can be specified as 1 to exclude - just single file or selected items instead. Files excluded this - way are not counted as filtered out and can't be returned unless - view is reloaded. - - =regular expression pattern - filter out files that don't match regular expression. Whether - view is updated as regular expression is changed depends on the - value of the 'incsearch' option. This kind of filter is auto- - matically reset when directory is changed. - -Other Normal Mode Keys - [count]: - enter command line mode. [count] generates range. - - q: open external editor to prompt for command-line command. See - "Command line editing" section for details. - - q/ open external editor to prompt for search pattern to be searched - in forward direction. See "Command line editing" section for - details. - - q? open external editor to prompt for search pattern to be searched - in backward direction. See "Command line editing" section for - details. - - q= open external editor to prompt for filter pattern. See "Command - line editing" section for details. Unlike other q{x} commands - this one doesn't work in Visual mode. - - [count]!! and [count]! - enter command line mode with entered ! command. [count] modi- - fies range. - - Ctrl-O go backwards through directory history of current view. Nonex- - istent directories are automatically skipped. - - Ctrl-I if 'cpoptions' contains "t" flag, and switch active - pane just like does, otherwise it goes forward through - directory history of current view. Nonexistent directories are - automatically skipped. - - Ctrl-G create a window showing detailed information about the current - file. - - Shift-Tab - enters view mode (works only after activating view pane with - :view command). - - ga calculate directory size. Uses cached directory sizes when pos- - sible for better performance. As a special case calculating - size of ".." entry results in calculation of size of current - directory. - - gA like ga, but force update. Ignores old values of directory - sizes. - - If file under cursor is selected, each selected item is processed, oth- - erwise only current file is updated. - - gf find link destination (like l with 'followlinks' off, but also - finds directories). - - gr only for MS-Windows - same as l key, but tries to run program with administrative - privileges. - - av go to visual mode into selection amending state preserving cur- - rent selection. - - gv go to visual mode restoring last selection. - - [reg]gs - when no register is specified, restore last t selection (similar - to what gv does for visual mode selection). If register is - present, then all files listed in that register and which are - visible in current view are selected. - - gu - make names of selected files lowercase. - - [count]guu and [count]gugu - make names of [count] files starting from the current one lower- - case. Without [count] only current file is affected. - - gU - make names of selected files uppercase. - - [count]gUU and [count]gUgU - make names of [count] files starting from the current one upper- - case. Without [count] only current file is affected. - - e explore file in the current pane. - - i handle file (even if it's an executable and 'runexec' option is - set). - - cw change word is used to rename a file or files. - - cW change WORD is used to change only name of file (without exten- - sion). - - cl change link target. - - co only for *nix - change file owner. - - cg only for *nix - change file group. - - [count]cp - change file attributes (permission on *nix and properties on - Windows). If [count] is specified, it's treated as numerical - argument for non-recursive `chmod` command (of the form - [0-7]{3,4}). - - [count]C - clone file [count] times. - - [count]dd or d[count]selector - move selected file or files to trash directory (if 'trash' - option is set, otherwise delete). See "Trash directory" section - below. - - [count]DD or D[count]selector - like dd and d, but omitting trash directory (even when - 'trash' option is set). - - Y, [count]yy or y[count]selector - yank selected files. - - p copy yanked files to the current directory or move the files to - the current directory if they were deleted with dd or :d[elete] - or if the files were yanked from trash directory. See "Trash - directory" section below. - - P move the last yanked files. The advantage of using P instead of - d followed by p is that P moves files only once. This isn't - important in case you're moving files in the same file system - where your home directory is, but using P to move files on some - other file system (or file systems, in case you want to move - files from fs1 to fs2 and your home is on fs3) can save your - time. - - al put symbolic links with absolute paths. - - rl put symbolic links with relative paths. - - t select or unselect (tag) the current file. - - u undo last change. - - Ctrl-R redo last change. - - dp in compare view of "ofboth grouppaths" kind, makes corresponding - entry of the other pane equal to the current one. The semantics - is as follows: - - nothing done for identical entries - - if file is missing in current view, its pair gets removed - - if file is missing or differs in other view, it's replaced - - file pairs are defined by matching relative paths - File removal obeys 'trash' option. When the option is enabled, - the operation can be undone/redone (although results won't be - visible automatically). - Unlike in Vim, this operation is performed on a single line - rather than a set of adjacent changes. - - do same as dp, but applies changes in the opposite direction. - - v or V enter visual mode, clears current selection. - - [count]Ctrl-A - increment first number in file name by [count] (1 by default). - - [count]Ctrl-X - decrement first number in file name by [count] (1 by default). - - ZQ same as :quit!. - - ZZ same as :quit. - - . repeat last command-line command (not normal mode command) of - this session (does nothing right after startup or :restart com- - mand). The command doesn't depend on command-line history and - can be used with completely disabled history. - - ( go to previous group. Groups are defined by primary sorting - key. For name and iname members of each group have same first - letter, for all other sorting keys vifm uses size, uid, ... - - ) go to next group. See ( key description above. - - { speeds up navigation to closest previous entry of the opposite - type by moving to the first file backwards when cursor is on a - directory and to the first directory backwards when cursor is on - a file. This is essentially a special case of ( that is locked - on "dirs". - - } same as {, but in forward direction. - - [c go to previous mismatched entry in directory comparison view or - do nothing. - - ]c go to next mismatched entry in directory comparison view or do - nothing. - - [d go to previous directory entry or do nothing. - - ]d go to next directory entry or do nothing. - - [r same as :siblprev. - - ]r same as :siblnext. - - [R same as :siblprev!. - - ]R same as :siblnext!. - - [s go to previous selected entry or do nothing. - - ]s go to next selected entry or do nothing. - - [z go to first sibling of current entry. - - ]z go to last sibling of current entry. - - zj go to next directory sibling of current entry or do nothing. - - zk go to previous directory sibling of current entry or do nothing. - -Using Count - You can use count with commands like yy. - - [count]yy - yank count files starting from current cursor position downward. - - Or you can use count with motions passed to y, d or D. - - d[count]j - delete (count + 1) files starting from current cursor position - upward. - -Registers - vifm supports multiple registers for temporary storing list of yanked - or deleted files. - - Registers should be specified by hitting double quote key followed by a - register name. Count is specified after register name. By default - commands use unnamed register, which has double quote as its name. - - Though all commands accept registers, most of commands ignores them - (for example H or Ctrl-U). Other commands can fill register or append - new files to it. - - Presently vifm supports ", _, a-z and A-Z characters as register names. - - As mentioned above " is unnamed register and has special meaning of the - default register. Every time when you use named registers (a-z and A- - Z) unnamed register is updated to contain same list of files as the - last used register. - - _ is black hole register. It can be used for writing, but its list is - always empty. - - Registers with names from a to z and from A to Z are named ones. Low- - ercase registers are cleared before adding new files, while uppercase - aren't and should be used to append new files to the existing file list - of appropriate lowercase register (A for a, B for b, ...). - - Registers can be changed on :empty command if they contain files under - trash directory (see "Trash directory" section below). - - Registers do not contain one file more than once. - - Example: - - "a2yy - - puts names of two files to register a (and to the unnamed register), - - "Ad - - removes one file and append its name to register a (and to the unnamed - register), - - p or "ap or "Ap - - inserts previously yanked and deleted files into current directory. - -Selectors - y, d, D, !, gu and gU commands accept selectors. You can combine them - with any of selectors below to quickly remove or yank several files. - - Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, - ;, comma, ', ^, 0 and $. But there are some additional ones. - - a all files in current view. - - s selected files. - - S all files except selected. - - Examples: - - - dj - delete file under cursor and one below; - - - d2j - delete file under cursor and two below; - - - y6gg - yank all files from cursor position to 6th file in the list. - - When you pass a count to whole command and its selector they are multi- - plied. So: - - - 2d2j - delete file under cursor and four below; - - - 2dj - delete file under cursor and two below; - - - 2y6gg - yank all files from cursor position to 12th file in the - list. - -Visual Mode - Visual mode has to generic operating submodes: - - - plain selection as it is in Vim; - - - selection editing submode. - - Both modes select files in range from cursor position at which visual - mode was entered to current cursor position (let's call it "selection - region"). Each of two borders can be adjusted by swapping them via "o" - or "O" keys and updating cursor position with regular cursor motion - keys. Obviously, once initial cursor position is altered this way, - real start position becomes unavailable. - - Plain Vim-like visual mode starts with cleared selection, which is not - restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- - trary to it, selection editing doesn't clear previously selected files - and restores them after reject. Accepting selection by performing an - operation on selected items (e.g. yanking them via "y") moves cursor to - the top of current selection region (not to the top most selected file - of the view). - - In turn, selection editing supports three types of editing (look at - statusbar to know which one is currently active): - - - append - amend selection by selecting elements in selection region; - - - remove - amend selection by deselecting elements in selection - region; - - - invert - amend selection by inverting selection of elements in - selection region. - - No matter how you activate selection editing it starts in "append". - One can switch type of operation (in the order given above) via "Ctrl- - G" key. - - Almost all normal mode keys work in visual mode, but instead of accept- - ing selectors they operate on selected items. - - Enter save selection and go back to normal mode not moving cursor. - - av leave visual mode if in amending mode (restores previous selec- - tion), otherwise switch to amending selection mode. - - gv restore previous visual selection. - - v, V, Ctrl-C or Escape - leave visual mode if not in amending mode, otherwise switch to - normal visual selection. - - Ctrl-G switch type of amending by round robin scheme: append -> remove - -> invert. - - : enter command line mode. Selection is cleared on leaving the - mode. - - o switch active selection bound. - - O switch active selection bound. - - gu, u make names of selected files lowercase. - - gU, U make names of selected files uppercase. - -View Mode - This mode tries to imitate the less program. List of builtin shortcuts - can be found below. Shortcuts can be customized using :qmap, :qnoremap - and :qunmap command-line commands. - - Shift-Tab, Tab, q, Q, ZZ - return to normal mode. - - [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter - scroll forward one line (or [count] lines). - - [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P - scroll backward one line (or [count] lines). - - [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space - scroll forward one window (or [count] lines). - - [count]b, [count]Ctrl-B, [count]Alt-V - scroll backward one window (or [count] lines). - - [count]z - scroll forward one window (and set window to [count]). - - [count]w - scroll backward one window (and set window to [count]). - - [count]Alt-Space - scroll forward one window, but don't stop at end-of-file. - - [count]d, [count]Ctrl-D - scroll forward one half-window (and set half-window to [count]). - - [count]u, [count]Ctrl-U - scroll backward one half-window (and set half-window to - [count]). - - r, Ctrl-R, Ctrl-L - repaint screen. - - R reload view preserving scroll position. - - F toggle automatic forwarding. Roughly equivalent to periodic - file reload and scrolling to the bottom. The behaviour is simi- - lar to `tail -F` or F key in less. - - [count]/pattern - search forward for ([count]-th) matching line. - - [count]?pattern - search backward for ([count]-th) matching line. - - [count]n - repeat previous search (for [count]-th occurrence). - - [count]N - repeat previous search in reverse direction (for [count]-th - occurrence). - - [count]g, [count]<, [count]Alt-< - scroll to the first line of the file (or line [count]). - - [count]G, [count]>, [count]Alt-> - scroll to the last line of the file (or line [count]). - - [count]p, [count]% - scroll to the beginning of the file (or N percent into file). - - v invoke an editor to edit the current file being viewed. The - command for editing is taken from the 'vicmd'/'vixcmd' option - value and extended with middle line number prepended by a plus - sign and name of the current file. - - All "Ctrl-W x" keys work the same was as in Normal mode. Active mode - is automatically changed on navigating among windows. When less-like - mode activated on file preview is left using one by "Ctrl-W x" keys, - its state is stored until another file is displayed using preview (it's - possible to leave the mode, hide preview pane, do something else, then - get back to the file and show preview pane again with previously stored - state in it). - -Command line Mode - These keys are available in all submodes of the command line mode: com- - mand, search, prompt and filtering. - - Down, Up, Left, Right, Home, End and Delete are extended keys and they - are not available if vifm is compiled with --disable-extended-keys - option. - - Esc, Ctrl-C - leave command line mode, cancels input. Cancelled input is - saved into appropriate history and can be recalled later. - - Ctrl-M, Enter - execute command and leave command line mode. - - Ctrl-I, Tab - complete command or its argument. - - Shift-Tab - complete in reverse order. - - Ctrl-_ stop completion and return original input. - - Ctrl-B, Left - move cursor to the left. - - Ctrl-F, Right - move cursor to the right. - - Ctrl-A, Home - go to line beginning. - - Ctrl-E, End - go to line end. - - Alt-B go to the beginning of previous word. - - Alt-F go to the end of next word. - - Ctrl-U remove characters from cursor position till the beginning of - line. - - Ctrl-K remove characters from cursor position till the end of line. - - Ctrl-H, Backspace - remove character before the cursor. - - Ctrl-D, Delete - remove character under the cursor. - - Ctrl-W remove characters from cursor position till the beginning of - previous word. - - Alt-D remove characters from cursor position till the beginning of - next word. - - Ctrl-T swap the order of current and previous character and move cursor - forward or, if cursor past the end of line, swap the order of - two last characters in the line. - - Alt-. insert last part of previous command to current cursor position. - Each next call will insert last part of older command. - - Ctrl-G edit command-line content in external editor. See "Command line - editing" section for details. - - Ctrl-N recall more recent command-line from history. - - Ctrl-P recall older command-line from history. - - Up recall more recent command-line from history, that begins as the - current command-line. - - Down recall older command-line from history, that begins as the cur- - rent command-line. - - Ctrl-] trigger abbreviation expansion. - -Pasting special values - The shortcuts listed below insert specified values into current cursor - position. Last key of every shortcut references value that it inserts: - - c - [c]urrent file - - d - [d]irectory path - - e - [e]xtension of a file name - - r - [r]oot part of a file name - - t - [t]ail part of directory path - - - a - [a]utomatic filter - - m - [m]anual filter - - = - local filter, which is bound to "=" in normal mode - - Values related to filelist in current pane are available through Ctrl-X - prefix, while values from the other pane have doubled Ctrl-X key as - their prefix (doubled Ctrl-X is presumably easier to type than upper- - case letters; it's still easy to remap the keys to correspond to names - of similar macros). - - Ctrl-X c - name of the current file of the active pane. - - Ctrl-X d - path to the current directory of the active pane. - - Ctrl-X e - extension of the current file of the active pane. - - Ctrl-X r - name root of current file of the active pane. - - Ctrl-X t - the last component of path to the current directory of the - active pane. - - Ctrl-X Ctrl-X c - name of the current file of the inactive pane. - - Ctrl-X Ctrl-X d - path to the current directory of the inactive pane. - - Ctrl-X Ctrl-X e - extension of the current file of the inactive pane. - - Ctrl-X Ctrl-X r - name root of current file of the inactive pane. - - Ctrl-X Ctrl-X t - the last component of path to the current directory of the inac- - tive pane. - - - Ctrl-X a - value of implicit permanent filter (old name "automatic") of the - active pane. - - Ctrl-X m - value of explicit permanent filter (old name "manual") of the - active pane. - - Ctrl-X = - value of local filter of the active pane. - - - Ctrl-X / - last pattern from search history. - -Command line editing - vifm provides a facility to edit several kinds of data, that is usually - edited in command-line mode, in external editor (using command speci- - fied by 'vicmd' or 'vixcmd' option). This has at least two advantages - over built-in command-line mode: - - one can use full power of Vim to edit text; - - finding and reusing history entries becomes possible. - - The facility is supported by four input submodes of the command-line: - - command; - - forward search; - - backward search; - - file rename (see description of cw and cW normal mode keys). - - Editing command-line using external editor is activated by the Ctrl-G - shortcut. It's also possible to do almost the same from Normal and - Visual modes using q:, q/ and q? commands. - - Temporary file created for the purpose of editing the line has the fol- - lowing structure: - - 1. First line, which is either empty or contains text already entered - in command-line. - - 2. 2nd and all other lines with history items starting with the most - recent one. Altering this lines in any way won't change history - items stored by vifm. - - After editing application is finished the first line of the file is - taken as the result of operation, when the application returns zero - exit code. If the application returns an error (see :cquit command in - Vim), all the edits made to the file are ignored, but the initial value - of the first line is saved in appropriate history. - -More Mode - This is the mode that appears when status bar content is so big that it - doesn't fit on the screen. One can identify the mode by "-- More --" - message at the bottom. - - The following keys are handled in this mode: - - - Enter, Ctrl-J, j or Down - scroll one line down. - - Backspace, k or Up - scroll one line up. - - - d scroll one page (half of a screen) down. - - u scroll one page (half of a screen) up. - - - Space, f or PageDown - scroll down a screen. - - b or PageUp - scroll up a screen. - - - G scroll to the bottom. - - g scroll to the top. - - - q, Escape or Ctrl-C - quit the mode. - - : switch to command-line mode. - -Commands - Commands are executed with :command_name - - Commented out lines should start with the double quote symbol ("), - which may be preceded by whitespace characters intermixed with colons. - Inline comments can be added at the end of the line after double quote - symbol, only last line of a multi-line command can contain such com- - ment. Not all commands support inline comments as their syntax con- - flicts with names of registers and fields where double quotes are - allowed. - - Most of the commands have two forms: complete and the short one. Exam- - ple: - - :noh[lsearch] - - This means the complete command is nohlsearch, and the short one is - noh. - - Most of command-line commands completely reset selection in the current - view. However, there are several exceptions: - - - `:invert s` most likely leaves some files selected; - - - :normal command (when it doesn't leave command-line mode); - - - :if and :else commands don't affect selection on successful execu- - tion. - - '|' can be used to separate commands, so you can give multiple commands - in one line. If you want to use '|' in an argument, precede it with - '\'. - - These commands see '|' as part of their arguments even when it's - escaped: - - :[range]! - :autocmd - :cabbrev - :cmap - :cnoreabbrev - :cnoremap - :command - :dmap - :dnoremap - :filetype - :fileviewer - :filextype - :map - :mmap - :mnoremap - :nmap - :nnoremap - :noremap - :normal - :qmap - :qnoremap - :vmap - :vnoremap - :wincmd - :windo - :winrun - - To be able to use another command after one of these, wrap it with the - :execute command. An example: - - if filetype('.') == 'reg' | execute '!!echo regular file' | endif - - :[count] - - :number - move to the file number. - :12 would move to the 12th file in the list. - :0 move to the top of the list. - :$ move to the bottom of the list. - - :[count]command - The only builtin :[count]command are :[count]d[elete] and - :[count]y[ank]. - - :d3 would delete three files starting at the current file position - moving down. - - :3d would delete one file at the third line in the list. - - :command [args] - - :[range]!program - execute command via shell. Accepts macros. - - :[range]!command & - - same as above, but the command is run in the background using vifm's - means. - - Programs that write to stdout like "ls" create an error message showing - partial output of the command. - - Note the space before ampersand symbol, if you omit it, command will be - run in the background using job control of your shell. - - Accepts macros. - - :!! - - :[range]!!command - same as :!, but pauses before returning. - - :!! repeat the last command. - - :alink - - :[range]alink[!?] - create absolute symbolic links to files in directory of inactive - view. With "?" prompts for destination file names in an edi- - tor. "!" forces overwrite. - - :[range]alink[!] path - create absolute symbolic links to files in directory specified - by the path (absolute or relative to directory of inactive - view). - - :[range]alink[!] name1 name2... - create absolute symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. - - :apropos - - :apropos keyword... - create a menu of items returned by the apropos command. Select- - ing an item in the menu opens corresponding man page. By - default the command relies on the external "apropos" utility, - which can be customized by altering value of the 'aproposprg' - option. - - :autocmd - - :au[tocmd] {event} {pat} {cmd} - register autocommand for the {event}, which can be: - - DirEnter - triggered after directory is changed - Event name is case insensitive. - - {pat} is a comma-separated list of modified globs patterns, - which can contain tilde or environment variables. All paths use - slash ('/') as directory separator. The pattern can start with - a '!', which negates it. Patterns that do not contain slashes - are matched against the last item of the path only (e.g. "dir" - in "/path/dir"). Literal comma can be entered by doubling it. - Two modifications to globs matching are as follows: - - * - never matches a slash (i.e., can signify single direc- - tory level) - - ** - matches any character (i.e., can match path of arbi- - trary depth) - - {cmd} is a :command or several of them separated with '|'. - - Examples of patterns: - - conf.d - matches conf.d directory anywhere - - *.d - matches directories ending with ".d" anywhere - - **.git - matches something.git, but not .git anywhere - - **/.git/** - matches /path/.git/objects, but not /path/.git - - **/.git/**/ - matches /path/.git/ only (because of trailing - slash) - - /etc/* - matches /etc/conf.d/, /etc/X11, but not - /etc/X11/fs - - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc. - - /etc/**/* - matches /etc/ itself and any file below it - - /etc/**/** - matches /etc/ itself and any file below it - - :au[tocmd] [{event}] [{pat}] - list those autocommands that match given event-pattern combina- - tion. - {event} and {pat} can be omitted to list all autocommands. To - list any autocommands for specific pattern one can use * place- - holder in place of {event}. - - :au[tocmd]! [{event}] [{pat}] - remove autocommands that match given event-pattern combination. - Syntax is the same as for listing above. - - :apropos - repeat last :apropos command. - - :bmark - - :bmark tag1 [tag2 [tag3...]] - bookmark current directory with specified tags. - - :bmark! path tag1 [tag2 [tag3...]] - same as :bmark, but allows bookmarking specific path instead of - current directory. This is for use in vifmrc and for bookmark- - ing files. - - Path can contain macros that expand to single path (%c, %C, %d, - %D) or those that can expand to multiple paths, but contain only - one (%f, %F, %rx). The latter is done for convenience on using - the command interactively. Complex macros that include spaces - (e.g. "%c:gs/ /_") should be escaped. - - :bmarks - - :bmarks - display all bookmarks in a menu. - - :bmarks [tag1 [tag2...]] - display menu of bookmarks that include all of the specified - tags. - - :bmgo - - :bmgo [tag1 [tag2...]] - when there are more than one match acts exactly like :bmarks, - otherwise navigates to single match immediately (and fails if - there is no match). - - :cabbrev - - :ca[bbrev] - display menu of command-line mode abbreviations. - - :ca[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :ca[bbrev] lhs rhs - register new or overwrites existing abbreviation for command- - line mode. rhs can contain spaces and any special sequences - accepted in rhs of mappings (see "Mappings" section below). - Abbreviations are expanded non-recursively. - - :cnoreabbrev - - :cnorea[bbrev] - display menu of command-line mode abbreviations. - - :cnorea[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :cnorea[bbrev] lhs rhs - same as :cabbrev, but mappings in rhs are ignored during expan- - sion. - - :cd - - :cd or :cd ~ or :cd $HOME - change to home directory. - - :cd - go to the last visited directory. - - :cd ~/dir - change directory to ~/dir. - - :cd /curr/dir /other/dir - change directory of the current pane to /curr/dir and directory - of the other pane to /other/dir. Relative paths are assumed to - be relative to directory of current view. Command won't fail if - one of directories is invalid. All forms of the command accept - macros. - - :cd! /dir - same as :cd /dir /dir. - - :cds - - :cds[!] pattern string - navigate to path obtained by substituting first match in current - path. Arguments can include slashes, but starting first argu- - ment with a separator will activate below form of the command. - Specifying "!" changes directory of both panes. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - :cds[!]/pattern/string/[flags] - same as above, but with :substitute-like syntax. Other punctua- - tion characters can be used as separators. - - :change - - :c[hange] - create a menu window to alter a files properties. - - :chmod - - :[range]chmod - display file attributes (permission on *nix and properties on - Windows) change dialog. - - :[range]chmod[!] arg... - only for *nix - change permissions for files. See `man 1 chmod` for arg format. - "!" means set permissions recursively. - - :chown - - :[range]chown - only for *nix - same as co key in normal mode. - - :[range]chown [user][:][group] - only for *nix - change owner and/or group of files. Operates on directories - recursively. - - :clone - - :[range]clone[!?] - clones files in current directory. With "?" vifm will open vi - to edit file names. "!" forces overwrite. Macros are expanded. - - :[range]clone[!] path - clones files to directory specified with the path (absolute or - relative to current directory). "!" forces overwrite. Macros - are expanded. - - :[range]clone[!] name1 name2... - clones files in current directory giving each next clone a cor- - responding name from the argument list. "!" forces overwrite. - Macros are expanded. - - :colorscheme - - :colo[rscheme]? - print current color scheme name on the status bar. - - :colo[rscheme] - display a menu with a list of available color schemes. You can - choose primary color scheme here. It is used for view if no - directory specific colorscheme fits current path. It's also - used to set border color (except view titles) and colors in - menus and dialogs. - - :colo[rscheme] color_scheme_name - change primary color scheme to color_scheme_name. In case of - errors (e.g. some colors are not supported by terminal) either - nothing is changed or color scheme is reset to builtin colors to - ensure that TUI is left in a usable state. - - :colo[rscheme] color_scheme_name directory - associate directory with the color scheme. The directory argu- - ment can be either absolute or relative path when :colorscheme - command is executed from command line, but mandatory should be - an absolute path when the command is executed in scripts loaded - at startup (until vifm is completely loaded). - - :colo[rscheme] color_scheme_name color_scheme_name... - loads the first color scheme in the order given that exists and - is supported by the terminal. If none matches, current one - remains unchanged. For example: - - " use a separate color scheme for panes which are inside FUSE - mounts - execute 'colorscheme in-fuse' &fusehome - - :comclear - - :comc[lear] - remove all user defined commands. - - :command - - :com[mand] - display a menu of user commands. - - :com[mand] beginning - display user defined commands that start with the beginning. - - :com[mand] name action - set a new user command. - Trying to use a reserved command name will result in an error - message. - Use :com[mand]! to overwrite a previously set command. - Unlike vim user commands do not have to start with a capital - letter. User commands are run in a shell by default. To run a - command in the background you must set it as a background com- - mand with & at the end of the commands action (:com rm rm %f &). - Command name cannot contain numbers or special symbols (except - '?' and '!'). - - :com[mand] name /pattern - set search pattern. - - :com[mand] name =pattern - set local filter value. - - :com[mand] name filter{:filter args} - set file name filter (see :filter command description). For - example: - - " display only audio files - :command onlyaudio fil- - ter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - " display everything except audio files - :command noaudio fil- - ter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - - :com[mand] cmd :commands - set kind of an alias for internal command (like in a shell). - Passes range given to alias to an aliased command, so running - :%cp after - :command cp :copy %a - equals - :%copy - - :compare - - :compare [byname | bysize | bycontents | listall | listunique | - listdups | ofboth | ofone | groupids | grouppaths | skipempty]... - compare files in one or two views according the arguments. The - default is "bycontents listall ofboth grouppaths". See "Compare - views" section below for details. Tree structure is incompati- - ble with alternative representations, so values of 'lsview' and - 'millerview' options are ignored. - - :copen - - :cope[n] - opens menu with contents of the last displayed menu with naviga- - tion to files by default, if any. - - :copy - - :[range]co[py][!?][ &] - copy files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]co[py][!] path[ &] - copy files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]co[py][!] name1 name2...[ &] - copy files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :cquit - - :cq[uit][!] - same as :quit, but also aborts directory choosing via - --choose-dir (empties output file) and returns non-zero exit - code. - - :cunabbrev - - :cuna[bbrev] lhs - unregister command-line mode abbreviation by its lhs. - - :cuna[bbrev] rhs - unregister command-line mode abbreviation by its rhs, so that - abbreviation could be removed even after expansion. - - :delbmarks - - :delbmarks - remove bookmarks from current directory. - - :delbmarks tag1 [tag2 [tag3...]] - remove set of bookmarks that include all of the specified tags. - - :delbmarks! - remove all bookmarks. - - :delbmarks! path1 [path2 [path3...]] - remove bookmarks of listed paths. - - :delcommand - - :delc[ommand] user_command - remove user defined command named user_command. - - :delete - - :[range]d[elete][!][ &] - delete selected file or files. "!" means complete removal - (omitting trash). - - :[range]d[elete][!] [reg] [count][ &] - delete selected or [count] files to the reg register. "!" means - complete removal (omitting trash). - - :delmarks - - :delm[arks]! - delete all marks. - - :delm[arks] marks ... - delete specified marks, each argument is treated as a set of - marks. - - :display - - :di[splay] - display menu with registers content. - - :di[splay] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :dirs - - :dirs display directory stack. - - :echo - - :ec[ho] [...] - evaluate each argument as an expression and output them sepa- - rated with a space. See help on :let command for a definition - of . - - :edit - - :[range]e[dit] [file...] - open selected or passed file(s) in editor. Macros and environ- - ment variables are expanded. - - :else - - :el[se] - execute commands until next matching :endif if all other condi- - tions didn't match. See also help on :if and :endif commands. - - :elseif - - :elsei[f] {expr1} - execute commands until next matching :elseif, :else or :endif if - conditions of previous :if and :elseif branches were evaluated - to zero. See also help on :if and :endif commands. - - :empty - - :empty permanently remove files from all existing non-empty trash - directories (see "Trash directory" section below). Trash direc- - tories which are specified via %r and/or %u also get deleted - completely. Also remove all operations from undolist that have - no sense after :empty and remove all records about files located - inside directories from all registers. Removal is performed as - background task with undetermined amount of work and can be - checked via :jobs menu. - - :endif - - :en[dif] - end conditional block. See also help on :if and :else commands. - - :execute - - :exe[cute] [...] - evaluate each argument as an expression and join results sepa- - rated by a space to get a single string which is then executed - as a command-line command. See help on :let command for a defi- - nition of . - - :exit - - :exi[t][!] - same as :quit. - - :file - - :f[ile][ &] - display menu of programs set for the file type of the current - file. " &" forces running associated program in background. - - :f[ile] arg[ &] - run associated command that begins with the arg skipping opening - menu. " &" forces running associated program in background. - - :filetype - - :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],... - associate given program list to each of the patterns. Associ- - ated program (command) is used by handlers of l and Enter keys - (and also in the :file menu). If you need to insert comma into - command just double it (",,"). Space followed by an ampersand - as two last characters of a command means running of the command - in the background. Optional description can be given to each - command to ease understanding of what command will do in the - :file menu. Vifm will try the rest of the programs for an asso- - ciation when the default isn't found. When program entry - doesn't contain any of vifm macros, name of current file is - appended as if program entry ended with %c macro on *nix and %"c - on Windows. On Windows path to executables containing spaces - can (and should be for correct work with such paths) be double - quoted. See "Patterns" section below for pattern definition. - See also "Automatic FUSE mounts" section below. Example for zip - archives and several actions: - - filetype *.zip,*.jar,*.war,*.ear - \ {Mount with fuse-zip} - \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, - \ {View contents} - \ zip -sf %c | less, - \ {Extract here} - \ tar -xf %c, - - Note that on OS X when `open` is used to call an app, vifm is - unable to check whether that app is actually available. So if - automatic skipping of programs that aren't there is desirable, - `open` should be replaced with an actual command. - - :filet[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filextype filename". - - :filextype - - :filex[type] pattern-list [{ description }] def_program,program2,... - same as :filetype, but this command is ignored if not running in - X. In X :filextype is equal to :filetype. See "Patterns" sec- - tion below for pattern definition. See also "Automatic FUSE - mounts" section below. - - For example, consider the following settings (the order might - seem strange, but it's for the demonstration purpose): - - filetype *.html,*.htm - \ {View in lynx} - \ lynx - filextype *.html,*.htm - \ {Open with dwb} - \ dwb %f %i &, - filetype *.html,*.htm - \ {View in links} - \ links - filextype *.html,*.htm - \ {Open with firefox} - \ firefox %f &, - \ {Open with uzbl} - \ uzbl-browser %f %i &, - - If you're using vifm inside a terminal emulator that is running - in graphical environment (when X is used on *nix; always on Win- - dows), vifm attempts to run application in this order: - - 1. lynx - 2. dwb - 3. links - 4. firefox - 5. uzbl - - If there is no graphical environment (checked presence of $DIS- - PLAY environment variable on *nix; never happens on Windows), - the list will look like: - - 1. lynx - 2. links - - Just as if all :filextype commands were not there. - - The purpose of such differentiation is to allow comfortable use - of vifm with same settings in desktop environment/through remote - connection (SSH)/in native console. - - Note that on OS X $DISPLAY isn't defined unless you define it, - so :filextype should be used only if you set $DISPLAY in some - way. - - :filext[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filetype filename". - - :fileviewer - - :filev[iewer] pattern-list command1,command2,... - register specified list of commands as viewers for each of the - patterns. Viewer is a command which output is captured and dis- - played in one of the panes of vifm after pressing "e" or running - :view command. When the command doesn't contain any of vifm - macros, name of current file is appended as if command ended - with %c macro. Comma escaping and missing commands processing - rules as for :filetype apply to this command. See "Patterns" - section below for pattern definition. - - Example for zip archives: - - fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to - preview:" - - :filev[iewer] filename - list (in menu mode) currently registered patterns that match - specified filename. - - :filter - - :filter[!] {pattern} - filter files matching the pattern out of directory listings. - '!' controls state of filter inversion after updating filter - value (see also 'cpoptions' description). Filter is matched - case sensitively on *nix and case insensitively on Windows. See - "File Filters" and "Patterns" sections. - - Example: - - " filter all files ending in .o from the filelist. - :filter /.o$/ - - - :filter[!] {empty-pattern} - same as above, but use last search pattern as pattern value. - - Example: - - :filter //I - - - :filter - reset filter (set it to an empty string) and show all files. - - :filter! - same as :invert. - - :filter? - show information on local, name and auto filters. - - :find - - :[range]fin[d] pattern - display results of find command in the menu. Searches among - selected files if any. Accepts macros. By default the command - relies on the external "find" utility, which can be customized - by altering value of the 'findprg' option. - - :[range]fin[d] -opt... - same as :find above, but user defines all find arguments. - Searches among selected files if any. - - :[range]fin[d] path -opt... - same as :find above, but user defines all find arguments. - Ignores selection and range. - - :[range]fin[d] - repeat last :find command. - - :finish - - :fini[sh] - stop sourcing a script. Can only be used in a vifm script file. - This is a quick way to skip the rest of the file. - - :goto - - :go[to] - change directory if necessary and put specified path under the - cursor. The path should be existing non-root path. Macros and - environment variables are expanded. - - :grep - - :[range]gr[ep][!] pattern - will show results of grep command in the menu. Add "!" to - request inversion of search (look for lines that do not match - pattern). Searches among selected files if any and no range - given. Ignores binary files by default. By default the command - relies on the external "grep" utility, which can be customized - by altering value of the 'grepprg' option. - - :[range]gr[ep][!] -opt... - same as :grep above, but user defines all grep arguments, which - are not escaped. Searches among selected files if any. - - :[range]gr[ep][!] - repeat last :grep command. "!" of this command inverts "!" in - repeated command. - - :help - - :h[elp] - show the help file. - - :h[elp] argument - is the same as using ':h argument' in vim. Use vifm- - to get help on vifm (tab completion works). This form of the - command doesn't work when 'vimhelp' option is off. - - :hideui - - :hideui - hide interface to show previous commands' output. - - :highlight - - :hi[ghlight] - display information about all highlight groups active at the - moment. - - :hi[ghlight] clear - reset all highlighting to builtin defaults and removed all file- - name-specific rules. - - :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ ) - remove specified rule. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) - display information on given highlight group or file name pat- - tern of color scheme used in the active view. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) - cterm=style | ctermfg=color | ctermbg=color - set style (cterm), foreground (ctermfg) or/and background - (ctermbg) parameters of highlight group or file name pattern for - color scheme used in the active view. - - All style values as well as color names are case insensitive. - - Available style values (some of them can be combined): - - bold - - underline - - reverse or inverse - - standout - - italic (on unsupported systems becomes reverse) - - none - - Available group-name values: - - Win - color of all windows (views, dialogs, menus) and default color - for their content (e.g. regular files in views) - - AuxWin - color of auxiliary areas of windows - - OtherWin - color of inactive pane - - Border - color of vertical parts of the border - - TabLine - tab line color (for 'tabscope' set to "global") - - TabLineSel - color of the tip of selected tab (regardless of 'tab- - scope') - - TopLineSel - top line color of the current pane - - TopLine - top line color of the other pane - - CmdLine - the command line/status bar color - - ErrorMsg - color of error messages in the status bar - - StatusLine - color of the line above the status bar - - JobLine - color of job line that appears above the status line - - WildMenu - color of the wild menu items - - SuggestBox - color of key suggestion box - - CurrLine - line at cursor position in active view - - OtherLine - line at cursor position in inactive view - - Selected - color of selected files - - Directory - color of directories - - Link - color of symbolic links in the views - - BrokenLink - color of broken symbolic links - - Socket - color of sockets - - Device - color of block and character devices - - Executable - color of executable files - - Fifo - color of fifo pipes - - CmpMismatch - color of mismatched files in side-by-side comparison - by path - - User1..User9 - 9 colors which can be used via %* 'statusline' macro - - Available colors: - - -1 or default or none - default or transparent - - black and lightblack - - red and lightred - - green and lightgreen - - yellow and lightyellow - - blue and lightblue - - magenta and lightmagenta - - cyan and lightcyan - - white and lightwhite - - 0-255 - corresponding colors from 256-color palette - - Light versions of colors are regular colors with bold attribute set. - So order of arguments of :highlight command is important and it's bet- - ter to put "cterm" in front of others to prevent it from overwriting - attributes set by "ctermfg" or "ctermbg" arguments. - - For convenience of color scheme authors xterm-like names for 256 color - palette is also supported. The mapping is taken from - http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- - cated entries were altered by adding an underscore followed by numeri- - cal suffix. - - 0 Black 86 Aquamarine1 172 Orange3 - 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 - 2 Green 88 DarkRed_2 174 LightPink3 - 3 Yellow 89 DeepPink4_2 175 Pink3 - 4 Blue 90 DarkMagenta 176 Plum3 - 5 Magenta 91 DarkMagenta_2 177 Violet - 6 Cyan 92 DarkViolet 178 Gold3_2 - 7 White 93 Purple 179 LightGoldenrod3 - 8 LightBlack 94 Orange4_2 180 Tan - 9 LightRed 95 LightPink4 181 MistyRose3 - 10 LightGreen 96 Plum4 182 Thistle3 - 11 LightYellow 97 MediumPurple3 183 Plum2 - 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 - 13 LightMagenta 99 SlateBlue1 185 Khaki3 - 14 LightCyan 100 Yellow4 186 LightGoldenrod2 - 15 LightWhite 101 Wheat4 187 LightYellow3 - 16 Grey0 102 Grey53 188 Grey84 - 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 - 18 DarkBlue 104 MediumPurple 190 Yellow2 - 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 - 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- - reen1_2 - 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 - 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 - 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 - 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 - 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 - 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 - 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 - 28 Green4 114 PaleGreen3_2 200 Magenta2_2 - 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 - 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 - 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 - 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 - 33 DodgerBlue1 119 LightGreen_2 205 HotPink - 34 Green3 120 LightGreen_3 206 HotPink_2 - 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 - 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange - 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 - 38 DeepSkyBlue2 124 Red3 210 LightCoral - 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 - 40 Green3_2 126 MediumVioletRed 212 Orchid2 - 41 SpringGreen3_2 127 Magenta3 213 Orchid1 - 42 SpringGreen2 128 DarkViolet_2 214 Orange1 - 43 Cyan3 129 Purple_2 215 SandyBrown - 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 - 45 Turquoise2 131 IndianRed 217 LightPink1 - 46 Green1 132 HotPink3 218 Pink1 - 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 - 48 SpringGreen1 134 MediumOrchid 220 Gold1 - 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- - rod2_2 - 50 Cyan2 136 DarkGoldenrod 222 LightGolden- - rod2_3 - 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 - 52 DarkRed 138 RosyBrown 224 MistyRose1 - 53 DeepPink4 139 Grey63 225 Thistle1 - 54 Purple4 140 MediumPurple2_2 226 Yellow1 - 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 - 56 Purple3 142 Gold3 228 Khaki1 - 57 BlueViolet 143 DarkKhaki 229 Wheat1 - 58 Orange4 144 NavajoWhite3 230 Cornsilk1 - 59 Grey37 145 Grey69 231 Grey100 - 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 - 61 SlateBlue3 147 LightSteelBlue 233 Grey7 - 62 SlateBlue3_2 148 Yellow3 234 Grey11 - 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 - 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 - 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 - 66 PaleTurquoise4 152 LightCyan3 238 Grey27 - 67 SteelBlue 153 LightSkyBlue1 239 Grey30 - 68 SteelBlue3 154 GreenYellow 240 Grey35 - 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 - 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 - 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 - 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 - 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 - 74 SkyBlue3 160 Red3_2 246 Grey58 - 75 SteelBlue1 161 DeepPink3 247 Grey62 - 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 - 77 PaleGreen3 163 Magenta3_2 249 Grey70 - 78 SeaGreen3 164 Magenta3_3 250 Grey74 - 79 Aquamarine3 165 Magenta2 251 Grey78 - 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 - 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 - 82 Chartreuse2 168 HotPink3_2 254 Grey89 - 83 SeaGreen2 169 HotPink2 255 Grey93 - 84 SeaGreen1 170 Orchid - 85 SeaGreen1_2 171 MediumOrchid1 - - There are two colors (foreground and background) and only one bold - attribute. Thus single bold attribute affects both colors when - "reverse" attribute is used in vifm run inside terminal emulator. At - the same time linux native console can handle boldness of foreground - and background colors independently, but for consistency with terminal - emulators this is available only implicitly by using light versions of - colors. This behaviour might be changed in the future. - - Although vifm supports 256 colors in a sense they are supported by UI - drawing library, whether you will be able to use all of them highly - depends on your terminal. To set up terminal properly, make sure that - $TERM in the environment you run vifm is set to name of 256-color ter- - minal (on *nixes it can also be set via X resources), e.g. - xterm-256color. One can find list of available terminal names by list- - ing /usr/lib/terminfo/. Number of colors supported by terminal with - current settings can be checked via "tput colors" command. - - Here is the hierarchy of highlight groups, which you need to know for - using transparency: - JobLine - SuggestBox - StatusLine - WildMenu - User1..User9 - Border - CmdLine - ErrorMsg - Win - OtherWin - AuxWin - File name specific highlights - Directory - Link - BrokenLink - Socket - Device - Fifo - Executable - Selected - CurrLine - OtherLine - TopLine - TopLineSel - TabLineSel (for pane tabs) - TabLine - TabLineSel - - "none" means default terminal color for highlight groups at the first - level of the hierarchy and transparency for all others. - - Here file name specific highlights mean those configured via globs ({}) - or regular expressions (//). At most one of them is applied per file - entry, namely the first that matches file name, hence order of :high- - light commands might be important in certain cases. - - :history - - :his[tory] - creates a pop-up menu of directories visited. - - :his[tory] x - x can be: - d[ir] or . show directory history. - c[md] or : show command line history. - s[earch] or / show search history and search forward on l key. - f[search] or / show search history and search forward on l key. - b[search] or ? show search history and search backward on l key. - i[nput] or @ show prompt history (e.g. on one file renaming). - fi[lter] or = show filter history (see description of the "=" - normal mode command). - - :histnext - - :histnext - same as . The main use case for this command is to work - around the common pain point of and being the same - ASCII character: one could alter the terminal emulator settings - to emit, for example, the `F1` keycode when Ctrl-I is pressed, - then `:noremap :histnext` in vifm, add "t" flag to the - 'cpoptions', and thus have both and working as - expected. - - :histprev - - :histprev - same as . - - :if - - :if {expr1} - starts conditional block. Commands are executed until next - matching :elseif, :else or :endif command if {expr1} evaluates - to non-zero, otherwise they are ignored. See also help on :else - and :endif commands. - - Example: - - if $TERM == 'screen.linux' - highlight CurrLine ctermfg=lightwhite ctermbg=lightblack - elseif $TERM == 'tmux' - highlight CurrLine cterm=reverse ctermfg=black - ctermbg=white - else - highlight CurrLine cterm=bold,reverse ctermfg=black - ctermbg=white - endif - - :invert - - :invert [f] - invert file name filter. - - :invert? [f] - show current filter state. - - :invert s - invert selection. - - :invert o - invert sorting order of the primary sorting key. - - :invert? o - show sorting order of the primary sorting key. - - :jobs - - :jobs shows menu of current backgrounded processes. - - :let - - :let $ENV_VAR = - sets environment variable. Warning: setting environment vari- - able to an empty string on Windows removes it. - - :let $ENV_VAR .= - append value to environment variable. - - :let &[l:|g:]opt = - sets option value. - - :let &[l:|g:]opt .= - append value to string option. - - :let &[l:|g:]opt += - increasing option value, adding sub-values. - - :let &[l:|g:]opt -= - decreasing option value, removing sub-values. - - Where could be a single-quoted string, double-quoted string, an - environment variable, function call or a concatanation of any of them - in any order using the '.' operator. Any whitespace is ignored. - - :locate - - :locate filename - use "locate" command to create a menu of filenames. Selecting a - file from the menu will reload the current file list in vifm to - show the selected file. By default the command relies on the - external "locate" utility (it's assumed that its database is - already built), which can be customized by altering value of the - 'locateprg' option. - - :locate - repeats last :locate command. - - :ls - - :ls lists windows of active terminal multiplexer (only when terminal - multiplexer is used). This is achieved by issuing proper com- - mand for active terminal multiplexer, thus the list is not han- - dled by vifm. - - :lstrash - - :lstrash - displays a menu with list of files in trash. Each element of - the list is original path of a deleted file, thus the list can - contain duplicates. - - :mark - - :[range]ma[rk][?] x [/full/path] [filename] - Set mark x (a-zA-Z0-9) at /full/path and filename. By default - current directory is being used. If no filename was given and - /full/path is current directory then last file in [range] is - used. Using of macros is allowed. Question mark will stop com- - mand from overwriting existing marks. - - :marks - - :marks create a pop-up menu of marks. - - :marks list ... - display the contents of the marks that are mentioned in list. - - :media - - :media only for *nix - display media management menu. See also 'mediaprg' option. - - :messages - - :mes[sages] - shows previously given messages (up to 50). - - :mkdir - - :[line]mkdir[!] dir ... - create directories at specified paths. The [line] can be used - to pick node in a tree-view. "!" means make parent directories - as needed. Macros are expanded. - - :move - - :[range]m[ove][!?][ &] - move files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]m[ove][!] path[ &] - move files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]m[ove][!] name1 name2...[ &] - move files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :nohlsearch - - :noh[lsearch] - clear selection in current pane. - - :normal - - :norm[al][!] commands - execute normal mode commands. If "!" is used, user defined map- - pings are ignored. Unfinished last command is aborted as if - or was typed. A ":" should be completed as well. - Commands can't start with a space, so put a count of 1 (one) - before it. - - :only - - :on[ly] - switch to a one window view. - - :popd - - :popd remove pane directories from stack. - - :pushd - - :pushd[!] /curr/dir [/other/dir] - add pane directories to stack and process arguments like :cd - command. - - :pushd exchange the top two items of the directory stack. - - :put - - :[line]pu[t][!] [reg] [ &] - puts files from specified register (" by default) into current - directory. The [line] can be used to pick node in a tree-view. - "!" moves files "!" moves files from their original location - instead of copying them. During this operation no confirmation - dialogs will be shown, all checks are performed beforehand. - - :pwd - - :pw[d] show the present working directory. - - :qall - - :qa[ll][!] - exit vifm (add ! to skip saving changes and checking for active - backgrounded commands). - - :quit - - :q[uit][!] - if there is more than one tab, close the current one, otherwise - exit vifm (add ! to skip saving changes and checking for active - backgrounded commands). - - :redraw - - :redr[aw] - redraw the screen immediately. - - :registers - - :reg[isters] - display menu with registers content. - - :reg[isters] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :regular - - :regular - - switch to regular view leaving custom view. - :rename - - :[range]rename[!] - rename files using vi to edit names. ! means go recursively - through directories. - - :[range]rename name1 name2... - rename each of selected files to a corresponding name. - - :restart - - :restart - free a lot of things (histories, commands, etc.), reread - vifminfo and vifmrc files and run startup commands passed in the - argument list, thus losing all unsaved changes (e.g. recent his- - tory or keys mapped in current session). - - While many things get reset, some basic UI state and current - locations are preserved, including tabs. - - :restore - - :[range]restore - restore file from trash directory, doesn't work outside one of - trash directories. See "Trash directory" section below. - - :rlink - - :[range]rlink[!?] - create relative symbolic links to files in directory of other - view. With "?" prompts for destination file names in an editor. - "!" forces overwrite. - - :[range]rlink[!] path - create relative symbolic links of files in directory specified - with the path (absolute or relative to directory of other view). - "!" forces overwrite. - - :[range]rlink[!] name1 name2... - create relative symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. "!" forces overwrite. - - :screen - - :screen - toggle whether to use the terminal multiplexer or not. - A terminal multiplexer uses pseudo terminals to allow multiple - windows to be used in the console or in a single xterm. Start- - ing vifm from terminal multiplexer with appropriate support - turned on will cause vifm to open a new terminal multiplexer - window for each new file edited or program launched from vifm. - This requires screen version 3.9.9 or newer for the screen -X - argument or tmux (1.8 version or newer is recommended). - - :screen! - enable integration with terminal multiplexers. - - :screen? - display whether integration with terminal multiplexers is - enabled. - - Note: the command is called screen for historical reasons (when tmux - wasn't yet supported) and might be changed in future releases, or get - an alias. - - :select - - :[range]select - select files in the given range (current file if no range is - given). - - :select {pattern} - select files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:select! */ | invert - s` selects only files. - - :select //[iI] - same as item above, but reuses last search pattern. - - :select !{external command} - select files from the list supplied by external command. Files - are matched by full paths, relative paths are converted to abso- - lute ones beforehand. - - :[range]select! [{pattern}] - same as above, but resets previously selected items before pro- - ceeding. - - :set - - :se[t] display all options that differ from their default value. - - :se[t] all - display all options. - - :se[t] opt1=val1 opt2='val2' opt3="val3" ... - sets given options. For local options both values are set. - You can use following syntax: - - for all options - option, option? and option& - - for boolean options - nooption, invoption and option! - - for integer options - option=x, option+=x and option-=x - - for string options - option=x and option+=x - - for string list options - option=x, option+=x, option-=x and - option^=x - - for enumeration options - option=x, option+=x and option-=x - - for set options - option=x, option+=x, option-=x and - option^=x - - for charset options - option=x, option+=x, option-=x and - option^=x - - the meaning: - - option - turn option on (for boolean) or print its value (for - all others) - - nooption - turn option off - - invoption - invert option state - - option! - invert option state - - option? - print option value - - option& - reset option to its default value - - option=x or option:x - set option to x - - option+=x - add/append x to option - - option-=x - remove (or subtract) x from option - - option^=x - toggle x presence among values of the option - - Option name can be prepended and appended by any number of - whitespace characters. - - :setglobal - - :setg[lobal] - display all global options that differ from their default value. - - :setg[lobal] all - display all global options. - - :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only global options or global - values of local options. Changes to the latter might be not - visible until directory is changed. - - :setlocal - - :setl[ocal] - display all local options that differ from their default value. - - :setl[ocal] all - display all local options. - - :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only local values of local - options. - - :shell - - :sh[ell][!] - start a shell in current directory. "!" suppresses spawning - dedicated window of terminal multiplexer for a shell. To make - vifm adaptive to environment it uses $SHELL if it's defined, - otherwise 'shell' value is used. - - - :siblnext - - :[count]siblnext[!] - - change directory to [count]th next sibling directory after cur- - rent path using value of global sort option of current pane. - "!" enables wrapping. - - For example, say, you're at /boot and root listing starts like - this: - - bin/ - boot/ - dev/ - ... - - Issuing :siblnext will navigate to /dev. - - - :siblprev - - :[count]siblprev[!] - same as :siblnext, but in the opposite direction. - - :sort - - :sor[t] - display dialog with different sorting methods, when one can - select primary sorting key. When 'viewcolumns' options is empty - and 'lsview' is off, changing primary sorting key will also - affect view look (in particular the second column of the view - will be changed). - - :source - - :so[urce] file - read command-line commands from the file. - - :split - - :sp[lit] - switch to a two window horizontal view. - - :sp[lit]! - toggle horizontal window splitting. - - :sp[lit] path - splits the window horizontally to show both file directories. - Also changes other pane to path (absolute or relative to current - directory of active pane). - - :substitute - - :[range]s[ubstitute]/pattern/string/[flags] - for each file in range replace a match of pattern with string. - - String can contain \0...\9 to link to capture groups (\0 - all match, - \1 - first group, etc.). - - Pattern is stored in search history. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - - g - substitute all matches in each file name (each g toggles this) - - :[range]s[ubstitute]/pattern - substitute pattern with an empty string. - - :[range]s[ubstitute]//string/[flags] - use last pattern from search history. - - :[range]s[ubstitute] - repeat previous substitution command. - - :sync - - :sync [relative path] - change the other pane to the current pane directory or to some - path relative to the current directory. Using macros is - allowed. - - :sync! change the other pane to the current pane directory and synchro- - nize cursor position. If current pane displays custom list of - files, position before entering it is used (current one might - not make any sense). - - - :sync! [location | cursorpos | localopts | filters | filelist | tree | - all]... - change enumerated properties of the other pane to match corre- - sponding properties of the current pane. Arguments have the - following meanings: - - - location - current directory of the pane; - - - cursorpos - cursor position (doesn't make sense without - "location"); - - - localopts - all local options; - - - filters - all filters; - - - filelist - list of files for custom view (implies "loca- - tion"); - - - tree - tree structure for tree view (implies "location"); - - - all - all of the above. - - :tabclose - - :tabc[lose] - close current tab, unless it's the only one open at current - scope. - - :tabmove - - :tabm[ove] [N] - without the argument or with `$` as the argument, current tab - becomes the last tab. With the argument, current tab is moved - after the tab with the specified number. Argument of `0` moves - current tab to the first position. - - :tabname - - :tabname [name] - set, update or reset (when no argument is provided) name of the - current tab. - - :tabnew - - :tabnew [path] - create new tab. Accepts optional path for the new tab. Macros - and environment variables are expanded. - - :tabnext - - :tabn[ext] - switch to the next tab (wrapping around). - - :tabn[ext] {n} - go to the tab number {n}. Tab numeration starts with 1. - - :tabprevious - - :tabp[revious] - switch to the previous tab (wrapping around). - - :tabp[revious] {n} - go to the {n}-th previous tab. Note that :tabnext handles its - argument differently. - - :touch - - :[line]touch file... - create files at specified paths. Aborts on errors. Doesn't - update time of existing files. The [line] can be used to pick - node in a tree-view. Macros are expanded. - - :tr - - :[range]tr/pattern/string/ - for each file in range transliterate the characters which appear - in pattern to the corresponding character in string. When - string is shorter than pattern, it's padded with its last char- - acter. - - :trashes - - :trashes - lists all valid trash directories in a menu. Only non-empty and - writable trash directories are shown. This is exactly the list - of directories that are cleared when :empty command is executed. - - :trashes? - same as :trashes, but also displays size of each trash direc- - tory. - - :tree - - :tree turn pane into tree view with current directory as its root. - The tree view is implemented on top of a custom view, but is - automatically kept in sync with file system state and considers - all the filters. Thus the structure corresponds to what one - would see on visiting the directories manually. As a special - case for trees built out of custom view file-system tracking - isn't performed. - - To leave tree view go up from its root or use gh at any level of - the tree. Any command that changes directory will also do, in - particular, `:cd ..`. - - Tree structure is incompatible with alternative representations, - so values of 'lsview' and 'millerview' options are ignored. - - :tree! toggle current view in and out of tree mode. - - :undolist - - :undol[ist] - display list of latest changes. Use "!" to see actual commands. - - :unlet - - :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... - remove environment variables. Add ! to omit displaying of warn- - ings about nonexistent variables. - - :unselect - - :[range]unselect - unselect files in the given range (current file if no range is - given). - - :unselect {pattern} - unselect files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:unselect */` unse- - lects directories. - - :unselect !{external command} - unselect files from the list supplied by external command. - Files are matched by full paths, relative paths are converted to - absolute ones beforehand. - - :unselect //[iI] - same as item above, but reuses last search pattern. - - :version - - :ve[rsion] - show menu with version information. - - :vifm - - :vifm same as :version. - - :view - - :vie[w] - toggle on and off the quick file view. See also 'quickview' - option. - - :vie[w]! - turn on quick file view if it's off. - - :volumes - - :volumes - only for MS-Windows - display menu with volume list. Hitting l (or Enter) key opens - appropriate volume in the current pane. - - :vsplit - - :vs[plit] - switch to a two window vertical view. - - :vs[plit]! - toggle window vertical splitting. - - :vs[plit] path - split the window vertically to show both file directories. And - changes other pane to path (absolute or relative to current - directory of active pane). - - :wincmd - - :[count]winc[md] {arg} - same as running Ctrl-W [count] {arg}. - - :windo - - :windo [command...] - execute command for each pane (same as :winrun % command). - - :winrun - - :winrun type [command...] - execute command for pane(s), which is determined by type argu- - ment: - - ^ - top-left pane - - $ - bottom-right pane - - % - all panes - - . - current pane - - , - other pane - - :write - - :w[rite] - write vifminfo file. - - :wq - - :wq[!] same as :quit, but ! only disables check of backgrounded com- - mands. :wqall - - :wqa[ll][!] - same as :qall, but ! only disables check of backgrounded com- - mands. - - :xall - - :xa[ll][!] - same as :qall. - - :xit - - :x[it][!] - same as :quit. - - :yank - - :[range]y[ank] [reg] [count] - will yank files to the reg register. - - :map lhs rhs - - :map lhs rhs - map lhs key sequence to rhs in normal and visual modes. - - :map! lhs rhs - map lhs key sequence to rhs in command line mode. - - - :cmap :dmap :mmap :nmap :qmap - :vmap - - :cm[ap] lhs rhs - map lhs to rhs in command line mode. - - :dm[ap] lhs rhs - map lhs to rhs in dialog modes. - - :mm[ap] lhs rhs - map lhs to rhs in menu mode. - - :nm[ap] lhs rhs - map lhs to rhs in normal mode. - - :qm[ap] lhs rhs - map lhs to rhs in view mode. - - :vm[ap] lhs rhs - map lhs to rhs in visual mode. - - - :*map - - :cm[ap] - list all maps in command line mode. - - :dm[ap] - list all maps in dialog modes. - - :mm[ap] - list all maps in menu mode. - - :nm[ap] - list all maps in normal mode. - - :qm[ap] - list all maps in view mode. - - :vm[ap] - list all maps in visual mode. - - :*map beginning - - :cm[ap] beginning - list all maps in command line mode that start with the begin- - ning. - - :dm[ap] beginning - list all maps in dialog modes that start with the beginning. - - :mm[ap] beginning - list all maps in menu mode that start with the beginning. - - :nm[ap] beginning - list all maps in normal mode that start with the beginning. - - :qm[ap] beginning - list all maps in view mode that start with the beginning. - - :vm[ap] beginning - list all maps in visual mode that start with the beginning. - - :noremap - - :no[remap] lhs rhs - map the key sequence lhs to rhs for normal and visual modes, but - disallow mapping of rhs. - - :no[remap]! lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap - :vnoremap - - :cno[remap] lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :dn[oremap] lhs rhs - map the key sequence lhs to rhs for dialog modes, but disallow - mapping of rhs. - - :mn[oremap] lhs rhs - map the key sequence lhs to rhs for menu mode, but disallow map- - ping of rhs. - - :nn[oremap] lhs rhs - map the key sequence lhs to rhs for normal mode, but disallow - mapping of rhs. - - :qn[oremap] lhs rhs - map the key sequence lhs to rhs for view mode, but disallow map- - ping of rhs. - - :vn[oremap] lhs rhs - map the key sequence lhs to rhs for visual mode, but disallow - mapping of rhs. - - :unmap - - :unm[ap] lhs - remove user mapping of lhs from normal and visual modes. - - :unm[ap]! lhs - remove user mapping of lhs from command line mode. - - :cunmap :dunmap :munmap :nunmap :qunmap - :vunmap - - :cu[nmap] lhs - remove user mapping of lhs from command line mode. - - :du[nmap] lhs - remove user mapping of lhs from dialog modes. - - :mu[nmap] lhs - remove user mapping of lhs from menu mode. - - :nun[map] lhs - remove user mapping of lhs from normal mode. - - :qun[map] lhs - remove user mapping of lhs from view mode. - - :vu[nmap] lhs - remove user mapping of lhs from visual mode. - -Ranges - The ranges implemented include: - 2,3 - from second to third file in the list (including it) - % - the entire directory. - . - the current position in the filelist. - $ - the end of the filelist. - 't - the mark position t. - - Examples: - - :%delete - - would delete all files in the directory. - - :2,4delete - - would delete the files in the list positions 2 through 4. - - :.,$delete - - would delete the files from the current position to the end of the - filelist. - - :3delete4 - - would delete the files in the list positions 3, 4, 5, 6. - - If a backward range is given :4,2delete - an query message is given and - user can chose what to do next. - - The builtin commands that accept a range are :d[elete] and :y[ank]. - -Command macros - The command macros may be used in user commands. - - %a User arguments. When user arguments contain macros, they are - expanded before preforming substitution of %a. - - %c %"c The current file under the cursor. - - %C %"C The current file under the cursor in the other directory. - - %f %"f All of the selected files. - - %F %"F All of the selected files in the other directory list. - - %b %"b Same as %f %F. - - %d %"d Full path to current directory. - - %D %"D Full path to other file list directory. - - %rx %"rx - Full paths to files in the register {x}. In case of invalid - symbol in place of {x}, it's processed with the rest of the line - and default register is used. - - %m Show command output in a menu. - - %M Same as %m, but l (or Enter) key is handled like for :locate and - :find commands. - - %u Process command output as list of paths and compose custom view - out of it. - - %U Same as %u, but implies less list updates inside vifm, which is - absence of sorting at the moment. - - %Iu same as %u, but gives up terminal before running external com- - mand. - - %IU same as %U, but gives up terminal before running external com- - mand. - - %S Show command output in the status bar. - - %q redirect command output to quick view, which is activated if - disabled. - - %s Execute command in split window of active terminal multiplexer - (ignored if not running inside one). - - %n Forbid using of terminal multiplexer to run the command. - - %i Completely ignore command output. - - - %pc Marks the end of the main command and the beginning of the clear - command for graphical preview, which is invoked on closing pre- - view of a file. - - %pd Marks a preview command as one that directly communicates with - the terminal. Beware that this is for things like sixel which - are self-contained sequences that depend only on current cursor - position, using this with anything else is likely to mangle ter- - minal state. - - The following dimensions and coordinates are in characters: - - %px x coordinate of top-left corner of preview area. - - %py y coordinate of top-left corner of preview area. - - %pw width of preview area. - - %ph height of preview area. - - - Use %% if you need to put a percent sign in your command. - - Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. - Only the last one of them on the command will take effect. - - You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D - macros. Supported modifiers are: - - - :p - full path - - - :u - UNC name of path (e.g. "\\server" in - "\\server\share"), Windows only. Expands to current computer name - for not UNC paths. - - - :~ - relative to the home directory - - - :. - relative to current directory - - - :h - head of the file name - - - :t - tail of the file name - - - :r - root of the file name (without last extension) - - - :e - extension of the file name (last one) - - - :s?pat?sub? - substitute the first occurrence of pat with sub. - You can use any character for '?', but it must not occur in pat or - sub. - - - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with - sub. - - See ':h filename-modifiers' in Vim's documentation for the detailed - description. - - Using %x means expand corresponding macro escaping all characters that - have special meaning. And %"x means using of double quotes and escape - only backslash and double quote characters, which is more useful on - Windows systems. - - Position and quantity (if there is any) of %m, %M, %S or %s macros in - the command is unimportant. All their occurrences are removed from the - resulting command. - - %c and %f macros are expanded to file names only, when %C and %F are - expanded to full paths. %f and %F follow this in %b too. - - :com move mv %f %D - set the :move command to move all of the files selected in the - current directory to the other directory. - - The %a macro is replaced with any arguments given to an alias command. - All arguments are considered optional. - :com lsl !!ls -l %a - set the lsl command to execute ls -l with - or without an argument. - - :lsl - will list the directory contents of the current directory. - - :lsl filename - will list only the given filename. - - The macros can also be used in directly executing commands. ":!mv %f - %D" would move the current directory selected files to the other direc- - tory. - - Appending & to the end of a command causes it to be executed in the - background. Typically you want to run two kinds of external commands - in the background: - - - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); - - - console tools that do not work with terminal (:!mv %f %D &). - - You don't want to run terminal commands, which require terminal input - or output something in background because they will mess up vifm's TUI. - Anyway, if you did run such a command, you can use Ctrl-L key to update - vifm's TUI. - - Rewriting the example command with macros given above with background- - ing: - - %m, %M, %s, %S, %u and %U macros cannot be combined with background - mark (" &") as it doesn't make much sense. - -Command backgrounding - Copy and move operation can take a lot of time to proceed. That's why - vifm supports backgrounding of this two operations. To run :copy, - :move or :delete command in the background just add " &" at the end of - a command. - - For each background operation a new thread is created. Job cancella- - tion can be requested in the :jobs menu via dd shortcut. - - You can see if command is still running in the :jobs menu. Back- - grounded commands have progress instead of process id at the line - beginning. - - Background operations cannot be undone. - -Cancellation - Note that cancellation works somewhat different on Windows platform due - to different mechanism of break signal propagation. One also might - need to use Ctrl-Break shortcut instead of Ctrl-C. - - There are two types of operations that can be cancelled: - - - file system operations; - - - mounting with FUSE (but not unmounting as it can cause loss of - data); - - - calls of external applications. - - Note that vifm never terminates applications, it sends SIGINT signal - and lets the application quit normally. - - When one of set of operations is cancelled (e.g. copying of 5th file of - 10 files), further operations are cancelled too. In this case undo - history will contain only actually performed operations. - - Cancelled operations are indicated by "(cancelled)" suffix appended to - information message on statusbar. - - File system operations - - Currently the following commands can be cancelled: :alink, :chmod, - :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, - :touch. File putting (on p/P key) can be cancelled as well. It's not - hard to see that these are mainly long-running operations. - - Cancelling commands when they are repeated for undo/redo operations is - allowed for convenience, but is not recommended as further undo/redo - operations might get blocked by side-effects of partially cancelled - group of operations. - - These commands can't be cancelled: :empty, :rename, :substitute, :tr. - - Mounting with FUSE - - It's not considered to be an error, so only notification on the status - bar is shown. - - External application calls - - Each of this operations can be cancelled: :apropos, :find, :grep, - :locate. - -Patterns - :highlight, :filetype, :filextype, :fileviewer commands and 'classify' - option support globs, regular expressions and mime types to match file - names or their paths. - - There are six possible ways to write a single pattern: - - 1. [!]{comma-separated-name-globs} - - 2. [!]{{comma-separated-path-globs}} - - 3. [!]/name-regular-expression/[iI] - - 4. [!]//path-regular-expression//[iI] - - 5. [!] - - 6. undecorated-pattern - - First five forms can include leading exclamation mark that negates pat- - tern matching. - - The last form is implicitly refers to one of others. :highlight does - not accept undecorated form, while :filetype, :filextype, :fileviewer, - :select, :unselect and 'classify' treat it as list of name globs. - - Path patterns receive absolute path of the file that includes its name - component as well. - - To combine several patterns (AND them), make sure you're using one of - the first five forms and write patterns one after another, like this: - {*.vifm} Mind that if you make a mistake the whole string - will be treated as the sixth form. - - :filetype, :filextype and :fileviewer commands accept comma-separated - list of patterns instead of a single pattern, thus effectively handling - OR operation on them: - {*.vifm},{*.pdf} Forms that accept - comma-separated lists of patterns also process them as lists of alter- - natives. - - Patterns with regular expressions - - Regular expression patterns are case insensitive by default, see - description of commands, which might override default behaviour. - - Flags of regular expressions mean the following: - - "i" makes filter case insensitive; - - "I" makes filter case sensitive. They can be repeated multiple - times, but the later one takes precedence (e.g. "iiiI" is equivalent - to "I" and "IiIi" is the same as "i"). - - There are no implicit `^` or `$`, so make sure to specify them explic- - itly if the pattern should match the whole name or path. - - Patterns with globs - - "Globs" section below provides short overview of globs and some impor- - tant points that one needs to know about them. - - Patterns with mime-types - - Mime type matching is essentially globs matching applied to mime type - of a file instead of its name/path. Note: mime types aren't detected - on Windows. - - Examples - - Associate `evince` to PDF-files only inside `/home/user/downloads/` - directory (excluding its subdirectories): - - :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f - - -Globs - Globs are always case insensitive as it makes sense in general case. - - `*`, `?`, `[` and `]` are treated as special symbols in the pattern. - E.g. - - :filetype * less %c - - matches all files. One can use character classes for escaping, so - - :filetype [*] less %c - - matches only one file name, the one which contains only asterisk sym- - bol. - - `*` means any number of any characters (possibly an empty substring), - with one exception: asterisk at the pattern beginning doesn't match dot - in the first position. E.g. - - :fileviewer *.zip,*.jar zip -sf %c - - associates using of `zip` program to preview all files with `zip` or - `jar` extensions as listing of their content, but `.file.zip` won't be - matched. - - `?` means any character at this position. E.g. - - :fileviewer ?.out file %c - - calls `file` tool for all files which have exactly one character before - their extension (e.g. a.out, b.out). - - Square brackets designate character class, which means that whole char- - acter class matches against any of characters listed in it. For exam- - ple - - :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c - - makes vifm call `highlight` program to colorize source and header files - in C language for a 256-color terminal. Equal command would be - - :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c - - - Inside square brackets `^` or `!` can be used for symbol class negotia- - tion and the `-` symbol to set a range. `^` and `!` should appear - right after the opening square bracket. For example - - :filetype *.[!d]/ inspect_dir - - associates `inspect_dir` as additional handler for all directories that - have one character extension unless it's "d" letter. And - - :filetype [0-9].jpg sxiv - - associates `sxiv` picture viewer only for JPEG-files that contain sin- - gle digit in their name. - -:set options - Local options - These are kind of options that are local to a specific view. So - you can set ascending sorting order for left pane and descending - order for right pane. - - In addition to being local to views, each such option also has - two values: - - - local to current directory (value associated with current - location); - - - global to current directory (value associated with the - pane). - - The idea is that current directory can be made a temporary - exception to regular configuration of the view, until directory - change. Use :setlocal for that. :setglobal changes view value - not affecting settings until directory change. :set applies - changes immediately to all values. - - - 'aproposprg' - type: string - default: "apropos %a" - Specifies format for an external command to be invoked by the - :apropos command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :apropos - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - 'autochpos' - type: boolean - default: true - When disabled vifm will set cursor to the first line in the view - after :cd and :pushd commands instead of saved cursor position. - Disabling this will also make vifm clear information about cur- - sor position in the view history on :cd and :pushd commands (and - on startup if 'autochpos' is disabled in the vifmrc). l key in - the ":history ." and ":trashes" menus are treated like :cd com- - mand. This option also affects marks so that navigating to a - mark doesn't restore cursor position. - - When this option is enabled, more fine grained control over cur- - sor position is available via 'histcursor' option. - - 'columns' 'co' - type: integer - default: terminal width on startup - Terminal width in characters. - - 'caseoptions' - type: charset - default: "" - This option gives additional control over case sensitivity by - allowing overriding default behaviour to either always be case - sensitive or always be case insensitive. Possible values form - pairs of lower and upper case letters that configure specific - aspect of behaviour: - p - always ignore case of paths during completion. - P - always match case of paths during completion. - g - always ignore case of characters for f/F/;/,. - G - always match case of characters for f/F/;/,. - - At most one item of each pair takes affect, if both or more are - present, only the last one matters. When none of pair's ele- - ments are present, the behaviour is default (depends on operat- - ing system for path completion and on values of 'ignorecase' and - 'smartcase' options for file navigation). - - 'cdpath' 'cd' - type: string list - default: value of $CDPATH with commas instead of colons - Specifies locations to check on changing directory with relative - path that doesn't start with "./" or "../". When non-empty, - current directory is examined after directories listed in the - option. - - This option doesn't affect completion of :cd command. - - Example: - - set cdpath=~ - - This way ":cd bin" will switch to "~/bin" even if directory - named "bin" exists in current directory, while ":cd ./bin" com- - mand will ignore value of 'cdpath'. - - 'chaselinks' - type: boolean - default: false - When enabled path of view is always resolved to real path (with - all symbolic links expanded). - - 'classify' - type: string list - default: ":dir:/" - Specifies file name prefixes and suffixes depending on file type - or name. The format is either of: - - [{prefix}]:{filetype}:[{suffix}] - - [{prefix}]::{pattern}::[{suffix}] - Possible {pattern} forms are described in "Patterns" section - above. - - Priority rules: - - file name patterns have priority over type patterns - - file name patterns are matched in left-to-right order of - their appearance in this option - - Either {prefix} or {suffix} or both can be omitted (which is the - default for all unspecified file types), this means empty {pre- - fix} and/or {suffix}. {prefix} and {suffix} should consist of - at most eight characters. Elements are separated by commas. - Neither prefixes nor suffixes are part of file names, so they - don't affect commands which operate on file names in any way. - Comma (',') character can be inserted by doubling it. List of - file type names can be found in the description of filetype() - function. - - 'confirm' 'cf' - type: set - default: delete,permdelete - Defines which operations require confirmation: - - delete - moving files to trash (on d or :delete); - - permdelete - permanent deletion of files (on D or :delete! - command or on undo/redo operation). - - 'cpoptions' 'cpo' - type: charset - default: "fst" - Contains a sequence of single-character flags. Each flag - enables behaviour of older versions of vifm. Flags: - - f - when included, running :filter command results in not - inverted (matching files are filtered out) and :filter! in - inverted (matching files are left) filter, when omitted, meaning - of the exclamation mark changes to the opposite; - - s - when included, yy, dd and DD normal mode commands act on - selection, otherwise they operate on current file only; - - t - when included, (thus ) behave as and - switches active pane, otherwise and go forward in - the view history. It's possible to make both and to - work as expected by setting up the terminal to emit a custom - sequence when is pressed; see :histnext for details. - - 'cvoptions' - type: set - default: - Specifies whether entering/leaving custom views triggers events - that normally happen on entering/leaving directories: - - autocmds - trigger autocommands on entering/leaving custom - views; - - localopts - reset local options on entering/leaving custom - views; - - localfilter - reset local filter on entering/leaving custom - views. - - 'deleteprg' - type: string - default: "" - Specifies program to run on files that are permanently removed. - When empty, files are removed as usual, otherwise this command - is invoked on each file by appending its name. If the command - doesn't remove files, they will remain on the file system. - - 'dirsize' - type: enumeration - default: size - Controls how size of directories is displayed in file views. - The following values are possible: - - size - size of directory (i.e., size used to store list of - files) - - nitems - number of entries in the directory (excluding . and - ..) - - Size obtained via ga/gA overwrites this setting so seeing count - of files and occasionally size of directories is possible. - - 'dotdirs' - type: set - default: nonrootparent - Controls displaying of dot directories. The following values - are possible: - - rootparent - show "../" in root directory of file system - - nonrootparent - show "../" in non-root directories of file - system - - Note that empty directories always contain "../" entry regard- - less of value of this option. "../" disappears at the moment at - least one file is created. - - 'dotfiles' - type: boolean - default: false - Whether dot files are shown in the view. Can be controlled with - z* bindings. - - 'fastrun' - type: boolean - default: false - With this option turned on you can run partially entered com- - mands with unambiguous beginning using :! (e.g. :!Te instead of - :!Terminal or :!Te). - - 'fillchars' 'fcs' - type: string list - default: "" - Sets characters used to fill borders. - - item default used for - vborder:c ' ' left, middle and right vertical bor- - ders - - If value is omitted, its default value is used. Example: - - set fillchars=vborder:. - - 'findprg' - type: string - default: "find %s %a -print , -type d \( ! -readable -o ! -exe- - cutable \) -prune" - Specifies format for an external command to be invoked by the - :find command. The format supports expansion of macros specific - for this particular option and %% sequence for inserting percent - sign literally. The macros are: - - macro value/meaning - %s literal arguments of :find or - list of paths to search in - - %A empty or - literal arguments of :find - %a empty or - literal arguments of :find or - predicate followed by escaped arguments of :find - %p empty or - literal arguments of :find or - escaped arguments (parameters) of :find - - %u redirect output to custom view instead of showing a - menu - %U redirect output to unsorted custom view instead of - showing a menu - - Predicate in %a is "-name" on *nix and "-iname" on Windows. - - If both %u and %U are specified, %U is chosen. - - Some macros can be added implicitly: - - if %s isn't present, it's appended - - if neither of %a, %A and %p is present, %a is appended - - if neither of %s, %a, %A and %p is present, %s and %a are - appended in this order - - The macros slightly change their meaning depending on format of - :find's arguments: - - if the first argument points to an existing directory, %s is - assigned all arguments while %a, %A and %p are left empty - - otherwise: - - %s is assigned a dot (".") meaning current directory or - list of selected file names, if any - - %a, %A and %p are assigned literal arguments when first - argument starts with a dash ("-"), otherwise %a gets an escaped - version of the arguments with a predicate and %p contains - escaped version of the arguments - - Starting with Windows Server 2003 a `where` command is avail- - able. One can configure vifm to use it in the following way: - - set findprg="where /R %s %A" - - As the syntax of this command is rather limited, one can't use - :find command with selection of more than one item because the - command ignores all directory paths except for the last one. - - When using find port on Windows, another option is to setup - 'findprg' like this: - - set findprg="find %s %a" - - - 'followlinks' - type: boolean - default: true - Follow links on l or Enter. That is navigate to destination - file instead of treating the link as if it were target file. - Doesn't affects links to directories, which are always entered - (use gf key for directories). - - 'fusehome' - type: string - default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/" - Directory to be used as a root dir for FUSE mounts. Value of - the option can contain environment variables (in form - "$envname"), which will be expanded (prepend it with a slash to - prevent expansion). The value should expand to an absolute - path. - - If you change this option, vifm won't remount anything. It - affects future mounts only. See "Automatic FUSE mounts" section - below for more information. - - 'gdefault' 'gd' - type: boolean - default: false - When on, 'g' flag is on for :substitute by default. - - 'grepprg' - type: string - default: "grep -n -H -I -r %i %a %s" - Specifies format for an external command to be invoked by the - :grep command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %i - macro to specify placement of "-v" string when inversion of - results is requested, %a or %A macro to specify placement of - arguments passed to the :grep command and the %s macro to spec- - ify placement of list of files to search in. If some of the - macros are not used, they will be implicitly added after a space - to the value of the 'grepprg' option in the following order: %i, - %a, %s. Note that when neither %a nor %A are specified, it's %a - which is added implicitly. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - See 'findprg' option for description of difference between %a - and %A. - - Example of setup to use ack (http://beyondgrep.com/) instead of - grep: - - set grepprg='ack -H -r %i %a %s' - - or The Silver Searcher (https://github.com/ggreer/the_sil- - ver_searcher): - - set grepprg='ag --line-numbers %i %a %s' - - - - 'histcursor' - type: set - default: startup,dirmark,direnter - Defines situations when cursor should be moved according to - directory history: - - startup - on loading file lists during startup - - dirmark - after navigating to a mark that doesn't specify - file - - direnter - on opening directory from a file list - - This option has no effect when 'autochpos' is disabled. - - Note that the list is not exhaustive and there are other situa- - tions when cursor is positioned automatically. - - 'history' 'hi' - type: integer - default: 15 - Maximum number of stored items in all histories. - - 'hlsearch' 'hls' - type: boolean - default: true - Highlight all matches of search pattern. - - 'iec' type: boolean - default: false - Use KiB, MiB, ... suffixes instead of K, M, ... when printing - size in human-friendly format. - - 'ignorecase' 'ic' - type: boolean - default: false - Ignore case in search patterns (:substitute, / and ? commands) - and characters after f and F commands. It doesn't affect file - filtering. - - 'incsearch' 'is' - type: boolean - default: false - When this option is set, search and view update for local filter - is be performed starting from initial cursor position each time - search pattern is changed. - - 'iooptions' - type: set - default: - Controls details of file operations. The following values are - available: - - fastfilecloning - perform fast file cloning (copy-on-write), - when available - (available on Linux and btrfs file system). - - 'laststatus' 'ls' - type: boolean - default: true - Controls if status bar is visible. - - 'lines' - type: integer - default: terminal height on startup - Terminal height in lines. - - 'locateprg' - type: string - default: "locate %a" - Specifies format for an external command to be invoked by the - :locate command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :locate - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - 'mediaprg' - type: string - default: path to bundled script that supports udevil, udisks and - udisks2 - (using udisks2 requires python with dbus module - installed) - OS X: path points to a python script that uses diskutil - {only for *nix} - Specifies command to be used to manage media devices. Used by - :media command. - - The command can be passed the following parameters: - - list -- list media - - mount {device} -- mount a device - - unmount {path} -- unmount given mount point - - The output of `list` subcommand is parsed in search of lines - that start with one of the following prefixes: - - device= - specifies device path (e.g., "/dev/sde") - - label= - specifies optional device label (e.g., "Memory - card") - - info= - specifies arbitrary text to display next to - device (by - default "[label]" is used, if label is pro- - vided) - - mount-point= - specifies a mount point (can be absent or - appear more than once) - - All other lines are ignored. Each `device=` starts a new sec- - tion describing a device which should include two other possible - prefixes. - - `list` subcommand is assumed to always succeed, while exit code - of `mount` and `unmount` is taken into account to determine - whether operation was performed successfully. - - 'lsoptions' - type: string list - default: "" - scope: local - - Configures ls-like view. - - item used for - transposed filling view grid by columns rather than by - lines - - - 'lsview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple columns with file names similar to output of `ls -x` - command. See "ls-like view" section below for format descrip- - tion. This option has no effect if 'millerview' is on. - - 'milleroptions' - type: string list - default: "lsize:1,csize:1,rsize:1,rpreview:dirs" - scope: local - - Configures miller view. - - item default used for - lsize:num 0 left column - csize:num 1 center column (can't be disabled) - rsize:num 0 right column - rpreview:str dirs right column - - *size specifies ratios of columns. Each ratio is in the range - from 0 to 100 and values are adjusted to fit the limits. Zero - disables a column, but central (main) column can't be disabled. - - rpreview specifies what file-system objects should be previewed - in the right column and can take two values: dirs (only directo- - ries) or all. Both options don't include parent directory - (".."). - - Example of two-column mode which is useful in combination with - :view command: - - set milleroptions=lsize:1,csize:2 - - - 'millerview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple cascading columns. Ignores 'lsview'. - - 'mintimeoutlen' - type: integer - default: 150 - The fracture of 'timeoutlen' in milliseconds that is waited - between subsequent input polls, which affects various asynchro- - nous operations (detecting changes made by external applica- - tions, monitoring background jobs, redrawing UI). There are no - strict guarantees, however the higher this value is, the less is - CPU load in idle mode. - - 'number' 'nu' - type: boolean - default: false - scope: local - Print line number in front of each file name when 'lsview' - option is turned off. Use 'numberwidth' to control width of - line number. Also see 'relativenumber'. - - 'numberwidth' 'nuw' - type: integer - default: 4 - scope: local - Minimal number of characters for line number field. - - 'previewprg' - type: string - default: "" - scope: local - - External command to be used instead of preview programs config- - ured via :fileviewer command. - - Example: - - " always show git log in preview of files inside some reposi- - tory - au DirEnter '~/git-repo/**/*' setl previewprg='git log --color - -- %c 2>&1' - - 'quickview' - type: boolean - default: false - Whether quick view (:view) is currently active or not. - - 'relativenumber' 'rnu' - type: boolean - default: false - scope: local - Print relative line number in front of each file name when - 'lsview' option is turned off. Use 'numberwidth' to control - width of line number. Various combinations of 'number' and - 'relativenumber' lead to such results: - - nonumber number - - norelativenumber | first | 1 first - | second | 2 second - | third | 3 third - - relativenumber | 1 first | 1 first - | 0 second |2 second - | 1 third | 1 third - - - 'rulerformat' 'ruf' - type: string - default: "%l/%S " - Determines the content of the ruler. Its minimal width is 13 - characters and it's right aligned. Following macros are sup- - ported: - %= - separation point between left and right aligned halves of - the line - %l - file number - %L - total number of files in view (including filtered out - ones) - %x - number of files excluded by filters - %0- - old name for %x macro - %S - number of displayed files - %= - separation point between left and right align items - %% - percent sign - %[ - designates beginning of an optional block - %] - designates end of an optional block - - Percent sign can be followed by optional minimum field width. - Add '-' before minimum field width if you want field to be right - aligned. - - Example: - - set rulerformat='%2l-%S%[ +%x%]' - - 'runexec' - type: boolean - default: false - Run executable file on Enter or l. - - 'scrollbind' 'scb' - type: boolean - default: false - When this option is set, vifm will try to keep difference of - scrolling positions of two windows constant. - - 'scrolloff' 'so' - type: integer - default: 0 - Minimal number of screen lines to keep above and below the cur- - sor. If you want cursor line to always be in the middle of the - view (except at the beginning or end of the file list), set this - option to some large value (e.g. 999). - - 'shell' 'sh' - type: string - default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) - Full path to the shell to use to run external commands. On *nix - a shell argument can be supplied. - - 'shellcmdflag' 'shcf' - type: string - default: "-c" or "/C" (for cmd.exe on MS-Windows) - Command-line option used to pass a command to 'shell'. It's - used in contexts where command comes from the user. - - 'shortmess' 'shm' - type: charset - default: "p" - Contains a sequence of single-character flags. Each flag - enables shortening of some message displayed by vifm in the TUI. - Flags: - - L - display only last directory in tab line instead of full - path. - - M - shorten titles in windows of terminal multiplexers cre- - ated by vifm down to file name instead of using full path. - - T - truncate status-bar messages in the middle if they are - too long to fit on the command line. "..." will appear in the - middle. - - p - use tilde shortening in view titles. - - - 'showtabline' 'stal' - type: enumeration - default: multiple - Specifies when tab line should be displayed. Possible values: - - never - never display tab line - - multiple - show tab line only when there are at least two - tabs - - always - display tab line always - - Alternatively 0, 1 and 2 Vim-like values are also accepted and - correspond to "never", "multiple" and "always" respectively. - - - 'sizefmt' - type: string list - default: "units:iec" - Configures the way size is formatted in human-friendly - way. - - item value meaning - units: iec Use 1024 byte units (K or - KiB, etc.). - See 'iec' option. - si Use 1000 byte units (KB, - etc.). - precision: i > 0 How many fraction digits - to consider. - {not set} Precision of 1 for inte- - ger part < 10, - 0 otherwise (provides old - behaviour). - space {present} Insert space before unit - symbols. - This is the default. - nospace {present} Do not insert space - before unit symbols. - - Numbers are rounded from zero. Trailing zeros are - dropped. - - Example: - - set sizefmt=units:iec,precision:2,nospace - - - 'slowfs' - type: string list - default: "" - only for *nix - A list of mounter fs name beginnings (first column in - /etc/mtab or /proc/mounts) or paths prefixes for - fs/directories that work too slow for you. This option - can be used to stop vifm from making some requests to - particular kinds of file systems that can slow down file - browsing. Currently this means don't check if directory - has changed, skip check if target of symbolic links - exists, assume that link target located on slow fs to be - a directory (allows entering directories and navigating - to files via gf). If you set the option to "*", it means - all the systems are considered slow (useful for cygwin, - where all the checks might render vifm very slow if there - are network mounts). - - Example for autofs root /mnt/autofs: - - set slowfs+=/mnt/autofs - - 'smartcase' 'scs' - type: boolean - default: false - Overrides the ignorecase option if the search pattern - contains at least one upper case character. Only used - when ignorecase option is enabled. It doesn't affect - file filtering. - - 'sort' type: string list - default: +name on *nix and +iname on Windows - scope: local - Sets list of sorting keys (first item is primary key, - second is secondary key, etc.): - [+-]ext - extension of files and directories - [+-]fileext - extension of files only - [+-]name - name (including extension) - [+-]iname - name (including extension, ignores case) - [+-]type - file type - (dir/reg/exe/link/char/block/sock/fifo) - [+-]dir - directory grouping (directory < file) - [+-]gid - group id (*nix only) - [+-]gname - group name (*nix only) - [+-]mode - file type derived from its mode (*nix - only) - [+-]perms - permissions string (*nix only) - [+-]uid - owner id (*nix only) - [+-]uname - owner name (*nix only) - [+-]nlinks - number of hard links (*nix only) - [+-]inode - inode number (*nix only) - [+-]size - size - [+-]nitems - number of items in a directory (zero for - files) - [+-]groups - groups extracted via regexps from 'sort- - groups' - [+-]target - symbolic link target (empty for other - file types) - [+-]atime - time accessed (e.g. read, executed) - [+-]ctime - time changed (changes in metadata, e.g. - mode) - [+-]mtime - time modified (when file contents is - changed) - - Note: look for st_atime, st_ctime and st_mtime in "man 2 - stat" for more information on time keys. - - '+' means ascending sort for this key, and '-' means - descending sort. - - "dir" key is somewhat similar in this regard but it's - added implicitly: when "dir" is not specified, sorting - behaves as if it was the first key in the list. That's - why if one wants sorting algorithm to mix directories and - files, "dir" should be appended to sorting option, for - example like this: - - set sort+=dir - - or - - set sort=-size,dir - - Value of the option is checked to include dir key and - default sorting key (name on *nix, iname on Windows). - Here is what happens if one of them is missing: - - - type key is added at the beginning; - - - default key is added at the end; - - all other keys are left untouched (at most they are - moved). - - This option also changes view columns according to pri- - mary sorting key set, unless 'viewcolumns' option is not - empty. - - 'sortnumbers' - type: boolean - default: false - scope: local - Natural sort of (version) numbers within text. - - 'sortgroups' - type: string - default: "" - scope: local - Sets comma-separated list of regular expressions to use - for group sorting, double comma is literal comma. Each - expression should contain at least one group or its value - will be considered to be always empty. Only first match - of each regular expression is considered. Groups are - considered from right to first similar to 'sort', first - group divides list of files into sub-groups, each of - which is sorted by the second group and so on. - - Example: - set sortgroups=-(done|todo).* this would put files - with "-done" in their names above all files with "-todo". - - 'sortorder' - type: enumeration - default: ascending - Sets sort order for primary key: ascending, descending. - - 'statusline' 'stl' - type: string - default: "" - Determines the content of the status line (the line right - above command-line). Empty string means use same format - like in previous versions. Following macros are sup- - ported: - - - %t - file name (considering value of the 'classify' - option) - - - %T - symbolic link target (empty for other filetypes) - - - %f - file name relative to current directory (considers - 'classify') - - - %A - file attributes (permissions on *nix or properties - on Windows) %u - user name or uid (if it cannot be - resolved) - - - %g - group name or gid (if it cannot be resolved) - - - %s - file size in human readable format - - - %E - size of selected files in human readable format, - same as %s when no files are selected, except that it - will never show size of ../ in visual mode, since it - cannot be selected - - - %d - file modification date (uses 'timefmt' option) - - - %D - path of the other pane for single-pane layout - - - %a - amount of free space available at current parti- - tion - - - %z - short tips/tricks/hints that chosen randomly after - one minute period - - - %{} - evaluate arbitrary vifm expression - '', e.g. '&sort' - - - %* - resets or applies one of User1..User9 highlight - groups; reset happens when width field is 0 or not - specified, one of groups gets picked when width field - is in the range from 1 to 9 - - - all 'rulerformat' macros - - Percent sign can be followed by optional minimum field - width. Add '-' before minimum field width if you want - field to be right aligned. - - On Windows file properties include the following flags - (upper case means flag is on): - A - archive - H - hidden - I - content isn't indexed - R - readonly - S - system - C - compressed - D - directory - E - encrypted - P - reparse point (e.g. symbolic link) - Z - sparse file - - Example without colors: - - set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} - " - - Example with colors: - - highlight User1 ctermbg=yellow - highlight User2 ctermbg=blue ctermfg=white cterm=bold - set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* - %-5s %2* %d " - - - 'suggestoptions' - type: string list - default: - Controls when, for what and how suggestions are dis- - played. The following values are available: - - normal - in normal mode; - - visual - in visual mode; - - view - in view mode; - - otherpane - use other pane to display sugges- - tions, when available; - - delay[:num] - display suggestions after a small - delay (to do not annoy if you just want to type a fast - shortcut consisting of multiple keys), num specifies the - delay in ms (500 by default), 'timeoutlen' at most; - - keys - include shortcuts (commands and - selectors); - - foldsubkeys - fold multiple keys with common pre- - fix; - - marks - include marks; - - registers[:num] - include registers, at most num files - (5 by default). - - 'syncregs' - type: string - default: - Specifies identifier of group of instances that share - registers between each other. When several instances of - vifm have this option set to identical value, they auto- - matically synchronize contents of their registers on - operations which use them. - - 'syscalls' - type: boolean - default: false - When disabled, vifm will rely on external applications to - perform file-system operations, otherwise system calls - are used instead (much faster and supports progress - tracking). The option should eventually be removed. - Mostly *nix-like systems are affected. - - 'tabscope' - type: enumeration - default: global - Picks style of tabs, which defines what a single tab con- - tains. Possible values: - - global - tab describes complete UI of two views and - how they are arranged - - pane - tab is located "inside" a pane and manages it - and quick view - - 'tabstop' 'ts' - type: integer - default: value from curses library - Number of spaces that a Tab in the file counts for. - - 'timefmt' - type: string - default: "%m/%d %H:%M" - Format of time in file list. See "man 1 date" or "man 3 - strftime" for details. - - 'timeoutlen' 'tm' - type: integer - default: 1000 - The time in milliseconds that is waited for a mapped key - in case of already typed key sequence is ambiguous. - - 'title' - type: boolean - default: true when title can be restored, false otherwise - When enabled, title of the terminal or terminal multi- - plexer's window is updated according to current location. - Because not all terminals support setting title, this - works only if `$TERM` value matches one of the following - conditions: - - equals "xterm" or starts with "xterm-" - - equals "rxvt" or starts with "rxvt-" - - equals "screen" or starts with "screen-" - - equals "aterm" - - equals "Eterm" - - 'trash' - type: boolean - default: true - Use trash directory. See "Trash directory" section - below. - - 'trashdir' - type: string - default: on *nix: - "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" - or if $VIFM/Trash doesn't exist - "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm- - Trash" - on Windows: - "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" - List of trash directory path specifications, separated - with commas. Each list item either defines an absolute - path to trash directory or a path relative to a mount - point root when list element starts with "%r/". Value of - the option can contain environment variables (of form - "$envname"), which will be expanded (prepend $ with a - slash to prevent expansion). Environment variables are - expanded when the option is set. - - On *nix, if element ends with "%u", the mark is replaced - with real user ID and permissions are set so that only - that only owner is able to use it. - Note that even this setup is not completely secure when - combined with "%r/" and it's overall safer to keep files - in home directory, but that implies cost of copying files - between partitions. - - When new file gets cut (deleted) vifm traverses each ele- - ment of the option in the order of their appearance and - uses first trash directory that it was able to create or - that is already writable. - - Default value tries to use trash directory per mount - point and falls back to ~/.vifm/Trash on failure. - - Will attempt to create the directory if it does not - exist. See "Trash directory" section below. - - 'tuioptions' 'to' - type: charset - default: "ps" - Each flag configures some aspect of TUI appearance. The - flags are: - p - when included: - * file list inside a pane gets additional single char- - acter padding on left and right sides; - * quick view and view mode get single character pad- - ding. - s - when included, left and right borders (side borders, - hence "s" character) are visible. - u - use Unicode characters in the TUI (Unicode ellipsis - instead of "..."). - - 'undolevels' 'ul' - type: integer - default: 100 - Maximum number of changes that can be undone. Note that - here single file operation is used as a unit, not opera- - tion, i.e. deletion of 101 files will exceed default - limit. - - 'vicmd' - type: string - default: "vim" - Command used to edit files in various contexts. Amper- - sand sign at the end (regardless whether it's preceded by - space or not) means backgrounding of command. - - Background flag is ignored in certain context where vifm - waits for the editor to finish. Such contexts include - any command that spawns editor to change list of file - names or a command, with :rename being one example. `-f` - is also appended to prevent forking in such cases, so the - command needs to handle the flag. - - Additionally `+{num}` and `+'call cursor()'` arguments - are used to position cursor when location is known. - - 'viewcolumns' - type: string - default: "" - scope: local - Format string containing list of columns in the view. - When this option is empty, view columns to show are cho- - sen automatically using sorting keys (see 'sort') as a - base. Value of this option is ignored if 'lsview' is - set. See "Column view" section below for format descrip- - tion. - - An example of setting the options for both panes (note - :windo command): - - windo set viewcolumns=-{name}..,6{size},11{perms} - - 'vixcmd' - type: string - default: value of 'vicmd' - Same as 'vicmd', but takes precedence over it when run- - ning inside a graphical environment. - - 'vifminfo' - type: set - default: bookmarks,bmarks - Controls what will be saved in the $VIFM/vifminfo file. - - bmarks - named bookmarks - bookmarks - marks, except special ones like '< and '> - tui - state of the user interface (sorting, num- - ber of windows, quick - view state, active view) - dhistory - directory history - state - file name and dot filters and terminal - multiplexers integration - state - cs - primary color scheme - savedirs - save last visited directory (requires - dhistory) - chistory - command line history - shistory - search history (/ and ? commands) - phistory - prompt history - fhistory - history of local filter (see description - of the "=" normal mode - command) - dirstack - directory stack overwrites previous stack, - unless stack of - current session is empty - registers - registers content - options - all options that can be set with the :set - command (obsolete) - filetypes - associated programs and viewers (obsolete) - commands - user defined commands (see :command - description) (obsolete) - - 'vimhelp' - type: boolean - default: false - Use vim help format. - - 'wildmenu' 'wmnu' - type: boolean - default: false - Controls whether possible matches of completion will be - shown above the command line. - - 'wildstyle' - type: enumeration - default: bar - Picks presentation style of wild menu. Possible values: - - bar - one-line with left-to-right cursor - - popup - multi-line with top-to-bottom cursor - - 'wordchars' - type: string list - default: "1-8,14-31,33-255" (that is all non-whitespace - characters) - Specifies which characters in command-line mode should be - considered as part of a word. Value of the option is - comma-separated list of ranges. If both endpoints of a - range match, single endpoint is enough (e.g. "a" = "a- - a"). Both endpoints are inclusive. There are two - accepted forms: character representing itself or number - encoding character according to ASCII table. In case of - ambiguous characters (dash, comma, digit) use numeric - form. Accepted characters are in the range from 0 to - 255. Any Unicode character with code greater than 255 is - considered to be part of a word. - - The option affects Alt-D, Alt-B and Alt-F, but not Ctrl- - W. This is intentionally to allow two use cases: - - - Moving by WORDS and deletion by words. - - Moving by words and deletion by WORDS. - - To get the latter use the following mapping: - - cnoremap - - Also used for abbreviations. - - 'wrap' type: boolean - default: true - Controls whether to wrap text in quick view. - - 'wrapscan' 'ws' - type: boolean - default: true - Searches wrap around end of the list. - -Mappings - Map arguments - - LHS of mappings can be preceded by arguments which take the form - of special sequences: - - - Postpone UI updates until RHS is completely processed. - - In case of builtin mapping causing conflict for a user- - defined mapping (e.g., `t` builtin to a partially typed - `ta` user-defined mapping), ignore the builtin mapping - and wait for input indefinitely as opposed to default be- - haviour of triggering the builtin mapping after a delay - defined by 'timeoutlen'. Example: - - nnoremap tw :set wrap! - nnoremap tn :set number! - nnoremap tr :set relativenumber! - - - Special sequences - - Since it's not easy to enter special characters there are sev- - eral special sequences that can be used in place of them. They - are: - - Enter key. - - Escape key. - - - Space key. - - Less-than character (<). - - provides a way to disable a mapping (by mapping it to - ). - - Backspace key (see key conflict description below). - - - Tabulation and Shift+Tabulation keys. - - - Home/End. - - - Arrow keys. - - - PageUp/PageDown. - - - Delete key. and mean different codes, but - is more common. - - - Insert key. - - ,,...,,,,,, - Control + some key (see key conflict description below). - - only for *nix - Control + Space. - - ,,..., - ,,..., Alt + some key. - - ,,..., - ,,..., only for *nix - Alt + Ctrl + some key. - - - - Functional keys. - - - - only for MS-Windows - functional keys with Control key pressed. - - - - only for MS-Windows - functional keys with Alt key pressed. - - - - only for MS-Windows - functional keys with Shift key pressed. - - Note that due to the way terminals process their input, several - keyboard keys might be mapped to single key code, for example: - - - and ; - - - and ; - - - and ; - - - etc. - - Most of the time they are defined consistently and don't cause - surprises, but and are treated differently in differ- - ent environments (although they match each other all the time), - that's why they correspond to different keys in vifm. As a con- - sequence, if you map or be sure to repeat the mapping - with the other one so that it works in all environments. Alter- - natively, provide your mapping in one form and add one of the - following: - - " if mappings with in the LHS work - map - " if mappings with in the LHS work - map - - Whitespace - - vifm removes whitespace characters at the beginning and end of - commands. That's why you may want to use at the end of - rhs in mappings. For example: - - cmap man - - will put "man " in line when you hit the key in the command - line mode. - -Expression syntax - Supported expressions is a subset of what VimL provides. - - Expression syntax summary, from least to most significant: - - expr1 expr2 - expr2 || expr2 .. logical OR - - expr2 expr3 - expr3 && expr3 .. logical AND - - expr3 expr4 - expr4 == expr4 equal - expr4 != expr4 not equal - expr4 > expr4 greater than - expr4 >= expr4 greater than or equal - expr4 < expr4 smaller than - expr4 <= expr4 smaller than or equal - - expr4 expr5 - expr5 + expr5 .. number addition - expr5 - expr5 .. number subtraction - - expr5 expr6 - expr6 . expr6 .. string concatenation - - expr6 expr7 - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - expr7 number number constant - "string" string constant, \ is special - 'string' string constant, ' is doubled - &option option value - $VAR environment variable - v:var builtin variable - function(expr1, ...) function call - (expr1) nested expression - - ".." indicates that the operations in this level can be concate- - nated. - - expr1 - ----- - expr2 || expr2 - - Arguments are converted to numbers before evaluation. - - Result is non-zero if at least one of arguments is non-zero. - - It's right associative and with short-circuiting, so sub-expres- - sions are evaluated from left to right until result of whole - expression is determined (i.e., until first non-zero) or end of - the expression. - - expr2 - ----- - expr3 && expr3 - - Arguments are converted to numbers before evaluation. - - Result is non-zero only if both arguments are non-zero. - - It's right associative and with short-circuiting, so sub-expres- - sions are evaluated from left to right until result of whole - expression is determined (i.e., until first zero) or end of the - expression. - - expr3 - ----- - expr4 {cmp} expr4 - - Compare two expr4 expressions, resulting in a 0 if it evaluates - to false or 1 if it evaluates to true. - - equal == - not equal != - greater than > - greater than or equal >= - smaller than < - smaller than or equal <= - - Examples: - - 'a' == 'a' == 1 - 'a' > 'b' == 1 - 'a' == 'b' == 0 - '2' > 'b' == 0 - 2 > 'b' == 1 - 2 > '1b' == 1 - 2 > '9b' == 0 - -1 == -'1' == 1 - 0 == '--1' == 1 - - expr4 - ----- - expr5 + expr5 .. number addition expr5 - expr5 .. number - subtraction - - Examples: - - 1 + 3 - 3 == 1 - 1 + '2' == 3 - - expr5 - ----- - expr6 . expr6 .. string concatenation - - Examples: - - 'a' . 'b' == 'ab' - 'aaa' . '' . 'c' == 'aaac' - - expr6 - ----- - - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - For '-' the sign of the number is changed. - For '+' the number is unchanged. - For '!' non-zero becomes zero, zero becomes one. - - A String will be converted to a Number first. - - These operations can be repeated and mixed. Examples: - - --9 == 9 - ---9 == -9 - -+9 == 9 - !-9 == 0 - !'' == 1 - !'x' == 0 - !!9 == 1 - - expr7 - ----- - - number number constant - ----- - - Decimal number. Examples: - - 0 == 0 - 0000 == 0 - 01 == 1 - 123 == 123 - 10000 == 10000 - - string - ------ - "string" string constant - - Note that double quotes are used. - - A string constant accepts these special characters: - \b backspace - \e escape - \n newline - \r return - \t tab - \\ backslash - \" double quote - - Examples: - - "\"Hello,\tWorld!\"" - "Hi,\nthere!" - - literal-string - -------------- - 'string' string constant - - Note that single quotes are used. - - This string is taken as it is. No backslashes are removed or - have a special meaning. The only exception is that two quotes - stand for one quote. - - Examples: - - 'All\slashes\are\saved.' - 'This string contains doubled single quotes ''here''' - - option - ------ - &option option value (local one is preferred, if - exists) &g:option global option value &l:option - local option value - - Examples: - - echo 'Terminal size: '.&columns.'x'.&lines - if &columns > 100 - - Any valid option name can be used here (note that "all" in ":set - all" is a pseudo option). See ":set options" section above. - - environment variable - -------------------- - $VAR environment variable - - The String value of any environment variable. When it is not - defined, the result is an empty string. - - Examples: - - 'This is my $PATH env: ' . $PATH - 'vifmrc at ' . $MYVIFMRC . ' is used.' - - builtin variable - -------------------- - v:var builtin variable - - Information exposed by vifm for use in scripting. - - v:count - count passed to : command, 0 by default. Can be used in map- - pings to pass - count to a different command. - v:count1 - same as v:count, but 1 by default. - v:servername - See below. - - function call - ------------- - function(expr1, ...) function call - - See "Functions" section below. - - Examples: - - "'" . filetype('.') . "'" - filetype('.') == 'reg' - - expression nesting - ------------------ - (expr1) nested expression - - Groups any other expression of arbitrary complexity enforcing - order in which operators are applied. - - -Functions - USAGE RESULT DESCRIPTION - - chooseopt({opt}) String Queries choose parameters - passed on startup. - executable({expr}) Integer Checks whether {expr} command - available. - expand({expr}) String Expands special keywords in - {expr}. - extcached({cache}, {path}, {extcmd}) - String Caches output of {extcmd} per - {cache} and - {path} combination. - filetype({fnum} [, {resolve}]) - String Returns file type from posi- - tion. - fnameescape({expr}) String Escapes {expr} for use in a - :command. - getpanetype() String Returns type of current pane. - has({property}) Integer Checks whether instance has - {property}. - layoutis({type}) Integer Checks whether layout is of - type {type}. - paneisat({loc}) Integer Checks whether current pane is - at {loc}. - system({command}) String Executes shell command and - returns its output. - tabpagenr([{arg}]) Integer Returns number of current or - last tab. - term({command}) String Like system(), but for inter- - active commands. - - chooseopt({opt}) - - Retrieves values of options related to file choosing. {opt} can - be one of: - files returns argument of --choose-files or empty - string - dir returns argument of --choose-dir or empty string - cmd returns argument of --on-choose or empty string - delimiter returns argument of --delimiter or the default - one (\n) - - executable({expr}) - - If {expr} is absolute or relative path, checks whether path des- - tination exists and refers to an executable, otherwise checks - whether command named {expr} is present in directories listed in - $PATH. Checks for various executable extensions on Windows. - Returns boolean value describing result of the check. - - Example: - - " use custom default viewer script if it's available and - installed - " in predefined system directory, otherwise try to find it - elsewhere - if executable('/usr/local/bin/defviewer') - fileview * /usr/local/bin/defviewer %c - else - if executable('defviewer') - fileview * defviewer %c - endif - endif - - expand({expr}) - - Expands environment variables and macros in {expr} just like - it's done for command-line commands. Returns a string. See - "Command macros" section above. - - Examples: - - " percent sign - :echo expand('%%') - " the last part of directory name of the other pane - :echo expand('%D:t') - " $PATH environment variable (same as `:echo $PATH`) - :echo expand('$PATH') - - extcached({cache}, {path}, {extcmd}) - - Caches value of {extcmd} external command automatically updating - it as necessary based on monitoring change date of a {path}. - The cache is invalidated when file or its meta-data is updated. - A single path can have multiple caches associated with it. - - {path} value is normalized, but symbolic links in it aren't - resolved. - - Example: - - " display number and size of blocks actually used by a file or - directory - set statusline+=" Uses: %{ extcached('uses', - expand('%c'), - expand('stat --for- - mat=%%bx%%B %c')) }" - - filetype({fnum} [, {resolve}]) - - The result is a string, which represents file type and is one of - the list: - exe executables - reg regular files - link symbolic links - broken broken symbolic links (appears only when resolving) - dir directories - char character devices - block block devices - fifo pipes - sock *nix domain sockets - ? unknown file type (should not normally appear) - - The result can also be an empty string in case of invalid argu- - ment. - - Parameter {fnum} can have following values: - - '.' to get type of file under the cursor in the active - pane - - numerical value base 1 to get type of file on specified - line number - - Optional parameter {resolve} is treated as a boolean and speci- - fies whether symbolic links should be resolved. - - fnameescape({expr}) - - Escapes parameter to make it suitable for use as an argument of - a :command. List of escaped characters includes %, which is - doubled. - - Usage example: - - " navigate to most recently modified file in current directory - execute 'goto' fnameescape(system('ls -t | head -1')) - - getpanetype() - - Retrieves string describing type of current pane. Possible - return values: - regular regular file listing of some directory - custom custom file list (%u) - very-custom very custom file list (%U) - tree tree view - - has({property}) - - Allows examining internal parameters from scripts to e.g. figure - out environment in which application is running. Returns 1 if - property is true/present, otherwise 0 is returned. Currently - the following properties are supported (anything else will yield - 0): - unix runs in *nix-like environment (including Cygwin) - win runs on Windows - - Usage example: - - " skip user/group on Windows - if !has('win') - let $RIGHTS = '%10u:%-7g ' - endif - - execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' - - layoutis({type}) - - Checks whether current interface layout is {type} or not, where - {type} can be: - only single-pane mode - split double-pane mode (either vertical or horizon split) - vsplit vertical split (left and right panes) - hsplit horizontal split (top and bottom panes) - - Usage example: - - " automatically split vertically before enabling preview - :nnoremap w :if layoutis('only') | vsplit | endif | view! - - paneisat({loc}) - - Checks whether position of active pane in current layout matches - one of the following locations: - top pane reaches top border - bottom pane reaches bottom border - left pane reaches left border - right pane reaches right border - - system({command}) - - Runs the command in shell and returns its output (joined stan- - dard output and standard error streams). All trailing newline - characters are stripped to allow easy appending to command out- - put. Ctrl-C should interrupt the command. - - Use this function to consume output of external commands that - don't require user interaction and term() for interactive com- - mands that make use of terminal and are capable of handling - stream redirection. - - Usage example: - - " command to enter .git/ directory of git-repository (when ran - inside one) - command! cdgit :execute 'cd' system('git rev-parse --git-dir') - - tabpagenr([{arg}]) - - When called without arguments returns number of current tab page - base one. - - When called with "$" as an argument returns number of the last - tab page base one, which is the same as number of tabs. - - term({command}) - - Same as system() function, but user interface is shutdown during - the execution of the command, which makes sure that external - interactive applications won't affect the way terminal is used - by vifm. - - Usage example: - - " command to change directory by picking it via fzf - command! fzfcd :execute 'cd' "'".term('find -type d | fzf 2> - /dev/tty')."'" - -Menus and dialogs - When navigating to some path from a menu there is a difference - in end location depending on whether path has trailing slash or - not. Files normally don't have trailing slashes so "file/" - won't work and one can only navigate to a file anyway. On the - other hand with directories there are two options: navigate to a - directory or inside of it. To allow both use cases, the first - one is used on paths like "dir" and the second one for "dir/". - - Commands - - :range navigate to a menu line. - - :exi[t][!] :q[uit][!] :x[it][!] - leave menu mode. - - :noh[lsearch] - reset search match highlighting. - - :w[rite] {dest} - write all menu lines into file specified by {dest}. - - General - - j, Ctrl-N - move down. - k, Ctrl-P - move up. - Enter, l - select and exit the menu. - Ctrl-L - redraw the menu. - - Escape, Ctrl-C, ZZ, ZQ, q - quit. - - In all menus - - The following set of keys has the same meaning as in normal - mode. - - Ctrl-B, Ctrl-F - Ctrl-D, Ctrl-U - Ctrl-E, Ctrl-Y - /, ? - n, N - [count]G, [count]gg - H, M, L - zb, zt, zz - - zh - scroll menu items [count] characters to the right. - zl - scroll menu items [count] characters to the left. - zH - scroll menu items half of screen width characters to the - right. - zL - scroll menu items half of screen width characters to the - left. - - : - enter command line mode for menus (currently only :exi[t], - :q[uit], :x[it] and :{range} are supported). - - b - interpret content of the menu as list of paths and use it to - create custom view in place of previously active pane. See - "Custom views" section below. - B - same as above, but creates unsorted view. - - v - load menu content into quickfix list of the editor (Vim com- - patible by assumption) or if list doesn't have separators after - file names (colons) open each line as a file name. - - - Below is description of additional commands and reaction on - selection in some menus and dialogs. - - Apropos menu - - Selecting menu item runs man on a given topic. Menu won't be - closed automatically to allow view several pages one by one. - - Command-line mode abbreviations menu - - Type dd on an abbreviation to remove it. - - c leaves menu preserving file selection and inserts right-hand - side of selected command into command-line. - - Color scheme menu - - Selecting name of a color scheme applies it the same way as if - ":colorscheme " was executed on the command-line. - - Commands menu - - Selecting command executes it with empty arguments (%a). - - dd on a command to remove. - - Marks menu - - Selecting mark navigates to it. - - dd on a mark to remove it. - - Bookmarks menu - - Selecting a bookmark navigates to it. - - Type dd on a bookmark to remove it. - - gf and e also work to make it more convenient to bookmark files. - - Trash (:lstrash) menu - - r on a file name to restore it from trash. - - dd deletes file under the cursor. - - Trashes menu - - dd empties selected trash in background. - - Directory history and Trashes menus - - Selecting directory name will change directory of the current - view as if :cd command was used. - - Directory stack menu - - Selecting directory name will rotate stack to put selected - directory pair at the top of the stack. - - Filetype menu - - Commands from vifmrc or typed in command-line are displayed - above empty line. All commands below empty line are from .desk- - top files. - - c leaves menu preserving file selection and inserts command - after :! in command-line mode. - - Grep, find, locate, bookmarks and user menu with navigation (%M - macro) - - gf - navigate previously active view to currently selected item. - Leaves menu mode except for grep menu. Pressing Enter key has - the same effect. - - e - open selected path in the editor, stays in menu mode. - - c - leave menu preserving file selection and insert file name - after :! in command-line mode. - - User menu without navigation (%m macro) - - c leaves menu preserving file selection and inserts whole line - after :! in command-line mode. - - Grep menu - - Selecting file (via Enter or l key) opens it in editor set by - 'vicmd' at given line number. Menu won't be closed automati- - cally to allow viewing more than one result. - - See above for "gf" and "e" keys description. - - Command-line history menu - - Selecting an item executes it as command-line command, search - query or local filter. - - c leaves menu preserving file selection and inserts line into - command-line of appropriate kind. - - Volumes menu - - Selecting a drive navigates previously active pane to the root - of that drive. - - Fileinfo dialog - - Enter, q - close dialog - - Sort dialog - - h, Space - switch ascending/descending. - q - close dialog - - One shortcut per sorting key (see the dialog). - - Attributes (permissions or properties) dialog - - h, Space - check/uncheck. - q - close dialog - - Item states: - - - * - checked flag. - - - X - means that it has different value for files in selection. - - - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or - o-x+X argument for the chmod program. If you're not on OS X - and want to remove execute permission bit from all files, but - preserve it for directories, set all execute flags to 'd' and - check 'Set Recursively' flag. - - Jobs menu - - dd requests cancellation of job under cursor. The job won't be - removed from the list, but marked as being cancelled (if cancel- - lation was successfully requested). A message will pop up if - the job has already stopped. Note that on Windows cancelling - external programs like this might not work, because their parent - shell doesn't have any windows. - - e key displays errors of selected job if any were collected. - They are displayed in a new menu, but you can get back to jobs - menu by pressing h. - - - Undolist menu - - r - reset undo position to group under the cursor. - - - Media menu - - Selecting a device either mounts (if it wasn't mounted yet) or - navigates to its first mount point. - - Selecting a mount point navigates to it. - - Selecting "not mounted" line causes mounting. - - Selecting any other line does nothing. - - r - reload the list. - - m - mount/unmount device (cursor should be positioned on lines - under device information). - - [ - put cursor on the previous device. - - ] - put cursor on the next device. - - -Custom views - Definition - - Normally file views contain list of files from a single direc- - tory, but sometimes it's useful to populate them with list of - files that do not belong to the same directory, which is what - custom views are for. - - Presentation - - Custom views are still related to directory they were in before - custom list was loaded. Path to that directory (original direc- - tory) can be seen in the title of a custom view. - - Files in same directory have to be named differently, this - doesn't hold for custom views thus seeing just file names might - be rather confusing. In order to give an idea where files come - from and when possible, relative paths to original directory of - the view is displayed, otherwise full path is used instead. - - Custom views normally don't contain any inexistent files. - - Navigation - - Custom views have some differences related to navigation in reg- - ular views. - - gf - acts similar to gf on symbolic links and navigates to the - file at its real - location. - - h - go to closes parent node in tree view, otherwise return to - the original directory. - - gh - return to the original directory. - - Opening ".." entry also causes return to the original directory. - - History - - Custom list exists only while it's visible, once left one can't - return to it, so there is no appearances of it in any history. - - Filters - - Only local filter affects content of the view. This is inten- - tional, presumably if one loads list, precisely that list should - be displayed (except for inexistent paths, which are ignored). - - Search - - Although directory names are visible in listing, they are not - searchable. Only file names are taken into account (might be - changed in future, searching whole lines seems quite reason- - able). - - Sorting - - Contrary to search sorting by name works on whole visible part - of file path. - - Highlight - - Whole file name is highlighted as one entity, even if there are - directory elements. - - Updates - - Reloads can occur, though they are not automatic due to files - being scattered among different places. On a reload, inexistent - files are removed and meta-data of all other files is updated. - - Once custom view forgets about the file, it won't add it back - even if it's created again. So not seeing file previously - affected by an operation, which was undone is normal. - - Operations - - All operations that add files are forbidden for custom views. - For example, moving/copying/putting files into a custom view - doesn't work, because it doesn't make much sense. - - On the other hand, operations that use files of a custom view as - a source (e.g. yanking, copying, moving file from custom view, - deletion) and operations that modify names are all allowed. - -Compare views - Kinds - - :compare can produce four different results depending on argu- - ments: - - single compare view (ofone and either listall or listdups); - - single custom view (ofone and listunique); - - two compare views (ofboth and either listall or listdups); - - two custom views (ofboth and listunique). - - The first two display files of one file system tree. Here - duplicates are files that have at least one copy in the same - tree. The other two kinds of operation compare two trees, in - which duplicates are files that are found in both trees. - - Lists of unique files are presented in custom views because - there is no file grouping to preserve as all file ids are guar- - anteed to be distinct. - - Creation - - Arguments passed to :compare form four categories each with its - own prefix and is responsible for particular property of opera- - tion. - - Which files to compare: - - ofboth - compares files of two panes against each other; - - ofone - compares files of the same directory. - - How files are compared: - - byname - by their name only; - - bysize - only by their size; - - bycontents - by combination of size and hash of file con- - tents. - - Which files to display: - - listall - all files; - - listunique - unique files only; - - listdups - only duplicated files. - - How results are grouped (has no effect if "ofone" specified): - - groupids - files considered identical are always adjacent - in output; - - grouppaths - file system ordering is preferred (this also - enables displaying identically named files as mismatches). - - Which files to omit: - - skipempty - ignore empty files. - - Each argument can appear multiple times, the rightmost one of - the group is considered. Arguments alter default behaviour - instead of substituting it. - - Examples - - The defaults corresponds to probably the most common use case of - comparing files in two trees with grouping by paths, so the fol- - lowing are equivalent: - - :compare - :compare bycontents grouppaths - :compare bycontents listall ofboth grouppaths - - Another use case is to find duplicates in the current sub-tree: - - :compare listdups ofone - - The following command lists files that are unique to each pane: - - :compare listunique - - Look - - The view can't switch to ls-like view as it's unable to display - diff-like data. - - Comparison views have second column displaying id of the file, - files with same id are considered to be equal. The view columns - configuration is predefined. - - Behaviour - - When two views are being compared against each other the follow- - ing changes to the regular behaviour apply: - - views are scrolled synchronously (as if 'scrollbind' was - set); - - views' cursors are synchronized; - - local filtering is disabled (its results wouldn't be meaning- - ful); - - zd excludes groups of adjacent identical files, 1zd gives - usual behaviour; - - sorting is permanently disabled (ordering is fixed); - - removed files hide their counter pairs; - - exiting one of the views terminates the other immediately; - - renaming files isn't blocked, but isn't taken into account - and might require regeneration of comparison; - - entries which indicate absence of equivalent file have empty - names and can be matched as such; - - when unique files of both views are listed custom views can - be empty, this absence of unique files is stated clearly. - - One compare view has similar properties (those that are applica- - ble for single pane). - - Files are gathered in this way: - - recursively starting at current location of the view; - - dot files are excluded if view hides them at the moment of - comparison; - - directories are not taken into account; - - symbolic links to directories are ignored. - -Startup - On startup vifm determines several variables that are used dur- - ing the session. They are determined in the order they appear - below. - - On *nix systems $HOME is normally present and used as is. On - Windows systems vifm tries to find correct home directory in the - following order: - - $HOME variable; - - $USERPROFILE variable (on Windows only); - - a combination of $HOMEDRIVE and $HOMEPATH variables (on Win- - dows only). - - vifm tries to find correct configuration directory by checking - the following places: - - $VIFM variable; - - parent directory of the executable file (on Windows only); - - $HOME/.vifm directory; - - $APPDATA/Vifm directory (on Windows only); - - $XDG_CONFIG_HOME/vifm directory; - - $HOME/.config/vifm directory. - - vifm tries to find correct configuration file by checking the - following places: - - $MYVIFMRC variable; - - vifmrc in parent directory of the executable file (on Windows - only); - - $VIFM/vifmrc file. - -Configure - See "Startup" section above for the explanations on $VIFM and - $MYVIFMRC. - - The vifmrc file contains commands that will be executed on vifm - startup. There are two such files: global and local. Global - one is at {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable - description for the search algorithm used to find local vifmrc. - Global vifmrc is loaded before the local one, so that the later - one can redefine anything configured globally. - - Use vifmrc to set settings, mappings, filetypes etc. To use - multi line commands precede each next line with a slash (white- - space before slash is ignored, but all spaces at the end of the - lines are saved). For example: - - set - \smartcase - - equals "setsmartcase". When - - set - \ smartcase - - equals "set smartcase". - - The $VIFM/vifminfo file contains session settings. You may edit - it by hand to change the settings, but it's not recommended to - do that, edit vifmrc instead. You can control what settings - will be saved in vifminfo by setting 'vifminfo' option. Vifm - always writes this file on exit unless 'vifminfo' option is - empty. Marks, bookmarks, commands, histories, filetypes, file- - viewers and registers in the file are merged with vifm configu- - ration (which has bigger priority). - - Generally, runtime configuration has bigger priority during - merging, but there are some exceptions: - - - directory stack stored in the file is not overwritten unless - something is changed in vifm session that performs merge; - - - each mark or bookmark is marked with a timestamp, so that - newer value is not overwritten by older one, thus no matter - from where it comes, the newer one wins. - - The $VIFM/scripts directory can contain shell scripts. vifm - modifies its PATH environment variable to let user run those - scripts without specifying full path. All subdirectories of the - $VIFM/scripts will be added to PATH too. Script in a subdirec- - tory overlaps script with the same name in all its parent direc- - tories. - - The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories con- - tain color schemes. Available color schemes are searched in - that order, so on name conflict the one in $VIFM/colors/ wins. - - Each color scheme should have ".vifm" extension. This wasn't - the case before and for this reason the following rules apply - during lookup: - - - if there is no file with .vifm extension, all regular files - are listed; - - - otherwise only files with .vifm extension are listed (with - the extension being truncated). - -Automatic FUSE mounts - vifm has a builtin support of automated FUSE file system mounts. - It is implemented using file associations mechanism. To enable - automated mounts, one needs to use a specially formatted program - line in filetype or filextype commands. These use special - macros, which differ from macros in commands unrelated to FUSE. - Currently three formats are supported: - - 1) FUSE_MOUNT This format should be used in case when all infor- - mation needed for mounting all files of a particular type is the - same. E.g. mounting of tar files don't require any file spe- - cific options. - - Format line: - FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR - - 2) FUSE_MOUNT2 This format allows one to use specially formatted - files to perform mounting and is useful for mounting remotes, - for example remote file systems over ftp or ssh. - - Format line: - FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR - - Example file content: - - root@127.0.0.1:/ - - 3) FUSE_MOUNT3 - - This format is equivalent to FUSE_MOUNT, but omits unmounting. - It is useful for cases, when unmounting isn't needed, like when - using AVFS. - - Example :filetype command: - - :filetype - *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb - \ {Mount with avfs} - \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE - - Example `mount-avfs` helper script: - - #!/bin/sh - - dest=$1 - file=$2 - - rmdir "$dest" - ln -s "$HOME/.avfs$file#/" "$dest" - - All % macros are expanded by vifm at runtime and have the fol- - lowing meaning: - - %SOURCE_FILE is replaced by full path to selected file; - - %DESTINATION_DIR is replaced by full path to mount direc- - tory, which is created by vifm basing on the value of 'fusehome' - option; - - %PARAM value is filled from the first line of file (whole - line), though in the future it can be changed to whole file con- - tent; - - %FOREGROUND means that you want to run mount command as a - regular command (required to be able to provide input for commu- - nication with mounter in interactive way). - - %FOREGROUND is an optional macro. Other macros are not manda- - tory, but mount commands likely won't work without them. - - %CLEAR is obsolete name of %FOREGROUND, which is still sup- - ported, but might be removed in future. Its use is discouraged. - - Unlike macros elsewhere, these are recognized only if they - appear at the end of a command or are followed by a space. - There is no way to escape % either. These are historical limi- - tations, which might be addressed in the future. - - The mounted FUSE file systems will be automatically unmounted in - two cases: - - - when vifm quits (with ZZ, :q, etc. or when killed by sig- - nal); - - - when you explicitly leave mount point going up to its parent - directory (with h, Enter on "../" or ":cd ..") and other - pane is not in the same directory or its child directories. - -View look - vifm supports displaying of file list view in two different - ways: - - - in a table mode, when multiple columns can be set using - 'viewcolumns' option (see "Column view" section below for - details); - - - in a multicolumn list manner which looks almost like `ls -x` - command output (see "ls-like view" section below for - details). - - The look is local for each view and can be chosen by changing - value of the 'lsview' boolean option. - - Depending on view look some of keys change their meaning to - allow more natural cursor moving. This concerns mainly h, j, k, - l and other similar navigation keys. - - Also some of options can be ignored if they don't affect view - displaying in selected look. For example value of 'viewcolumns' - when 'lsview' is set. - -ls-like view - When this view look is enabled by setting 'lsview' option on, - vifm will display files in multiple columns. Number of columns - depends on the length of the longest file name present in cur- - rent directory of the view. Whole file list is automatically - reflowed on directory change, terminal or view resize. - - View looks close to output of `ls -x` command, so files are - listed left to right in rows. - - In this mode file manipulation commands (e.g. d) don't work - line-wise like they do in Vim, since such operations would be - uncommon for file manipulation tasks. Thus, for example, dd - will remove only current file. - - By default the view is filled by lines, 'lsoptions' can be used - to get filling by columns. - - Note that tree-view and compare view inhibit ls-like view. - -Column view - View columns are described by a comma-separated list of column - descriptions, each of which has the following format - [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} - where fw stands for full width and tw stands for text width. - - So it basically consists of four parts: - 1. Optional alignment specifier - 2. Optional width specifier - 3. Mandatory column name - 4. Optional cropping specifier - - Alignment specifier - - It's an optional minus or asterisk sign as the first symbol of - the string. - - Specifies type of text alignment within a column. Three types - are supported: - - - left align - - set viewcolumns=-{name} - - - right align (default) - - set viewcolumns={name} - - - dynamic align - - It's like left alignment, but when the text is bigger than the - column, the alignment is made at the right (so the part of the - field is always visible). - - set viewcolumns=*{name} - - Width specifier - - It's a number followed by a percent sign, two numbers (second - one should be less than or equal to the first one) separated - with a dot or a single number. - - Specifies column width and its units. There are three size - types: - - - absolute size - column width is specified in characters - - set viewcolumns=-100{name},20.15{ext} - - results in two columns with lengths of 100 and 20 and a - reserved space of five characters on the left of second col- - umn. - - - relative (percent) size - column width is specified in per- - cents of view width - - set viewcolumns=-80%{name},15%{ext},5%{mtime} - - results in three columns with lengths of 80/100, 15/100 and - 5/100 of view width. - - - auto size (default) - column width is automatically determined - - set viewcolumns=-{name},{ext},{mtime} - - results in three columns with length of one third of view - width. There is no size adjustment to content, since it will - slow down rendering. - - Columns of different sizing types can be freely mixed in one - view. Though sometimes some of columns can be seen partly or be - completely invisible if there is not enough space to display - them. - - Column name - - This is just a sort key surrounded with curly braces or {root}, - e.g. - - {name},{ext},{mtime} - - {name} and {iname} keys are the same and present both for con- - sistency with 'sort' option. - - Following keys don't have corresponding sorting keys: - - - {root} - display name without extension (as a complement - for {ext}) - - - {fileroot} - display name without extension for anything - except for directories and symbolic links to directories (as - a complement for {fileext}) - - Empty curly braces ({}) are replaced with the default secondary - column for primary sort key. So after the next command view will - be displayed almost as if 'viewcolumns' is empty, but adding - ellipsis for long file names: - - set viewcolumns=-{name}..,6{}. - - Cropping specifier - - It's from one to three dots after closing curly brace in column - format. - - Specifies type of text truncation if it doesn't fit in the col- - umn. Currently three types are supported: - - - truncation - text is truncated - - set viewcolumns=-{name}. - - results in truncation of names that are too long too fit in - the view. - - - adding of ellipsis - ellipsis on the left or right are added - when needed - - set viewcolumns=-{name}.. - - results in that ellipsis are added at the end of too long - file names. - - - none (default) - text can pass column boundaries - - set viewcolumns=-{name}...,{ext} - - results in that long file names can partially be written on - the ext column. - -Color schemes - The color schemes in vifm can be applied in two different ways: - - - as the primary color scheme; - - - as local to a pane color scheme. - - Both types are set using :colorscheme command, but of different - forms: - - - :colorscheme color_scheme_name - for the primary color - scheme; - - - :colorscheme color_scheme_name directory - for local color - schemes. - - Look of different parts of the TUI (Text User Interface) is - determined in this way: - - - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, - ErrorMsg, StatusLine, JobLine, SuggestBox and WildMenu are - always determined by the primary color scheme; - - - CurrLine, Selected, Directory, Link, BrokenLink, Socket, - Device, Executable, Fifo, CmpMismatch, Win, AuxWin and Oth- - erWin are determined by primary color scheme and a set of - local color schemes, which can be empty. - - There might be a set of local color schemes because they are - structured hierarchically according to file system structure. - For example, having the following piece of file system: - - ~ - `-- bin - | - `-- my - - Two color schemes: - - # ~/.vifm/colors/for_bin - highlight Win cterm=none ctermfg=white ctermbg=red - highlight CurrLine cterm=none ctermfg=red ctermbg=black - - # ~/.vifm/colors/for_bin_my - highlight CurrLine cterm=none ctermfg=green ctermbg=black - - And these three commands in the vifmrc file: - - colorscheme Default - colorscheme for_bin ~/bin - colorscheme for_bin_my ~/bin/my - - File list will look in the following way for each level: - - - ~/ - Default color scheme - black background - cursor with blue background - - - ~/bin/ - mix of Default and for_bin color schemes - red background - cursor with black background and red foreground - - - ~/bin/my/ - mix of Default, for_bin and for_bin_my color - schemes - red background - cursor with black background and green foreground - -Trash directory - vifm has support of trash directory, which is used as temporary - storage for deleted files or files that were cut. Using trash - is controlled by the 'trash' option, and exact path to the trash - can be set with 'trashdir' option. Trash directory in vifm dif- - fers from the system-wide one by default, because of possible - incompatibilities of storing deleted files among different file - managers. But one can set 'trashdir' to "~/.local/share/Trash" - to use a "standard" trash directory. - - There are two scenarios of using trash in vifm: - - 1. As a place for storing files that were cut by "d" and may - be inserted to some other place in file system. - - 2. As a storage of files, that are deleted but not purged yet. - - The first scenario uses deletion ("d") operations to put files - to trash and put ("p") operations to restore files from trash - directory. Note that such operations move files to and from - trash directory, which can be long term operations in case of - different partitions or remote drives mounted locally. - - The second scenario uses deletion ("d") operations for moving - files to trash directory and :empty command-line command to - purge all previously deleted files. - - Deletion and put operations depend on registers, which can point - to files in trash directory. Normally, there are no nonexistent - files in registers, but vifm doesn't keep track of modifications - under trash directory, so one shouldn't expect value of regis- - ters to be absolutely correct if trash directory was modified - not by operation that are meant for it. But this won't lead to - any issues with operations, since they ignore nonexistent files. - -Client-Server - vifm supports remote execution of command-line mode commands, - remote changing of directories and expression evaluation. This - is possible using --remote and --remote-expr command-line argu- - ments. - - To execute a command remotely combine --remote argument with -c - or +. For example: - - vifm --remote -c 'cd /' - vifm --remote '+cd /' - - To change directory not using command-line mode commands one can - specify paths right after --remote argument, like this: - - vifm --remote / - vifm --remote ~ - vifm --remote /usr/bin /tmp - - Evaluating expression remotely might be useful to query informa- - tion about an instance, for example its location: - - vifm --remote-expr 'expand("%d")' - - If there are several running instances, the target can be speci- - fied with --server-name option (otherwise, the first one lexico- - graphically is used): - - vifm --server-name work --remote ~/work/project - - List of names of running instances can be obtained via - --server-list option. Name of the current one is available via - v:servername. - - - v:servername - server name of the running vifm instance. Empty if - client-server feature is disabled. - -Plugin - Plugin for using vifm in vim as a file selector. - - Commands: - - :EditVifm select a file or files to open in the current - buffer. - :Vifm alias for :EditVifm. - :SplitVifm split buffer and select a file or files to open. - :VsplitVifm vertically split buffer and select a file or files - to open. - :DiffVifm select a file or files to compare to the current - file with - :vert diffsplit. - :TabVifm select a file or files to open in tabs. - - Each command accepts up to two arguments: left pane directory - and right pane directory. After arguments are checked, vifm - process is spawned in a special "file-picker" mode. To pick - files just open them either by pressing l, i or Enter keys, or - by running :edit command. If no files are selected, file under - the cursor is opened, otherwise whole selection is passed to the - plugin and opened in vim. - - The plugin have only two settings. It's a string variable named - g:vifm_term to let user specify command to run GUI terminal. By - default it's equal to 'xterm -e'. And another string variable - named g:vifm_exec, which equals "vifm" by default and specifies - path to vifm's executable. To pass arguments to vifm use - g:vifm_exec_args, which is empty by default. - - To use the plugin copy the vifm.vim file to either the system - wide vim/plugin directory or into ~/.vim/plugin. - - If you would prefer not to use the plugin and it is in the sys- - tem wide plugin directory add - - let loaded_vifm=1 - - to your ~/.vimrc file. - -Reserved - The following command names are reserved and shouldn't be used - for user commands. - - g[lobal] - v[global] - -ENVIRONMENT - VIFM Points to main configuration directory (usually - ~/.vifm/). - - MYVIFMRC - Points to main configuration file (usually - ~/.vifm/vifmrc). - - These environment variables are valid inside vifm and also can - be used to configure it by setting some of them before running - vifm. - - When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception - for Windows: vifmrc in the same directory as vifm.exe has higher - priority than $VIFM/vifmrc). - - See "Startup" section above for more details. - - VIFM_FUSE_FILE - On execution of external commands this variable is set to - the full path of file used to initiate FUSE mount of the - closes mount point from current pane directory up. It's - not set when outside FUSE mount point. When vifm is used - inside terminal multiplexer, it tries to set this vari- - able as well (it doesn't work this way on its own). - -SEE ALSO - vifm-convert-dircolors(1), vifm-pause(1) - - Website: https://vifm.info/ - Wiki: https://wiki.vifm.info/ - - Esperanto translation of the documentation by Sebastian Cyprych: - http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html - -AUTHOR - Vifm was written by ksteen - And currently is developed by xaizek - - - -vifm 0.10.1 July 29, 2019 VIFM(1) diff --git a/vifm/vifm/colors/Default.vifm b/vifm/vifm/colors/Default.vifm deleted file mode 100644 index a19cf21..0000000 --- a/vifm/vifm/colors/Default.vifm +++ /dev/null @@ -1,81 +0,0 @@ -" You can edit this file by hand. -" The " character at the beginning of a line comments out the line. -" Blank lines are ignored. - -" The Default color scheme is used for any directory that does not have -" a specified scheme and for parts of user interface like menus. A -" color scheme set for a base directory will also -" be used for the sub directories. - -" The standard ncurses colors are: -" Default = -1 = None, can be used for transparency or default color -" Black = 0 -" Red = 1 -" Green = 2 -" Yellow = 3 -" Blue = 4 -" Magenta = 5 -" Cyan = 6 -" White = 7 - -" Light versions of colors are also available (set bold attribute): -" LightBlack -" LightRed -" LightGreen -" LightYellow -" LightBlue -" LightMagenta -" LightCyan -" LightWhite - -" Available attributes (some of them can be combined): -" bold -" underline -" reverse or inverse -" standout -" italic (on unsupported systems becomes reverse) -" none - -" Vifm supports 256 colors you can use color numbers 0-255 -" (requires properly set up terminal: set your TERM environment variable -" (directly or using resources) to some color terminal name (e.g. -" xterm-256color) from /usr/lib/terminfo/; you can check current number -" of colors in your terminal with tput colors command) - -" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color - -highlight clear - -highlight Win cterm=none ctermfg=white ctermbg=black -highlight Directory cterm=bold ctermfg=cyan ctermbg=default -highlight Link cterm=bold ctermfg=yellow ctermbg=default -highlight BrokenLink cterm=bold ctermfg=red ctermbg=default -highlight Socket cterm=bold ctermfg=magenta ctermbg=default -highlight Device cterm=bold ctermfg=red ctermbg=default -highlight Fifo cterm=bold ctermfg=cyan ctermbg=default -highlight Executable cterm=bold ctermfg=green ctermbg=default -highlight Selected cterm=bold ctermfg=magenta ctermbg=default -highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default -highlight TopLine cterm=none ctermfg=black ctermbg=white -highlight TopLineSel cterm=bold ctermfg=black ctermbg=default -highlight StatusLine cterm=bold ctermfg=black ctermbg=white -highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black -highlight CmdLine cterm=none ctermfg=white ctermbg=black -highlight ErrorMsg cterm=none ctermfg=red ctermbg=black -highlight Border cterm=none ctermfg=black ctermbg=white -highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white -highlight SuggestBox cterm=bold ctermfg=default ctermbg=default -highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red -highlight AuxWin cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight TabLine cterm=none ctermfg=white ctermbg=black -highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default -highlight User1 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User2 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User3 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User4 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User5 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User6 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User7 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User8 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight User9 cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default -highlight OtherWin cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default diff --git a/vifm/vifm/scripts/README b/vifm/vifm/scripts/README deleted file mode 100644 index 7694952..0000000 --- a/vifm/vifm/scripts/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory is dedicated for user-supplied scripts/executables. -vifm modifies its PATH environment variable to let user run those -scripts without specifying full path. All subdirectories are added -as well. File in a subdirectory overrules file with the same name -in parent directories. Restart might be needed to recognize files -in newly created or renamed subdirectories. \ No newline at end of file diff --git a/vifm/vifm/vifm-help.txt b/vifm/vifm/vifm-help.txt deleted file mode 100644 index 5bb61b4..0000000 --- a/vifm/vifm/vifm-help.txt +++ /dev/null @@ -1,6213 +0,0 @@ -VIFM(1) VIFM(1) - - - -NAME - vifm - vi file manager - -SYNOPSIS - vifm [OPTION]... - vifm [OPTION]... path - vifm [OPTION]... path path - -DESCRIPTION - Vifm is an ncurses based file manager with vi like keybindings. If you - use vi, vifm gives you complete keyboard control over your files with- - out having to learn a new set of commands. - -OPTIONS - vifm starts in the current directory unless it is given a different - directory on the command line or 'vifminfo' option includes "savedirs" - (in which case last visited directories are used as defaults). - - - Read list of files from standard input stream and compose custom - view out of them (see "Custom views" section). Current working - directory is used as a base for relative paths. - - Starts Vifm in the specified path. - - - Starts Vifm in the specified paths. - - Specifying two directories triggers split view even when vifm was in - single-view mode on finishing previous session. To suppress this be- - haviour :only command can be put in the vifmrc file. - - When only one path argument is found on command-line, the left/top pane - is automatically set as the current view. - - Paths to files are also allowed in case you want vifm to start with - some archive opened. - - --select - Open parent directory of the given path and select specified - file in it. - - -f Makes vifm instead of opening files write selection to - $VIFM/vimfiles and quit. - - --choose-files |- - Sets output file to write selection into on exit instead of - opening files. "-" means standard output. Use empty value to - disable it. - - --choose-dir |- - Sets output file to write last visited directory into on exit. - "-" means standard output. Use empty value to disable it. - - --delimiter - Sets separator for list of file paths written out by vifm. - Empty value means null character. Default is new line charac- - ter. - - --on-choose - Sets command to be executed on selected files instead of opening - them. The command may use any of macros described in "Command - macros" section below. The command is executed once for whole - selection. - - --logging[=] - Log some operational details $VIFM/log. If the optional startup - log path is specified and permissions allow to open it for writ- - ing, then logging of early initialization (before value of $VIFM - is determined) is put there. - - --server-list - List available server names and exit. - - --server-name - Name of target or this instance (sequential numbers are appended - on name conflict). - - --remote - Sends the rest of the command line to another instance of vifm, - --server-name is treated just like any other argument and should - precede --remote on the command line. When there is no server, - quits silently. There is no limit on how many arguments can be - processed. One can combine --remote with -c or + to execute commands in already running instance of vifm. - See also "Client-Server" section below. - - --remote-expr - passes expression to vifm server and prints result. See also - "Client-Server" section below. - - -c or + - Run command-line mode on startup. Commands in such - arguments are executed in the order they appear in command line. - Commands with spaces or special symbols must be enclosed in dou- - ble or single quotes or all special symbols should be escaped - (the exact syntax strongly depends on shell). "+" argument is - equivalent to "$" and thus picks last item of of the view. - - --help, -h - Show a brief command summary and exit vifm. - - --version, -v - Show version information and quit. - - --no-configs - Skip reading vifmrc and vifminfo. - - - See "Startup" section below for the explanations on $VIFM. - -General keys - Ctrl-C or Escape - cancel most operations (see "Cancellation" section below), clear - all selected files. - - Ctrl-L clear and redraw the screen. - -Basic Movement - The basic vi key bindings are used to move through the files and pop-up - windows. - - k, gk, or Ctrl-P - move cursor up one line. - - j, gj or Ctrl-N - move cursor down one line. - - h when 'lsview' is off move up one directory (moves to parent - directory node in tree view), otherwise move left one file. - - l when 'lsview' is off move into a directory or launches a file, - otherwise move right one file. - - gg move to the first line of the file list. - - G move to the last line in the file list. - - gh go up one directory regardless of view representation (regular, - ls-like). Also can be used to leave custom views including tree - view. - - gl or Enter - enter directory or launch a file. - - H move to the first file in the window. - - M move to the file in the middle of the window. - - L move to the last file in the window. - - Ctrl-F or Page Down - move forward one page. - - Ctrl-B or Page Up - move back one page. - - Ctrl-D jump back one half page. - - Ctrl-U jump forward one half page. - - n% move to the file that is n percent from the top of the list (for - example 25%). - - 0 or ^ move cursor to the first column. See 'lsview' option descrip- - tion. - - $ move cursor to the last column. See 'lsview' option descrip- - tion. - - Space switch file lists. - - gt switch to the next tab (wrapping around). - - {n}gt switch to the tab number {n} (wrapping around). - - gT switch to the previous tab (wrapping around). - - {n}gT switch to {n}-th previous tab. - -Movement with Count - Most movement commands also accept a count, 12j would move down 12 - files. - - [count]% - move to percent of the file list. - - [count]j - move down [count] files. - - [count]k - move up [count] files. - - [count]G or [count]gg - move to list position [count]. - - [count]h - go up [count] directories. - -Scrolling panes - zt redraw pane with file in top of list. - - zz redraw pane with file in center of list. - - zb redraw pane with file in bottom of list. - - Ctrl-E scroll pane one line down. - - Ctrl-Y scroll pane one line up. - -Pane manipulation - Second character can be entered with or without Control key. - - Ctrl-W H - move the pane to the far left. - - Ctrl-W J - move the pane to the very bottom. - - Ctrl-W K - move the pane to the very top. - - Ctrl-W L - move the pane to the far right. - - - Ctrl-W h - switch to the left pane. - - Ctrl-W j - switch to the pane below. - - Ctrl-W k - switch to the pane above. - - Ctrl-W l - switch to the right pane. - - - Ctrl-W b - switch to bottom-right window. - - Ctrl-W t - switch to top-left window. - - - Ctrl-W p - switch to previous window. - - Ctrl-W w - switch to other pane. - - - Ctrl-W o - leave only one pane. - - Ctrl-W s - split window horizontally. - - Ctrl-W v - split window vertically. - - - Ctrl-W x - exchange panes. - - Ctrl-W z - quit preview pane or view modes. - - - Ctrl-W - - decrease size of the view by count. - - Ctrl-W + - increase size of the view by count. - - Ctrl-W < - decrease size of the view by count. - - Ctrl-W > - increase size of the view by count. - - - Ctrl-W | - set current view size to count. - - Ctrl-W _ - set current view size to count. - - Ctrl-W = - make size of two views equal. - - For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com- - mands count can be given before and/or after Ctrl-W. The resulting - count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases - window size by 4 lines or columns. - - Ctrl-W | and Ctrl-W _ maximise current view by default. - -Marks - Marks are set the same way as they are in vi. - - You can use these characters for marks [a-z][A-Z][0-9]. - - m[a-z][A-Z][0-9] - set a mark for the file at the current cursor position. - - '[a-z][A-Z][0-9] - navigate to the file set for the mark. - - - There are also several special marks that can't be set manually: - - - ' (single quote) - previously visited directory of the view, thus - hitting '' allows switching between two last locations - - - < - the first file of the last visually selected block - - - > - the last file of the last visually selected block - -Searching - /regular expression pattern - search for files matching regular expression in forward direc- - tion and advance cursor to next match. - - / perform forward search with top item of search pattern history. - - ?regular expression pattern - search for files matching regular expression in backward direc- - tion and advance cursor to previous match. - - ? perform backward search with top item of search pattern history. - - Trailing slash for directories is taken into account, so /\/ searches - for directories and symbolic links to directories. At the moment // - works too, but this can change in the future, so consider escaping the - slash if not typing pattern by hand. - - Matches are automatically selected if 'hlsearch' is set. Enabling - 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' - options affect case sensitivity of search queries. - - - [count]n - go to the next file matching last search pattern. Takes last - search direction into account. - - [count]N - go to the previous file matching last search pattern. Takes - last search direction into account. - - If 'hlsearch' option is set, hitting n/N to perform search and go to - the first matching item resets current selection in normal mode. It is - not the case if search was already performed on files in the directory, - thus selection is not reset after clearing selection with escape key - and hitting n/N key again. - - Note: vifm uses extended regular expressions for / and ?. - - - [count]f[character] - search forward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]F[character] - search backward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]; - find the next match of f or F. - - [count], - find the previous match of f or F. - - Note: f, F, ; and , wrap around list beginning and end when they are - used alone and they don't wrap when they are used as selectors. - -File Filters - There are three basic file filters: - - - dot files filter (does not affect "." and ".." special directories, - whose appearance is controlled by the 'dotdirs' option), see 'dot- - files' option; - - - permanent filter; - - - local filter (see description of the "=" normal mode command). - - Permanent filter essentially allows defining a group of files names - which are not desirable to be seen by default, like temporary or backup - files, which might be created alongside normal ones. Just like you - don't usually need to see hidden dot files (files starting with a dot). - Local filter on the other hand is for temporary immediate filtering of - file list at hand, to get rid of uninterested files in the view or to - make it possible to use % range in a :command. - - For the purposes of more deterministic editing permanent filter is - split into two parts: - - - one edited explicitly via :filter command; - - - another one which is edited implicitly via zf shortcut. - - Files are tested against both parts and a match counts if at least one - of the parts matched. - - - Each file list has its own copy of each filter. - - Filtered files are not checked in / search or :commands. - - Files and directories are filtered separately. This is done by append- - ing a slash to a directory name before testing whether it matches the - filter. Examples: - - - " filter directories which names end with '.files' - :filter /^.*\.files\/$/ - - " filter files which names end with '.d' - :filter {*.d} - - " filter files and directories which names end with '.o' - :filter /^.*\.o\/?$/ - - Note: vifm uses extended regular expressions. - - The basic vim folding key bindings are used for managing filters. - - - za toggle visibility of dot files. - - zo show dot files. - - zm hide dot files. - - zf add selected files to permanent filter. - - zO reset permanent filter. - - zR save and reset all filters. - - zr clear local filter. - - zM restore all filters (undoes last zR). - - zd exclude selection or current file from a custom view. Does - nothing for regular view. For tree view excluding directory - excludes that sub-tree. For compare views zd hides group of - adjacent identical files, count can be specified as 1 to exclude - just single file or selected items instead. Files excluded this - way are not counted as filtered out and can't be returned unless - view is reloaded. - - =regular expression pattern - filter out files that don't match regular expression. Whether - view is updated as regular expression is changed depends on the - value of the 'incsearch' option. This kind of filter is auto- - matically reset when directory is changed. - -Other Normal Mode Keys - [count]: - enter command line mode. [count] generates range. - - q: open external editor to prompt for command-line command. See - "Command line editing" section for details. - - q/ open external editor to prompt for search pattern to be searched - in forward direction. See "Command line editing" section for - details. - - q? open external editor to prompt for search pattern to be searched - in backward direction. See "Command line editing" section for - details. - - q= open external editor to prompt for filter pattern. See "Command - line editing" section for details. Unlike other q{x} commands - this one doesn't work in Visual mode. - - [count]!! and [count]! - enter command line mode with entered ! command. [count] modi- - fies range. - - Ctrl-O go backwards through directory history of current view. Nonex- - istent directories are automatically skipped. - - Ctrl-I if 'cpoptions' contains "t" flag, and switch active - pane just like does, otherwise it goes forward through - directory history of current view. Nonexistent directories are - automatically skipped. - - Ctrl-G create a window showing detailed information about the current - file. - - Shift-Tab - enters view mode (works only after activating view pane with - :view command). - - ga calculate directory size. Uses cached directory sizes when pos- - sible for better performance. As a special case calculating - size of ".." entry results in calculation of size of current - directory. - - gA like ga, but force update. Ignores old values of directory - sizes. - - If file under cursor is selected, each selected item is processed, oth- - erwise only current file is updated. - - gf find link destination (like l with 'followlinks' off, but also - finds directories). - - gr only for MS-Windows - same as l key, but tries to run program with administrative - privileges. - - av go to visual mode into selection amending state preserving cur- - rent selection. - - gv go to visual mode restoring last selection. - - [reg]gs - when no register is specified, restore last t selection (similar - to what gv does for visual mode selection). If register is - present, then all files listed in that register and which are - visible in current view are selected. - - gu - make names of selected files lowercase. - - [count]guu and [count]gugu - make names of [count] files starting from the current one lower- - case. Without [count] only current file is affected. - - gU - make names of selected files uppercase. - - [count]gUU and [count]gUgU - make names of [count] files starting from the current one upper- - case. Without [count] only current file is affected. - - e explore file in the current pane. - - i handle file (even if it's an executable and 'runexec' option is - set). - - cw change word is used to rename a file or files. - - cW change WORD is used to change only name of file (without exten- - sion). - - cl change link target. - - co only for *nix - change file owner. - - cg only for *nix - change file group. - - [count]cp - change file attributes (permission on *nix and properties on - Windows). If [count] is specified, it's treated as numerical - argument for non-recursive `chmod` command (of the form - [0-7]{3,4}). - - [count]C - clone file [count] times. - - [count]dd or d[count]selector - move selected file or files to trash directory (if 'trash' - option is set, otherwise delete). See "Trash directory" section - below. - - [count]DD or D[count]selector - like dd and d, but omitting trash directory (even when - 'trash' option is set). - - Y, [count]yy or y[count]selector - yank selected files. - - p copy yanked files to the current directory or move the files to - the current directory if they were deleted with dd or :d[elete] - or if the files were yanked from trash directory. See "Trash - directory" section below. - - P move the last yanked files. The advantage of using P instead of - d followed by p is that P moves files only once. This isn't - important in case you're moving files in the same file system - where your home directory is, but using P to move files on some - other file system (or file systems, in case you want to move - files from fs1 to fs2 and your home is on fs3) can save your - time. - - al put symbolic links with absolute paths. - - rl put symbolic links with relative paths. - - t select or unselect (tag) the current file. - - u undo last change. - - Ctrl-R redo last change. - - dp in compare view of "ofboth grouppaths" kind, makes corresponding - entry of the other pane equal to the current one. The semantics - is as follows: - - nothing done for identical entries - - if file is missing in current view, its pair gets removed - - if file is missing or differs in other view, it's replaced - - file pairs are defined by matching relative paths - File removal obeys 'trash' option. When the option is enabled, - the operation can be undone/redone (although results won't be - visible automatically). - Unlike in Vim, this operation is performed on a single line - rather than a set of adjacent changes. - - do same as dp, but applies changes in the opposite direction. - - v or V enter visual mode, clears current selection. - - [count]Ctrl-A - increment first number in file name by [count] (1 by default). - - [count]Ctrl-X - decrement first number in file name by [count] (1 by default). - - ZQ same as :quit!. - - ZZ same as :quit. - - . repeat last command-line command (not normal mode command) of - this session (does nothing right after startup or :restart com- - mand). The command doesn't depend on command-line history and - can be used with completely disabled history. - - ( go to previous group. Groups are defined by primary sorting - key. For name and iname members of each group have same first - letter, for all other sorting keys vifm uses size, uid, ... - - ) go to next group. See ( key description above. - - { speeds up navigation to closest previous entry of the opposite - type by moving to the first file backwards when cursor is on a - directory and to the first directory backwards when cursor is on - a file. This is essentially a special case of ( that is locked - on "dirs". - - } same as {, but in forward direction. - - [c go to previous mismatched entry in directory comparison view or - do nothing. - - ]c go to next mismatched entry in directory comparison view or do - nothing. - - [d go to previous directory entry or do nothing. - - ]d go to next directory entry or do nothing. - - [r same as :siblprev. - - ]r same as :siblnext. - - [R same as :siblprev!. - - ]R same as :siblnext!. - - [s go to previous selected entry or do nothing. - - ]s go to next selected entry or do nothing. - - [z go to first sibling of current entry. - - ]z go to last sibling of current entry. - - zj go to next directory sibling of current entry or do nothing. - - zk go to previous directory sibling of current entry or do nothing. - -Using Count - You can use count with commands like yy. - - [count]yy - yank count files starting from current cursor position downward. - - Or you can use count with motions passed to y, d or D. - - d[count]j - delete (count + 1) files starting from current cursor position - upward. - -Registers - vifm supports multiple registers for temporary storing list of yanked - or deleted files. - - Registers should be specified by hitting double quote key followed by a - register name. Count is specified after register name. By default - commands use unnamed register, which has double quote as its name. - - Though all commands accept registers, most of commands ignores them - (for example H or Ctrl-U). Other commands can fill register or append - new files to it. - - Presently vifm supports ", _, a-z and A-Z characters as register names. - - As mentioned above " is unnamed register and has special meaning of the - default register. Every time when you use named registers (a-z and A- - Z) unnamed register is updated to contain same list of files as the - last used register. - - _ is black hole register. It can be used for writing, but its list is - always empty. - - Registers with names from a to z and from A to Z are named ones. Low- - ercase registers are cleared before adding new files, while uppercase - aren't and should be used to append new files to the existing file list - of appropriate lowercase register (A for a, B for b, ...). - - Registers can be changed on :empty command if they contain files under - trash directory (see "Trash directory" section below). - - Registers do not contain one file more than once. - - Example: - - "a2yy - - puts names of two files to register a (and to the unnamed register), - - "Ad - - removes one file and append its name to register a (and to the unnamed - register), - - p or "ap or "Ap - - inserts previously yanked and deleted files into current directory. - -Selectors - y, d, D, !, gu and gU commands accept selectors. You can combine them - with any of selectors below to quickly remove or yank several files. - - Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, - ;, comma, ', ^, 0 and $. But there are some additional ones. - - a all files in current view. - - s selected files. - - S all files except selected. - - Examples: - - - dj - delete file under cursor and one below; - - - d2j - delete file under cursor and two below; - - - y6gg - yank all files from cursor position to 6th file in the list. - - When you pass a count to whole command and its selector they are multi- - plied. So: - - - 2d2j - delete file under cursor and four below; - - - 2dj - delete file under cursor and two below; - - - 2y6gg - yank all files from cursor position to 12th file in the - list. - -Visual Mode - Visual mode has to generic operating submodes: - - - plain selection as it is in Vim; - - - selection editing submode. - - Both modes select files in range from cursor position at which visual - mode was entered to current cursor position (let's call it "selection - region"). Each of two borders can be adjusted by swapping them via "o" - or "O" keys and updating cursor position with regular cursor motion - keys. Obviously, once initial cursor position is altered this way, - real start position becomes unavailable. - - Plain Vim-like visual mode starts with cleared selection, which is not - restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- - trary to it, selection editing doesn't clear previously selected files - and restores them after reject. Accepting selection by performing an - operation on selected items (e.g. yanking them via "y") moves cursor to - the top of current selection region (not to the top most selected file - of the view). - - In turn, selection editing supports three types of editing (look at - statusbar to know which one is currently active): - - - append - amend selection by selecting elements in selection region; - - - remove - amend selection by deselecting elements in selection - region; - - - invert - amend selection by inverting selection of elements in - selection region. - - No matter how you activate selection editing it starts in "append". - One can switch type of operation (in the order given above) via "Ctrl- - G" key. - - Almost all normal mode keys work in visual mode, but instead of accept- - ing selectors they operate on selected items. - - Enter save selection and go back to normal mode not moving cursor. - - av leave visual mode if in amending mode (restores previous selec- - tion), otherwise switch to amending selection mode. - - gv restore previous visual selection. - - v, V, Ctrl-C or Escape - leave visual mode if not in amending mode, otherwise switch to - normal visual selection. - - Ctrl-G switch type of amending by round robin scheme: append -> remove - -> invert. - - : enter command line mode. Selection is cleared on leaving the - mode. - - o switch active selection bound. - - O switch active selection bound. - - gu, u make names of selected files lowercase. - - gU, U make names of selected files uppercase. - -View Mode - This mode tries to imitate the less program. List of builtin shortcuts - can be found below. Shortcuts can be customized using :qmap, :qnoremap - and :qunmap command-line commands. - - Shift-Tab, Tab, q, Q, ZZ - return to normal mode. - - [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter - scroll forward one line (or [count] lines). - - [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P - scroll backward one line (or [count] lines). - - [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space - scroll forward one window (or [count] lines). - - [count]b, [count]Ctrl-B, [count]Alt-V - scroll backward one window (or [count] lines). - - [count]z - scroll forward one window (and set window to [count]). - - [count]w - scroll backward one window (and set window to [count]). - - [count]Alt-Space - scroll forward one window, but don't stop at end-of-file. - - [count]d, [count]Ctrl-D - scroll forward one half-window (and set half-window to [count]). - - [count]u, [count]Ctrl-U - scroll backward one half-window (and set half-window to - [count]). - - r, Ctrl-R, Ctrl-L - repaint screen. - - R reload view preserving scroll position. - - F toggle automatic forwarding. Roughly equivalent to periodic - file reload and scrolling to the bottom. The behaviour is simi- - lar to `tail -F` or F key in less. - - [count]/pattern - search forward for ([count]-th) matching line. - - [count]?pattern - search backward for ([count]-th) matching line. - - [count]n - repeat previous search (for [count]-th occurrence). - - [count]N - repeat previous search in reverse direction (for [count]-th - occurrence). - - [count]g, [count]<, [count]Alt-< - scroll to the first line of the file (or line [count]). - - [count]G, [count]>, [count]Alt-> - scroll to the last line of the file (or line [count]). - - [count]p, [count]% - scroll to the beginning of the file (or N percent into file). - - v invoke an editor to edit the current file being viewed. The - command for editing is taken from the 'vicmd'/'vixcmd' option - value and extended with middle line number prepended by a plus - sign and name of the current file. - - All "Ctrl-W x" keys work the same was as in Normal mode. Active mode - is automatically changed on navigating among windows. When less-like - mode activated on file preview is left using one by "Ctrl-W x" keys, - its state is stored until another file is displayed using preview (it's - possible to leave the mode, hide preview pane, do something else, then - get back to the file and show preview pane again with previously stored - state in it). - -Command line Mode - These keys are available in all submodes of the command line mode: com- - mand, search, prompt and filtering. - - Down, Up, Left, Right, Home, End and Delete are extended keys and they - are not available if vifm is compiled with --disable-extended-keys - option. - - Esc, Ctrl-C - leave command line mode, cancels input. Cancelled input is - saved into appropriate history and can be recalled later. - - Ctrl-M, Enter - execute command and leave command line mode. - - Ctrl-I, Tab - complete command or its argument. - - Shift-Tab - complete in reverse order. - - Ctrl-_ stop completion and return original input. - - Ctrl-B, Left - move cursor to the left. - - Ctrl-F, Right - move cursor to the right. - - Ctrl-A, Home - go to line beginning. - - Ctrl-E, End - go to line end. - - Alt-B go to the beginning of previous word. - - Alt-F go to the end of next word. - - Ctrl-U remove characters from cursor position till the beginning of - line. - - Ctrl-K remove characters from cursor position till the end of line. - - Ctrl-H, Backspace - remove character before the cursor. - - Ctrl-D, Delete - remove character under the cursor. - - Ctrl-W remove characters from cursor position till the beginning of - previous word. - - Alt-D remove characters from cursor position till the beginning of - next word. - - Ctrl-T swap the order of current and previous character and move cursor - forward or, if cursor past the end of line, swap the order of - two last characters in the line. - - Alt-. insert last part of previous command to current cursor position. - Each next call will insert last part of older command. - - Ctrl-G edit command-line content in external editor. See "Command line - editing" section for details. - - Ctrl-N recall more recent command-line from history. - - Ctrl-P recall older command-line from history. - - Up recall more recent command-line from history, that begins as the - current command-line. - - Down recall older command-line from history, that begins as the cur- - rent command-line. - - Ctrl-] trigger abbreviation expansion. - -Pasting special values - The shortcuts listed below insert specified values into current cursor - position. Last key of every shortcut references value that it inserts: - - c - [c]urrent file - - d - [d]irectory path - - e - [e]xtension of a file name - - r - [r]oot part of a file name - - t - [t]ail part of directory path - - - a - [a]utomatic filter - - m - [m]anual filter - - = - local filter, which is bound to "=" in normal mode - - Values related to filelist in current pane are available through Ctrl-X - prefix, while values from the other pane have doubled Ctrl-X key as - their prefix (doubled Ctrl-X is presumably easier to type than upper- - case letters; it's still easy to remap the keys to correspond to names - of similar macros). - - Ctrl-X c - name of the current file of the active pane. - - Ctrl-X d - path to the current directory of the active pane. - - Ctrl-X e - extension of the current file of the active pane. - - Ctrl-X r - name root of current file of the active pane. - - Ctrl-X t - the last component of path to the current directory of the - active pane. - - Ctrl-X Ctrl-X c - name of the current file of the inactive pane. - - Ctrl-X Ctrl-X d - path to the current directory of the inactive pane. - - Ctrl-X Ctrl-X e - extension of the current file of the inactive pane. - - Ctrl-X Ctrl-X r - name root of current file of the inactive pane. - - Ctrl-X Ctrl-X t - the last component of path to the current directory of the inac- - tive pane. - - - Ctrl-X a - value of implicit permanent filter (old name "automatic") of the - active pane. - - Ctrl-X m - value of explicit permanent filter (old name "manual") of the - active pane. - - Ctrl-X = - value of local filter of the active pane. - - - Ctrl-X / - last pattern from search history. - -Command line editing - vifm provides a facility to edit several kinds of data, that is usually - edited in command-line mode, in external editor (using command speci- - fied by 'vicmd' or 'vixcmd' option). This has at least two advantages - over built-in command-line mode: - - one can use full power of Vim to edit text; - - finding and reusing history entries becomes possible. - - The facility is supported by four input submodes of the command-line: - - command; - - forward search; - - backward search; - - file rename (see description of cw and cW normal mode keys). - - Editing command-line using external editor is activated by the Ctrl-G - shortcut. It's also possible to do almost the same from Normal and - Visual modes using q:, q/ and q? commands. - - Temporary file created for the purpose of editing the line has the fol- - lowing structure: - - 1. First line, which is either empty or contains text already entered - in command-line. - - 2. 2nd and all other lines with history items starting with the most - recent one. Altering this lines in any way won't change history - items stored by vifm. - - After editing application is finished the first line of the file is - taken as the result of operation, when the application returns zero - exit code. If the application returns an error (see :cquit command in - Vim), all the edits made to the file are ignored, but the initial value - of the first line is saved in appropriate history. - -More Mode - This is the mode that appears when status bar content is so big that it - doesn't fit on the screen. One can identify the mode by "-- More --" - message at the bottom. - - The following keys are handled in this mode: - - - Enter, Ctrl-J, j or Down - scroll one line down. - - Backspace, k or Up - scroll one line up. - - - d scroll one page (half of a screen) down. - - u scroll one page (half of a screen) up. - - - Space, f or PageDown - scroll down a screen. - - b or PageUp - scroll up a screen. - - - G scroll to the bottom. - - g scroll to the top. - - - q, Escape or Ctrl-C - quit the mode. - - : switch to command-line mode. - -Commands - Commands are executed with :command_name - - Commented out lines should start with the double quote symbol ("), - which may be preceded by whitespace characters intermixed with colons. - Inline comments can be added at the end of the line after double quote - symbol, only last line of a multi-line command can contain such com- - ment. Not all commands support inline comments as their syntax con- - flicts with names of registers and fields where double quotes are - allowed. - - Most of the commands have two forms: complete and the short one. Exam- - ple: - - :noh[lsearch] - - This means the complete command is nohlsearch, and the short one is - noh. - - Most of command-line commands completely reset selection in the current - view. However, there are several exceptions: - - - `:invert s` most likely leaves some files selected; - - - :normal command (when it doesn't leave command-line mode); - - - :if and :else commands don't affect selection on successful execu- - tion. - - '|' can be used to separate commands, so you can give multiple commands - in one line. If you want to use '|' in an argument, precede it with - '\'. - - These commands see '|' as part of their arguments even when it's - escaped: - - :[range]! - :autocmd - :cabbrev - :cmap - :cnoreabbrev - :cnoremap - :command - :dmap - :dnoremap - :filetype - :fileviewer - :filextype - :map - :mmap - :mnoremap - :nmap - :nnoremap - :noremap - :normal - :qmap - :qnoremap - :vmap - :vnoremap - :wincmd - :windo - :winrun - - To be able to use another command after one of these, wrap it with the - :execute command. An example: - - if filetype('.') == 'reg' | execute '!!echo regular file' | endif - - :[count] - - :number - move to the file number. - :12 would move to the 12th file in the list. - :0 move to the top of the list. - :$ move to the bottom of the list. - - :[count]command - The only builtin :[count]command are :[count]d[elete] and - :[count]y[ank]. - - :d3 would delete three files starting at the current file position - moving down. - - :3d would delete one file at the third line in the list. - - :command [args] - - :[range]!program - execute command via shell. Accepts macros. - - :[range]!command & - - same as above, but the command is run in the background using vifm's - means. - - Programs that write to stdout like "ls" create an error message showing - partial output of the command. - - Note the space before ampersand symbol, if you omit it, command will be - run in the background using job control of your shell. - - Accepts macros. - - :!! - - :[range]!!command - same as :!, but pauses before returning. - - :!! repeat the last command. - - :alink - - :[range]alink[!?] - create absolute symbolic links to files in directory of inactive - view. With "?" prompts for destination file names in an edi- - tor. "!" forces overwrite. - - :[range]alink[!] path - create absolute symbolic links to files in directory specified - by the path (absolute or relative to directory of inactive - view). - - :[range]alink[!] name1 name2... - create absolute symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. - - :apropos - - :apropos keyword... - create a menu of items returned by the apropos command. Select- - ing an item in the menu opens corresponding man page. By - default the command relies on the external "apropos" utility, - which can be customized by altering value of the 'aproposprg' - option. - - :autocmd - - :au[tocmd] {event} {pat} {cmd} - register autocommand for the {event}, which can be: - - DirEnter - triggered after directory is changed - Event name is case insensitive. - - {pat} is a comma-separated list of modified globs patterns, - which can contain tilde or environment variables. All paths use - slash ('/') as directory separator. The pattern can start with - a '!', which negates it. Patterns that do not contain slashes - are matched against the last item of the path only (e.g. "dir" - in "/path/dir"). Literal comma can be entered by doubling it. - Two modifications to globs matching are as follows: - - * - never matches a slash (i.e., can signify single direc- - tory level) - - ** - matches any character (i.e., can match path of arbi- - trary depth) - - {cmd} is a :command or several of them separated with '|'. - - Examples of patterns: - - conf.d - matches conf.d directory anywhere - - *.d - matches directories ending with ".d" anywhere - - **.git - matches something.git, but not .git anywhere - - **/.git/** - matches /path/.git/objects, but not /path/.git - - **/.git/**/ - matches /path/.git/ only (because of trailing - slash) - - /etc/* - matches /etc/conf.d/, /etc/X11, but not - /etc/X11/fs - - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc. - - /etc/**/* - matches /etc/ itself and any file below it - - /etc/**/** - matches /etc/ itself and any file below it - - :au[tocmd] [{event}] [{pat}] - list those autocommands that match given event-pattern combina- - tion. - {event} and {pat} can be omitted to list all autocommands. To - list any autocommands for specific pattern one can use * place- - holder in place of {event}. - - :au[tocmd]! [{event}] [{pat}] - remove autocommands that match given event-pattern combination. - Syntax is the same as for listing above. - - :apropos - repeat last :apropos command. - - :bmark - - :bmark tag1 [tag2 [tag3...]] - bookmark current directory with specified tags. - - :bmark! path tag1 [tag2 [tag3...]] - same as :bmark, but allows bookmarking specific path instead of - current directory. This is for use in vifmrc and for bookmark- - ing files. - - Path can contain macros that expand to single path (%c, %C, %d, - %D) or those that can expand to multiple paths, but contain only - one (%f, %F, %rx). The latter is done for convenience on using - the command interactively. Complex macros that include spaces - (e.g. "%c:gs/ /_") should be escaped. - - :bmarks - - :bmarks - display all bookmarks in a menu. - - :bmarks [tag1 [tag2...]] - display menu of bookmarks that include all of the specified - tags. - - :bmgo - - :bmgo [tag1 [tag2...]] - when there are more than one match acts exactly like :bmarks, - otherwise navigates to single match immediately (and fails if - there is no match). - - :cabbrev - - :ca[bbrev] - display menu of command-line mode abbreviations. - - :ca[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :ca[bbrev] lhs rhs - register new or overwrites existing abbreviation for command- - line mode. rhs can contain spaces and any special sequences - accepted in rhs of mappings (see "Mappings" section below). - Abbreviations are expanded non-recursively. - - :cnoreabbrev - - :cnorea[bbrev] - display menu of command-line mode abbreviations. - - :cnorea[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :cnorea[bbrev] lhs rhs - same as :cabbrev, but mappings in rhs are ignored during expan- - sion. - - :cd - - :cd or :cd ~ or :cd $HOME - change to home directory. - - :cd - go to the last visited directory. - - :cd ~/dir - change directory to ~/dir. - - :cd /curr/dir /other/dir - change directory of the current pane to /curr/dir and directory - of the other pane to /other/dir. Relative paths are assumed to - be relative to directory of current view. Command won't fail if - one of directories is invalid. All forms of the command accept - macros. - - :cd! /dir - same as :cd /dir /dir. - - :cds - - :cds[!] pattern string - navigate to path obtained by substituting first match in current - path. Arguments can include slashes, but starting first argu- - ment with a separator will activate below form of the command. - Specifying "!" changes directory of both panes. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - :cds[!]/pattern/string/[flags] - same as above, but with :substitute-like syntax. Other punctua- - tion characters can be used as separators. - - :change - - :c[hange] - create a menu window to alter a files properties. - - :chmod - - :[range]chmod - display file attributes (permission on *nix and properties on - Windows) change dialog. - - :[range]chmod[!] arg... - only for *nix - change permissions for files. See `man 1 chmod` for arg format. - "!" means set permissions recursively. - - :chown - - :[range]chown - only for *nix - same as co key in normal mode. - - :[range]chown [user][:][group] - only for *nix - change owner and/or group of files. Operates on directories - recursively. - - :clone - - :[range]clone[!?] - clones files in current directory. With "?" vifm will open vi - to edit file names. "!" forces overwrite. Macros are expanded. - - :[range]clone[!] path - clones files to directory specified with the path (absolute or - relative to current directory). "!" forces overwrite. Macros - are expanded. - - :[range]clone[!] name1 name2... - clones files in current directory giving each next clone a cor- - responding name from the argument list. "!" forces overwrite. - Macros are expanded. - - :colorscheme - - :colo[rscheme]? - print current color scheme name on the status bar. - - :colo[rscheme] - display a menu with a list of available color schemes. You can - choose primary color scheme here. It is used for view if no - directory specific colorscheme fits current path. It's also - used to set border color (except view titles) and colors in - menus and dialogs. - - :colo[rscheme] color_scheme_name - change primary color scheme to color_scheme_name. In case of - errors (e.g. some colors are not supported by terminal) either - nothing is changed or color scheme is reset to builtin colors to - ensure that TUI is left in a usable state. - - :colo[rscheme] color_scheme_name directory - associate directory with the color scheme. The directory argu- - ment can be either absolute or relative path when :colorscheme - command is executed from command line, but mandatory should be - an absolute path when the command is executed in scripts loaded - at startup (until vifm is completely loaded). - - :colo[rscheme] color_scheme_name color_scheme_name... - loads the first color scheme in the order given that exists and - is supported by the terminal. If none matches, current one - remains unchanged. For example: - - " use a separate color scheme for panes which are inside FUSE - mounts - execute 'colorscheme in-fuse' &fusehome - - :comclear - - :comc[lear] - remove all user defined commands. - - :command - - :com[mand] - display a menu of user commands. - - :com[mand] beginning - display user defined commands that start with the beginning. - - :com[mand] name action - set a new user command. - Trying to use a reserved command name will result in an error - message. - Use :com[mand]! to overwrite a previously set command. - Unlike vim user commands do not have to start with a capital - letter. User commands are run in a shell by default. To run a - command in the background you must set it as a background com- - mand with & at the end of the commands action (:com rm rm %f &). - Command name cannot contain numbers or special symbols (except - '?' and '!'). - - :com[mand] name /pattern - set search pattern. - - :com[mand] name =pattern - set local filter value. - - :com[mand] name filter{:filter args} - set file name filter (see :filter command description). For - example: - - " display only audio files - :command onlyaudio fil- - ter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - " display everything except audio files - :command noaudio fil- - ter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - - :com[mand] cmd :commands - set kind of an alias for internal command (like in a shell). - Passes range given to alias to an aliased command, so running - :%cp after - :command cp :copy %a - equals - :%copy - - :compare - - :compare [byname | bysize | bycontents | listall | listunique | - listdups | ofboth | ofone | groupids | grouppaths | skipempty]... - compare files in one or two views according the arguments. The - default is "bycontents listall ofboth grouppaths". See "Compare - views" section below for details. Tree structure is incompati- - ble with alternative representations, so values of 'lsview' and - 'millerview' options are ignored. - - :copen - - :cope[n] - opens menu with contents of the last displayed menu with naviga- - tion to files by default, if any. - - :copy - - :[range]co[py][!?][ &] - copy files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]co[py][!] path[ &] - copy files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]co[py][!] name1 name2...[ &] - copy files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :cquit - - :cq[uit][!] - same as :quit, but also aborts directory choosing via - --choose-dir (empties output file) and returns non-zero exit - code. - - :cunabbrev - - :cuna[bbrev] lhs - unregister command-line mode abbreviation by its lhs. - - :cuna[bbrev] rhs - unregister command-line mode abbreviation by its rhs, so that - abbreviation could be removed even after expansion. - - :delbmarks - - :delbmarks - remove bookmarks from current directory. - - :delbmarks tag1 [tag2 [tag3...]] - remove set of bookmarks that include all of the specified tags. - - :delbmarks! - remove all bookmarks. - - :delbmarks! path1 [path2 [path3...]] - remove bookmarks of listed paths. - - :delcommand - - :delc[ommand] user_command - remove user defined command named user_command. - - :delete - - :[range]d[elete][!][ &] - delete selected file or files. "!" means complete removal - (omitting trash). - - :[range]d[elete][!] [reg] [count][ &] - delete selected or [count] files to the reg register. "!" means - complete removal (omitting trash). - - :delmarks - - :delm[arks]! - delete all marks. - - :delm[arks] marks ... - delete specified marks, each argument is treated as a set of - marks. - - :display - - :di[splay] - display menu with registers content. - - :di[splay] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :dirs - - :dirs display directory stack. - - :echo - - :ec[ho] [...] - evaluate each argument as an expression and output them sepa- - rated with a space. See help on :let command for a definition - of . - - :edit - - :[range]e[dit] [file...] - open selected or passed file(s) in editor. Macros and environ- - ment variables are expanded. - - :else - - :el[se] - execute commands until next matching :endif if all other condi- - tions didn't match. See also help on :if and :endif commands. - - :elseif - - :elsei[f] {expr1} - execute commands until next matching :elseif, :else or :endif if - conditions of previous :if and :elseif branches were evaluated - to zero. See also help on :if and :endif commands. - - :empty - - :empty permanently remove files from all existing non-empty trash - directories (see "Trash directory" section below). Trash direc- - tories which are specified via %r and/or %u also get deleted - completely. Also remove all operations from undolist that have - no sense after :empty and remove all records about files located - inside directories from all registers. Removal is performed as - background task with undetermined amount of work and can be - checked via :jobs menu. - - :endif - - :en[dif] - end conditional block. See also help on :if and :else commands. - - :execute - - :exe[cute] [...] - evaluate each argument as an expression and join results sepa- - rated by a space to get a single string which is then executed - as a command-line command. See help on :let command for a defi- - nition of . - - :exit - - :exi[t][!] - same as :quit. - - :file - - :f[ile][ &] - display menu of programs set for the file type of the current - file. " &" forces running associated program in background. - - :f[ile] arg[ &] - run associated command that begins with the arg skipping opening - menu. " &" forces running associated program in background. - - :filetype - - :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],... - associate given program list to each of the patterns. Associ- - ated program (command) is used by handlers of l and Enter keys - (and also in the :file menu). If you need to insert comma into - command just double it (",,"). Space followed by an ampersand - as two last characters of a command means running of the command - in the background. Optional description can be given to each - command to ease understanding of what command will do in the - :file menu. Vifm will try the rest of the programs for an asso- - ciation when the default isn't found. When program entry - doesn't contain any of vifm macros, name of current file is - appended as if program entry ended with %c macro on *nix and %"c - on Windows. On Windows path to executables containing spaces - can (and should be for correct work with such paths) be double - quoted. See "Patterns" section below for pattern definition. - See also "Automatic FUSE mounts" section below. Example for zip - archives and several actions: - - filetype *.zip,*.jar,*.war,*.ear - \ {Mount with fuse-zip} - \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, - \ {View contents} - \ zip -sf %c | less, - \ {Extract here} - \ tar -xf %c, - - Note that on OS X when `open` is used to call an app, vifm is - unable to check whether that app is actually available. So if - automatic skipping of programs that aren't there is desirable, - `open` should be replaced with an actual command. - - :filet[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filextype filename". - - :filextype - - :filex[type] pattern-list [{ description }] def_program,program2,... - same as :filetype, but this command is ignored if not running in - X. In X :filextype is equal to :filetype. See "Patterns" sec- - tion below for pattern definition. See also "Automatic FUSE - mounts" section below. - - For example, consider the following settings (the order might - seem strange, but it's for the demonstration purpose): - - filetype *.html,*.htm - \ {View in lynx} - \ lynx - filextype *.html,*.htm - \ {Open with dwb} - \ dwb %f %i &, - filetype *.html,*.htm - \ {View in links} - \ links - filextype *.html,*.htm - \ {Open with firefox} - \ firefox %f &, - \ {Open with uzbl} - \ uzbl-browser %f %i &, - - If you're using vifm inside a terminal emulator that is running - in graphical environment (when X is used on *nix; always on Win- - dows), vifm attempts to run application in this order: - - 1. lynx - 2. dwb - 3. links - 4. firefox - 5. uzbl - - If there is no graphical environment (checked presence of $DIS- - PLAY environment variable on *nix; never happens on Windows), - the list will look like: - - 1. lynx - 2. links - - Just as if all :filextype commands were not there. - - The purpose of such differentiation is to allow comfortable use - of vifm with same settings in desktop environment/through remote - connection (SSH)/in native console. - - Note that on OS X $DISPLAY isn't defined unless you define it, - so :filextype should be used only if you set $DISPLAY in some - way. - - :filext[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filetype filename". - - :fileviewer - - :filev[iewer] pattern-list command1,command2,... - register specified list of commands as viewers for each of the - patterns. Viewer is a command which output is captured and dis- - played in one of the panes of vifm after pressing "e" or running - :view command. When the command doesn't contain any of vifm - macros, name of current file is appended as if command ended - with %c macro. Comma escaping and missing commands processing - rules as for :filetype apply to this command. See "Patterns" - section below for pattern definition. - - Example for zip archives: - - fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to - preview:" - - :filev[iewer] filename - list (in menu mode) currently registered patterns that match - specified filename. - - :filter - - :filter[!] {pattern} - filter files matching the pattern out of directory listings. - '!' controls state of filter inversion after updating filter - value (see also 'cpoptions' description). Filter is matched - case sensitively on *nix and case insensitively on Windows. See - "File Filters" and "Patterns" sections. - - Example: - - " filter all files ending in .o from the filelist. - :filter /.o$/ - - - :filter[!] {empty-pattern} - same as above, but use last search pattern as pattern value. - - Example: - - :filter //I - - - :filter - reset filter (set it to an empty string) and show all files. - - :filter! - same as :invert. - - :filter? - show information on local, name and auto filters. - - :find - - :[range]fin[d] pattern - display results of find command in the menu. Searches among - selected files if any. Accepts macros. By default the command - relies on the external "find" utility, which can be customized - by altering value of the 'findprg' option. - - :[range]fin[d] -opt... - same as :find above, but user defines all find arguments. - Searches among selected files if any. - - :[range]fin[d] path -opt... - same as :find above, but user defines all find arguments. - Ignores selection and range. - - :[range]fin[d] - repeat last :find command. - - :finish - - :fini[sh] - stop sourcing a script. Can only be used in a vifm script file. - This is a quick way to skip the rest of the file. - - :goto - - :go[to] - change directory if necessary and put specified path under the - cursor. The path should be existing non-root path. Macros and - environment variables are expanded. - - :grep - - :[range]gr[ep][!] pattern - will show results of grep command in the menu. Add "!" to - request inversion of search (look for lines that do not match - pattern). Searches among selected files if any and no range - given. Ignores binary files by default. By default the command - relies on the external "grep" utility, which can be customized - by altering value of the 'grepprg' option. - - :[range]gr[ep][!] -opt... - same as :grep above, but user defines all grep arguments, which - are not escaped. Searches among selected files if any. - - :[range]gr[ep][!] - repeat last :grep command. "!" of this command inverts "!" in - repeated command. - - :help - - :h[elp] - show the help file. - - :h[elp] argument - is the same as using ':h argument' in vim. Use vifm- - to get help on vifm (tab completion works). This form of the - command doesn't work when 'vimhelp' option is off. - - :hideui - - :hideui - hide interface to show previous commands' output. - - :highlight - - :hi[ghlight] - display information about all highlight groups active at the - moment. - - :hi[ghlight] clear - reset all highlighting to builtin defaults and removed all file- - name-specific rules. - - :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ ) - remove specified rule. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) - display information on given highlight group or file name pat- - tern of color scheme used in the active view. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) - cterm=style | ctermfg=color | ctermbg=color - set style (cterm), foreground (ctermfg) or/and background - (ctermbg) parameters of highlight group or file name pattern for - color scheme used in the active view. - - All style values as well as color names are case insensitive. - - Available style values (some of them can be combined): - - bold - - underline - - reverse or inverse - - standout - - italic (on unsupported systems becomes reverse) - - none - - Available group-name values: - - Win - color of all windows (views, dialogs, menus) and default color - for their content (e.g. regular files in views) - - AuxWin - color of auxiliary areas of windows - - OtherWin - color of inactive pane - - Border - color of vertical parts of the border - - TabLine - tab line color (for 'tabscope' set to "global") - - TabLineSel - color of the tip of selected tab (regardless of 'tab- - scope') - - TopLineSel - top line color of the current pane - - TopLine - top line color of the other pane - - CmdLine - the command line/status bar color - - ErrorMsg - color of error messages in the status bar - - StatusLine - color of the line above the status bar - - JobLine - color of job line that appears above the status line - - WildMenu - color of the wild menu items - - SuggestBox - color of key suggestion box - - CurrLine - line at cursor position in active view - - OtherLine - line at cursor position in inactive view - - Selected - color of selected files - - Directory - color of directories - - Link - color of symbolic links in the views - - BrokenLink - color of broken symbolic links - - Socket - color of sockets - - Device - color of block and character devices - - Executable - color of executable files - - Fifo - color of fifo pipes - - CmpMismatch - color of mismatched files in side-by-side comparison - by path - - User1..User9 - 9 colors which can be used via %* 'statusline' macro - - Available colors: - - -1 or default or none - default or transparent - - black and lightblack - - red and lightred - - green and lightgreen - - yellow and lightyellow - - blue and lightblue - - magenta and lightmagenta - - cyan and lightcyan - - white and lightwhite - - 0-255 - corresponding colors from 256-color palette - - Light versions of colors are regular colors with bold attribute set. - So order of arguments of :highlight command is important and it's bet- - ter to put "cterm" in front of others to prevent it from overwriting - attributes set by "ctermfg" or "ctermbg" arguments. - - For convenience of color scheme authors xterm-like names for 256 color - palette is also supported. The mapping is taken from - http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- - cated entries were altered by adding an underscore followed by numeri- - cal suffix. - - 0 Black 86 Aquamarine1 172 Orange3 - 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 - 2 Green 88 DarkRed_2 174 LightPink3 - 3 Yellow 89 DeepPink4_2 175 Pink3 - 4 Blue 90 DarkMagenta 176 Plum3 - 5 Magenta 91 DarkMagenta_2 177 Violet - 6 Cyan 92 DarkViolet 178 Gold3_2 - 7 White 93 Purple 179 LightGoldenrod3 - 8 LightBlack 94 Orange4_2 180 Tan - 9 LightRed 95 LightPink4 181 MistyRose3 - 10 LightGreen 96 Plum4 182 Thistle3 - 11 LightYellow 97 MediumPurple3 183 Plum2 - 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 - 13 LightMagenta 99 SlateBlue1 185 Khaki3 - 14 LightCyan 100 Yellow4 186 LightGoldenrod2 - 15 LightWhite 101 Wheat4 187 LightYellow3 - 16 Grey0 102 Grey53 188 Grey84 - 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 - 18 DarkBlue 104 MediumPurple 190 Yellow2 - 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 - 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- - reen1_2 - 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 - 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 - 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 - 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 - 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 - 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 - 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 - 28 Green4 114 PaleGreen3_2 200 Magenta2_2 - 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 - 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 - 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 - 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 - 33 DodgerBlue1 119 LightGreen_2 205 HotPink - 34 Green3 120 LightGreen_3 206 HotPink_2 - 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 - 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange - 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 - 38 DeepSkyBlue2 124 Red3 210 LightCoral - 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 - 40 Green3_2 126 MediumVioletRed 212 Orchid2 - 41 SpringGreen3_2 127 Magenta3 213 Orchid1 - 42 SpringGreen2 128 DarkViolet_2 214 Orange1 - 43 Cyan3 129 Purple_2 215 SandyBrown - 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 - 45 Turquoise2 131 IndianRed 217 LightPink1 - 46 Green1 132 HotPink3 218 Pink1 - 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 - 48 SpringGreen1 134 MediumOrchid 220 Gold1 - 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- - rod2_2 - 50 Cyan2 136 DarkGoldenrod 222 LightGolden- - rod2_3 - 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 - 52 DarkRed 138 RosyBrown 224 MistyRose1 - 53 DeepPink4 139 Grey63 225 Thistle1 - 54 Purple4 140 MediumPurple2_2 226 Yellow1 - 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 - 56 Purple3 142 Gold3 228 Khaki1 - 57 BlueViolet 143 DarkKhaki 229 Wheat1 - 58 Orange4 144 NavajoWhite3 230 Cornsilk1 - 59 Grey37 145 Grey69 231 Grey100 - 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 - 61 SlateBlue3 147 LightSteelBlue 233 Grey7 - 62 SlateBlue3_2 148 Yellow3 234 Grey11 - 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 - 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 - 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 - 66 PaleTurquoise4 152 LightCyan3 238 Grey27 - 67 SteelBlue 153 LightSkyBlue1 239 Grey30 - 68 SteelBlue3 154 GreenYellow 240 Grey35 - 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 - 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 - 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 - 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 - 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 - 74 SkyBlue3 160 Red3_2 246 Grey58 - 75 SteelBlue1 161 DeepPink3 247 Grey62 - 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 - 77 PaleGreen3 163 Magenta3_2 249 Grey70 - 78 SeaGreen3 164 Magenta3_3 250 Grey74 - 79 Aquamarine3 165 Magenta2 251 Grey78 - 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 - 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 - 82 Chartreuse2 168 HotPink3_2 254 Grey89 - 83 SeaGreen2 169 HotPink2 255 Grey93 - 84 SeaGreen1 170 Orchid - 85 SeaGreen1_2 171 MediumOrchid1 - - There are two colors (foreground and background) and only one bold - attribute. Thus single bold attribute affects both colors when - "reverse" attribute is used in vifm run inside terminal emulator. At - the same time linux native console can handle boldness of foreground - and background colors independently, but for consistency with terminal - emulators this is available only implicitly by using light versions of - colors. This behaviour might be changed in the future. - - Although vifm supports 256 colors in a sense they are supported by UI - drawing library, whether you will be able to use all of them highly - depends on your terminal. To set up terminal properly, make sure that - $TERM in the environment you run vifm is set to name of 256-color ter- - minal (on *nixes it can also be set via X resources), e.g. - xterm-256color. One can find list of available terminal names by list- - ing /usr/lib/terminfo/. Number of colors supported by terminal with - current settings can be checked via "tput colors" command. - - Here is the hierarchy of highlight groups, which you need to know for - using transparency: - JobLine - SuggestBox - StatusLine - WildMenu - User1..User9 - Border - CmdLine - ErrorMsg - Win - OtherWin - AuxWin - File name specific highlights - Directory - Link - BrokenLink - Socket - Device - Fifo - Executable - Selected - CurrLine - OtherLine - TopLine - TopLineSel - TabLineSel (for pane tabs) - TabLine - TabLineSel - - "none" means default terminal color for highlight groups at the first - level of the hierarchy and transparency for all others. - - Here file name specific highlights mean those configured via globs ({}) - or regular expressions (//). At most one of them is applied per file - entry, namely the first that matches file name, hence order of :high- - light commands might be important in certain cases. - - :history - - :his[tory] - creates a pop-up menu of directories visited. - - :his[tory] x - x can be: - d[ir] or . show directory history. - c[md] or : show command line history. - s[earch] or / show search history and search forward on l key. - f[search] or / show search history and search forward on l key. - b[search] or ? show search history and search backward on l key. - i[nput] or @ show prompt history (e.g. on one file renaming). - fi[lter] or = show filter history (see description of the "=" - normal mode command). - - :histnext - - :histnext - same as . The main use case for this command is to work - around the common pain point of and being the same - ASCII character: one could alter the terminal emulator settings - to emit, for example, the `F1` keycode when Ctrl-I is pressed, - then `:noremap :histnext` in vifm, add "t" flag to the - 'cpoptions', and thus have both and working as - expected. - - :histprev - - :histprev - same as . - - :if - - :if {expr1} - starts conditional block. Commands are executed until next - matching :elseif, :else or :endif command if {expr1} evaluates - to non-zero, otherwise they are ignored. See also help on :else - and :endif commands. - - Example: - - if $TERM == 'screen.linux' - highlight CurrLine ctermfg=lightwhite ctermbg=lightblack - elseif $TERM == 'tmux' - highlight CurrLine cterm=reverse ctermfg=black - ctermbg=white - else - highlight CurrLine cterm=bold,reverse ctermfg=black - ctermbg=white - endif - - :invert - - :invert [f] - invert file name filter. - - :invert? [f] - show current filter state. - - :invert s - invert selection. - - :invert o - invert sorting order of the primary sorting key. - - :invert? o - show sorting order of the primary sorting key. - - :jobs - - :jobs shows menu of current backgrounded processes. - - :let - - :let $ENV_VAR = - sets environment variable. Warning: setting environment vari- - able to an empty string on Windows removes it. - - :let $ENV_VAR .= - append value to environment variable. - - :let &[l:|g:]opt = - sets option value. - - :let &[l:|g:]opt .= - append value to string option. - - :let &[l:|g:]opt += - increasing option value, adding sub-values. - - :let &[l:|g:]opt -= - decreasing option value, removing sub-values. - - Where could be a single-quoted string, double-quoted string, an - environment variable, function call or a concatanation of any of them - in any order using the '.' operator. Any whitespace is ignored. - - :locate - - :locate filename - use "locate" command to create a menu of filenames. Selecting a - file from the menu will reload the current file list in vifm to - show the selected file. By default the command relies on the - external "locate" utility (it's assumed that its database is - already built), which can be customized by altering value of the - 'locateprg' option. - - :locate - repeats last :locate command. - - :ls - - :ls lists windows of active terminal multiplexer (only when terminal - multiplexer is used). This is achieved by issuing proper com- - mand for active terminal multiplexer, thus the list is not han- - dled by vifm. - - :lstrash - - :lstrash - displays a menu with list of files in trash. Each element of - the list is original path of a deleted file, thus the list can - contain duplicates. - - :mark - - :[range]ma[rk][?] x [/full/path] [filename] - Set mark x (a-zA-Z0-9) at /full/path and filename. By default - current directory is being used. If no filename was given and - /full/path is current directory then last file in [range] is - used. Using of macros is allowed. Question mark will stop com- - mand from overwriting existing marks. - - :marks - - :marks create a pop-up menu of marks. - - :marks list ... - display the contents of the marks that are mentioned in list. - - :media - - :media only for *nix - display media management menu. See also 'mediaprg' option. - - :messages - - :mes[sages] - shows previously given messages (up to 50). - - :mkdir - - :[line]mkdir[!] dir ... - create directories at specified paths. The [line] can be used - to pick node in a tree-view. "!" means make parent directories - as needed. Macros are expanded. - - :move - - :[range]m[ove][!?][ &] - move files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]m[ove][!] path[ &] - move files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]m[ove][!] name1 name2...[ &] - move files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :nohlsearch - - :noh[lsearch] - clear selection in current pane. - - :normal - - :norm[al][!] commands - execute normal mode commands. If "!" is used, user defined map- - pings are ignored. Unfinished last command is aborted as if - or was typed. A ":" should be completed as well. - Commands can't start with a space, so put a count of 1 (one) - before it. - - :only - - :on[ly] - switch to a one window view. - - :popd - - :popd remove pane directories from stack. - - :pushd - - :pushd[!] /curr/dir [/other/dir] - add pane directories to stack and process arguments like :cd - command. - - :pushd exchange the top two items of the directory stack. - - :put - - :[line]pu[t][!] [reg] [ &] - puts files from specified register (" by default) into current - directory. The [line] can be used to pick node in a tree-view. - "!" moves files "!" moves files from their original location - instead of copying them. During this operation no confirmation - dialogs will be shown, all checks are performed beforehand. - - :pwd - - :pw[d] show the present working directory. - - :qall - - :qa[ll][!] - exit vifm (add ! to skip saving changes and checking for active - backgrounded commands). - - :quit - - :q[uit][!] - if there is more than one tab, close the current one, otherwise - exit vifm (add ! to skip saving changes and checking for active - backgrounded commands). - - :redraw - - :redr[aw] - redraw the screen immediately. - - :registers - - :reg[isters] - display menu with registers content. - - :reg[isters] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :regular - - :regular - - switch to regular view leaving custom view. - :rename - - :[range]rename[!] - rename files using vi to edit names. ! means go recursively - through directories. - - :[range]rename name1 name2... - rename each of selected files to a corresponding name. - - :restart - - :restart - free a lot of things (histories, commands, etc.), reread - vifminfo and vifmrc files and run startup commands passed in the - argument list, thus losing all unsaved changes (e.g. recent his- - tory or keys mapped in current session). - - While many things get reset, some basic UI state and current - locations are preserved, including tabs. - - :restore - - :[range]restore - restore file from trash directory, doesn't work outside one of - trash directories. See "Trash directory" section below. - - :rlink - - :[range]rlink[!?] - create relative symbolic links to files in directory of other - view. With "?" prompts for destination file names in an editor. - "!" forces overwrite. - - :[range]rlink[!] path - create relative symbolic links of files in directory specified - with the path (absolute or relative to directory of other view). - "!" forces overwrite. - - :[range]rlink[!] name1 name2... - create relative symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. "!" forces overwrite. - - :screen - - :screen - toggle whether to use the terminal multiplexer or not. - A terminal multiplexer uses pseudo terminals to allow multiple - windows to be used in the console or in a single xterm. Start- - ing vifm from terminal multiplexer with appropriate support - turned on will cause vifm to open a new terminal multiplexer - window for each new file edited or program launched from vifm. - This requires screen version 3.9.9 or newer for the screen -X - argument or tmux (1.8 version or newer is recommended). - - :screen! - enable integration with terminal multiplexers. - - :screen? - display whether integration with terminal multiplexers is - enabled. - - Note: the command is called screen for historical reasons (when tmux - wasn't yet supported) and might be changed in future releases, or get - an alias. - - :select - - :[range]select - select files in the given range (current file if no range is - given). - - :select {pattern} - select files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:select! */ | invert - s` selects only files. - - :select //[iI] - same as item above, but reuses last search pattern. - - :select !{external command} - select files from the list supplied by external command. Files - are matched by full paths, relative paths are converted to abso- - lute ones beforehand. - - :[range]select! [{pattern}] - same as above, but resets previously selected items before pro- - ceeding. - - :set - - :se[t] display all options that differ from their default value. - - :se[t] all - display all options. - - :se[t] opt1=val1 opt2='val2' opt3="val3" ... - sets given options. For local options both values are set. - You can use following syntax: - - for all options - option, option? and option& - - for boolean options - nooption, invoption and option! - - for integer options - option=x, option+=x and option-=x - - for string options - option=x and option+=x - - for string list options - option=x, option+=x, option-=x and - option^=x - - for enumeration options - option=x, option+=x and option-=x - - for set options - option=x, option+=x, option-=x and - option^=x - - for charset options - option=x, option+=x, option-=x and - option^=x - - the meaning: - - option - turn option on (for boolean) or print its value (for - all others) - - nooption - turn option off - - invoption - invert option state - - option! - invert option state - - option? - print option value - - option& - reset option to its default value - - option=x or option:x - set option to x - - option+=x - add/append x to option - - option-=x - remove (or subtract) x from option - - option^=x - toggle x presence among values of the option - - Option name can be prepended and appended by any number of - whitespace characters. - - :setglobal - - :setg[lobal] - display all global options that differ from their default value. - - :setg[lobal] all - display all global options. - - :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only global options or global - values of local options. Changes to the latter might be not - visible until directory is changed. - - :setlocal - - :setl[ocal] - display all local options that differ from their default value. - - :setl[ocal] all - display all local options. - - :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only local values of local - options. - - :shell - - :sh[ell][!] - start a shell in current directory. "!" suppresses spawning - dedicated window of terminal multiplexer for a shell. To make - vifm adaptive to environment it uses $SHELL if it's defined, - otherwise 'shell' value is used. - - - :siblnext - - :[count]siblnext[!] - - change directory to [count]th next sibling directory after cur- - rent path using value of global sort option of current pane. - "!" enables wrapping. - - For example, say, you're at /boot and root listing starts like - this: - - bin/ - boot/ - dev/ - ... - - Issuing :siblnext will navigate to /dev. - - - :siblprev - - :[count]siblprev[!] - same as :siblnext, but in the opposite direction. - - :sort - - :sor[t] - display dialog with different sorting methods, when one can - select primary sorting key. When 'viewcolumns' options is empty - and 'lsview' is off, changing primary sorting key will also - affect view look (in particular the second column of the view - will be changed). - - :source - - :so[urce] file - read command-line commands from the file. - - :split - - :sp[lit] - switch to a two window horizontal view. - - :sp[lit]! - toggle horizontal window splitting. - - :sp[lit] path - splits the window horizontally to show both file directories. - Also changes other pane to path (absolute or relative to current - directory of active pane). - - :substitute - - :[range]s[ubstitute]/pattern/string/[flags] - for each file in range replace a match of pattern with string. - - String can contain \0...\9 to link to capture groups (\0 - all match, - \1 - first group, etc.). - - Pattern is stored in search history. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - - g - substitute all matches in each file name (each g toggles this) - - :[range]s[ubstitute]/pattern - substitute pattern with an empty string. - - :[range]s[ubstitute]//string/[flags] - use last pattern from search history. - - :[range]s[ubstitute] - repeat previous substitution command. - - :sync - - :sync [relative path] - change the other pane to the current pane directory or to some - path relative to the current directory. Using macros is - allowed. - - :sync! change the other pane to the current pane directory and synchro- - nize cursor position. If current pane displays custom list of - files, position before entering it is used (current one might - not make any sense). - - - :sync! [location | cursorpos | localopts | filters | filelist | tree | - all]... - change enumerated properties of the other pane to match corre- - sponding properties of the current pane. Arguments have the - following meanings: - - - location - current directory of the pane; - - - cursorpos - cursor position (doesn't make sense without - "location"); - - - localopts - all local options; - - - filters - all filters; - - - filelist - list of files for custom view (implies "loca- - tion"); - - - tree - tree structure for tree view (implies "location"); - - - all - all of the above. - - :tabclose - - :tabc[lose] - close current tab, unless it's the only one open at current - scope. - - :tabmove - - :tabm[ove] [N] - without the argument or with `$` as the argument, current tab - becomes the last tab. With the argument, current tab is moved - after the tab with the specified number. Argument of `0` moves - current tab to the first position. - - :tabname - - :tabname [name] - set, update or reset (when no argument is provided) name of the - current tab. - - :tabnew - - :tabnew [path] - create new tab. Accepts optional path for the new tab. Macros - and environment variables are expanded. - - :tabnext - - :tabn[ext] - switch to the next tab (wrapping around). - - :tabn[ext] {n} - go to the tab number {n}. Tab numeration starts with 1. - - :tabprevious - - :tabp[revious] - switch to the previous tab (wrapping around). - - :tabp[revious] {n} - go to the {n}-th previous tab. Note that :tabnext handles its - argument differently. - - :touch - - :[line]touch file... - create files at specified paths. Aborts on errors. Doesn't - update time of existing files. The [line] can be used to pick - node in a tree-view. Macros are expanded. - - :tr - - :[range]tr/pattern/string/ - for each file in range transliterate the characters which appear - in pattern to the corresponding character in string. When - string is shorter than pattern, it's padded with its last char- - acter. - - :trashes - - :trashes - lists all valid trash directories in a menu. Only non-empty and - writable trash directories are shown. This is exactly the list - of directories that are cleared when :empty command is executed. - - :trashes? - same as :trashes, but also displays size of each trash direc- - tory. - - :tree - - :tree turn pane into tree view with current directory as its root. - The tree view is implemented on top of a custom view, but is - automatically kept in sync with file system state and considers - all the filters. Thus the structure corresponds to what one - would see on visiting the directories manually. As a special - case for trees built out of custom view file-system tracking - isn't performed. - - To leave tree view go up from its root or use gh at any level of - the tree. Any command that changes directory will also do, in - particular, `:cd ..`. - - Tree structure is incompatible with alternative representations, - so values of 'lsview' and 'millerview' options are ignored. - - :tree! toggle current view in and out of tree mode. - - :undolist - - :undol[ist] - display list of latest changes. Use "!" to see actual commands. - - :unlet - - :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... - remove environment variables. Add ! to omit displaying of warn- - ings about nonexistent variables. - - :unselect - - :[range]unselect - unselect files in the given range (current file if no range is - given). - - :unselect {pattern} - unselect files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:unselect */` unse- - lects directories. - - :unselect !{external command} - unselect files from the list supplied by external command. - Files are matched by full paths, relative paths are converted to - absolute ones beforehand. - - :unselect //[iI] - same as item above, but reuses last search pattern. - - :version - - :ve[rsion] - show menu with version information. - - :vifm - - :vifm same as :version. - - :view - - :vie[w] - toggle on and off the quick file view. See also 'quickview' - option. - - :vie[w]! - turn on quick file view if it's off. - - :volumes - - :volumes - only for MS-Windows - display menu with volume list. Hitting l (or Enter) key opens - appropriate volume in the current pane. - - :vsplit - - :vs[plit] - switch to a two window vertical view. - - :vs[plit]! - toggle window vertical splitting. - - :vs[plit] path - split the window vertically to show both file directories. And - changes other pane to path (absolute or relative to current - directory of active pane). - - :wincmd - - :[count]winc[md] {arg} - same as running Ctrl-W [count] {arg}. - - :windo - - :windo [command...] - execute command for each pane (same as :winrun % command). - - :winrun - - :winrun type [command...] - execute command for pane(s), which is determined by type argu- - ment: - - ^ - top-left pane - - $ - bottom-right pane - - % - all panes - - . - current pane - - , - other pane - - :write - - :w[rite] - write vifminfo file. - - :wq - - :wq[!] same as :quit, but ! only disables check of backgrounded com- - mands. :wqall - - :wqa[ll][!] - same as :qall, but ! only disables check of backgrounded com- - mands. - - :xall - - :xa[ll][!] - same as :qall. - - :xit - - :x[it][!] - same as :quit. - - :yank - - :[range]y[ank] [reg] [count] - will yank files to the reg register. - - :map lhs rhs - - :map lhs rhs - map lhs key sequence to rhs in normal and visual modes. - - :map! lhs rhs - map lhs key sequence to rhs in command line mode. - - - :cmap :dmap :mmap :nmap :qmap - :vmap - - :cm[ap] lhs rhs - map lhs to rhs in command line mode. - - :dm[ap] lhs rhs - map lhs to rhs in dialog modes. - - :mm[ap] lhs rhs - map lhs to rhs in menu mode. - - :nm[ap] lhs rhs - map lhs to rhs in normal mode. - - :qm[ap] lhs rhs - map lhs to rhs in view mode. - - :vm[ap] lhs rhs - map lhs to rhs in visual mode. - - - :*map - - :cm[ap] - list all maps in command line mode. - - :dm[ap] - list all maps in dialog modes. - - :mm[ap] - list all maps in menu mode. - - :nm[ap] - list all maps in normal mode. - - :qm[ap] - list all maps in view mode. - - :vm[ap] - list all maps in visual mode. - - :*map beginning - - :cm[ap] beginning - list all maps in command line mode that start with the begin- - ning. - - :dm[ap] beginning - list all maps in dialog modes that start with the beginning. - - :mm[ap] beginning - list all maps in menu mode that start with the beginning. - - :nm[ap] beginning - list all maps in normal mode that start with the beginning. - - :qm[ap] beginning - list all maps in view mode that start with the beginning. - - :vm[ap] beginning - list all maps in visual mode that start with the beginning. - - :noremap - - :no[remap] lhs rhs - map the key sequence lhs to rhs for normal and visual modes, but - disallow mapping of rhs. - - :no[remap]! lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap - :vnoremap - - :cno[remap] lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :dn[oremap] lhs rhs - map the key sequence lhs to rhs for dialog modes, but disallow - mapping of rhs. - - :mn[oremap] lhs rhs - map the key sequence lhs to rhs for menu mode, but disallow map- - ping of rhs. - - :nn[oremap] lhs rhs - map the key sequence lhs to rhs for normal mode, but disallow - mapping of rhs. - - :qn[oremap] lhs rhs - map the key sequence lhs to rhs for view mode, but disallow map- - ping of rhs. - - :vn[oremap] lhs rhs - map the key sequence lhs to rhs for visual mode, but disallow - mapping of rhs. - - :unmap - - :unm[ap] lhs - remove user mapping of lhs from normal and visual modes. - - :unm[ap]! lhs - remove user mapping of lhs from command line mode. - - :cunmap :dunmap :munmap :nunmap :qunmap - :vunmap - - :cu[nmap] lhs - remove user mapping of lhs from command line mode. - - :du[nmap] lhs - remove user mapping of lhs from dialog modes. - - :mu[nmap] lhs - remove user mapping of lhs from menu mode. - - :nun[map] lhs - remove user mapping of lhs from normal mode. - - :qun[map] lhs - remove user mapping of lhs from view mode. - - :vu[nmap] lhs - remove user mapping of lhs from visual mode. - -Ranges - The ranges implemented include: - 2,3 - from second to third file in the list (including it) - % - the entire directory. - . - the current position in the filelist. - $ - the end of the filelist. - 't - the mark position t. - - Examples: - - :%delete - - would delete all files in the directory. - - :2,4delete - - would delete the files in the list positions 2 through 4. - - :.,$delete - - would delete the files from the current position to the end of the - filelist. - - :3delete4 - - would delete the files in the list positions 3, 4, 5, 6. - - If a backward range is given :4,2delete - an query message is given and - user can chose what to do next. - - The builtin commands that accept a range are :d[elete] and :y[ank]. - -Command macros - The command macros may be used in user commands. - - %a User arguments. When user arguments contain macros, they are - expanded before preforming substitution of %a. - - %c %"c The current file under the cursor. - - %C %"C The current file under the cursor in the other directory. - - %f %"f All of the selected files. - - %F %"F All of the selected files in the other directory list. - - %b %"b Same as %f %F. - - %d %"d Full path to current directory. - - %D %"D Full path to other file list directory. - - %rx %"rx - Full paths to files in the register {x}. In case of invalid - symbol in place of {x}, it's processed with the rest of the line - and default register is used. - - %m Show command output in a menu. - - %M Same as %m, but l (or Enter) key is handled like for :locate and - :find commands. - - %u Process command output as list of paths and compose custom view - out of it. - - %U Same as %u, but implies less list updates inside vifm, which is - absence of sorting at the moment. - - %Iu same as %u, but gives up terminal before running external com- - mand. - - %IU same as %U, but gives up terminal before running external com- - mand. - - %S Show command output in the status bar. - - %q redirect command output to quick view, which is activated if - disabled. - - %s Execute command in split window of active terminal multiplexer - (ignored if not running inside one). - - %n Forbid using of terminal multiplexer to run the command. - - %i Completely ignore command output. - - - %pc Marks the end of the main command and the beginning of the clear - command for graphical preview, which is invoked on closing pre- - view of a file. - - %pd Marks a preview command as one that directly communicates with - the terminal. Beware that this is for things like sixel which - are self-contained sequences that depend only on current cursor - position, using this with anything else is likely to mangle ter- - minal state. - - The following dimensions and coordinates are in characters: - - %px x coordinate of top-left corner of preview area. - - %py y coordinate of top-left corner of preview area. - - %pw width of preview area. - - %ph height of preview area. - - - Use %% if you need to put a percent sign in your command. - - Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. - Only the last one of them on the command will take effect. - - You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D - macros. Supported modifiers are: - - - :p - full path - - - :u - UNC name of path (e.g. "\\server" in - "\\server\share"), Windows only. Expands to current computer name - for not UNC paths. - - - :~ - relative to the home directory - - - :. - relative to current directory - - - :h - head of the file name - - - :t - tail of the file name - - - :r - root of the file name (without last extension) - - - :e - extension of the file name (last one) - - - :s?pat?sub? - substitute the first occurrence of pat with sub. - You can use any character for '?', but it must not occur in pat or - sub. - - - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with - sub. - - See ':h filename-modifiers' in Vim's documentation for the detailed - description. - - Using %x means expand corresponding macro escaping all characters that - have special meaning. And %"x means using of double quotes and escape - only backslash and double quote characters, which is more useful on - Windows systems. - - Position and quantity (if there is any) of %m, %M, %S or %s macros in - the command is unimportant. All their occurrences are removed from the - resulting command. - - %c and %f macros are expanded to file names only, when %C and %F are - expanded to full paths. %f and %F follow this in %b too. - - :com move mv %f %D - set the :move command to move all of the files selected in the - current directory to the other directory. - - The %a macro is replaced with any arguments given to an alias command. - All arguments are considered optional. - :com lsl !!ls -l %a - set the lsl command to execute ls -l with - or without an argument. - - :lsl - will list the directory contents of the current directory. - - :lsl filename - will list only the given filename. - - The macros can also be used in directly executing commands. ":!mv %f - %D" would move the current directory selected files to the other direc- - tory. - - Appending & to the end of a command causes it to be executed in the - background. Typically you want to run two kinds of external commands - in the background: - - - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); - - - console tools that do not work with terminal (:!mv %f %D &). - - You don't want to run terminal commands, which require terminal input - or output something in background because they will mess up vifm's TUI. - Anyway, if you did run such a command, you can use Ctrl-L key to update - vifm's TUI. - - Rewriting the example command with macros given above with background- - ing: - - %m, %M, %s, %S, %u and %U macros cannot be combined with background - mark (" &") as it doesn't make much sense. - -Command backgrounding - Copy and move operation can take a lot of time to proceed. That's why - vifm supports backgrounding of this two operations. To run :copy, - :move or :delete command in the background just add " &" at the end of - a command. - - For each background operation a new thread is created. Job cancella- - tion can be requested in the :jobs menu via dd shortcut. - - You can see if command is still running in the :jobs menu. Back- - grounded commands have progress instead of process id at the line - beginning. - - Background operations cannot be undone. - -Cancellation - Note that cancellation works somewhat different on Windows platform due - to different mechanism of break signal propagation. One also might - need to use Ctrl-Break shortcut instead of Ctrl-C. - - There are two types of operations that can be cancelled: - - - file system operations; - - - mounting with FUSE (but not unmounting as it can cause loss of - data); - - - calls of external applications. - - Note that vifm never terminates applications, it sends SIGINT signal - and lets the application quit normally. - - When one of set of operations is cancelled (e.g. copying of 5th file of - 10 files), further operations are cancelled too. In this case undo - history will contain only actually performed operations. - - Cancelled operations are indicated by "(cancelled)" suffix appended to - information message on statusbar. - - File system operations - - Currently the following commands can be cancelled: :alink, :chmod, - :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, - :touch. File putting (on p/P key) can be cancelled as well. It's not - hard to see that these are mainly long-running operations. - - Cancelling commands when they are repeated for undo/redo operations is - allowed for convenience, but is not recommended as further undo/redo - operations might get blocked by side-effects of partially cancelled - group of operations. - - These commands can't be cancelled: :empty, :rename, :substitute, :tr. - - Mounting with FUSE - - It's not considered to be an error, so only notification on the status - bar is shown. - - External application calls - - Each of this operations can be cancelled: :apropos, :find, :grep, - :locate. - -Patterns - :highlight, :filetype, :filextype, :fileviewer commands and 'classify' - option support globs, regular expressions and mime types to match file - names or their paths. - - There are six possible ways to write a single pattern: - - 1. [!]{comma-separated-name-globs} - - 2. [!]{{comma-separated-path-globs}} - - 3. [!]/name-regular-expression/[iI] - - 4. [!]//path-regular-expression//[iI] - - 5. [!] - - 6. undecorated-pattern - - First five forms can include leading exclamation mark that negates pat- - tern matching. - - The last form is implicitly refers to one of others. :highlight does - not accept undecorated form, while :filetype, :filextype, :fileviewer, - :select, :unselect and 'classify' treat it as list of name globs. - - Path patterns receive absolute path of the file that includes its name - component as well. - - To combine several patterns (AND them), make sure you're using one of - the first five forms and write patterns one after another, like this: - {*.vifm} Mind that if you make a mistake the whole string - will be treated as the sixth form. - - :filetype, :filextype and :fileviewer commands accept comma-separated - list of patterns instead of a single pattern, thus effectively handling - OR operation on them: - {*.vifm},{*.pdf} Forms that accept - comma-separated lists of patterns also process them as lists of alter- - natives. - - Patterns with regular expressions - - Regular expression patterns are case insensitive by default, see - description of commands, which might override default behaviour. - - Flags of regular expressions mean the following: - - "i" makes filter case insensitive; - - "I" makes filter case sensitive. They can be repeated multiple - times, but the later one takes precedence (e.g. "iiiI" is equivalent - to "I" and "IiIi" is the same as "i"). - - There are no implicit `^` or `$`, so make sure to specify them explic- - itly if the pattern should match the whole name or path. - - Patterns with globs - - "Globs" section below provides short overview of globs and some impor- - tant points that one needs to know about them. - - Patterns with mime-types - - Mime type matching is essentially globs matching applied to mime type - of a file instead of its name/path. Note: mime types aren't detected - on Windows. - - Examples - - Associate `evince` to PDF-files only inside `/home/user/downloads/` - directory (excluding its subdirectories): - - :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f - - -Globs - Globs are always case insensitive as it makes sense in general case. - - `*`, `?`, `[` and `]` are treated as special symbols in the pattern. - E.g. - - :filetype * less %c - - matches all files. One can use character classes for escaping, so - - :filetype [*] less %c - - matches only one file name, the one which contains only asterisk sym- - bol. - - `*` means any number of any characters (possibly an empty substring), - with one exception: asterisk at the pattern beginning doesn't match dot - in the first position. E.g. - - :fileviewer *.zip,*.jar zip -sf %c - - associates using of `zip` program to preview all files with `zip` or - `jar` extensions as listing of their content, but `.file.zip` won't be - matched. - - `?` means any character at this position. E.g. - - :fileviewer ?.out file %c - - calls `file` tool for all files which have exactly one character before - their extension (e.g. a.out, b.out). - - Square brackets designate character class, which means that whole char- - acter class matches against any of characters listed in it. For exam- - ple - - :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c - - makes vifm call `highlight` program to colorize source and header files - in C language for a 256-color terminal. Equal command would be - - :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c - - - Inside square brackets `^` or `!` can be used for symbol class negotia- - tion and the `-` symbol to set a range. `^` and `!` should appear - right after the opening square bracket. For example - - :filetype *.[!d]/ inspect_dir - - associates `inspect_dir` as additional handler for all directories that - have one character extension unless it's "d" letter. And - - :filetype [0-9].jpg sxiv - - associates `sxiv` picture viewer only for JPEG-files that contain sin- - gle digit in their name. - -:set options - Local options - These are kind of options that are local to a specific view. So - you can set ascending sorting order for left pane and descending - order for right pane. - - In addition to being local to views, each such option also has - two values: - - - local to current directory (value associated with current - location); - - - global to current directory (value associated with the - pane). - - The idea is that current directory can be made a temporary - exception to regular configuration of the view, until directory - change. Use :setlocal for that. :setglobal changes view value - not affecting settings until directory change. :set applies - changes immediately to all values. - - - 'aproposprg' - type: string - default: "apropos %a" - Specifies format for an external command to be invoked by the - :apropos command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :apropos - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - 'autochpos' - type: boolean - default: true - When disabled vifm will set cursor to the first line in the view - after :cd and :pushd commands instead of saved cursor position. - Disabling this will also make vifm clear information about cur- - sor position in the view history on :cd and :pushd commands (and - on startup if 'autochpos' is disabled in the vifmrc). l key in - the ":history ." and ":trashes" menus are treated like :cd com- - mand. This option also affects marks so that navigating to a - mark doesn't restore cursor position. - - When this option is enabled, more fine grained control over cur- - sor position is available via 'histcursor' option. - - 'columns' 'co' - type: integer - default: terminal width on startup - Terminal width in characters. - - 'caseoptions' - type: charset - default: "" - This option gives additional control over case sensitivity by - allowing overriding default behaviour to either always be case - sensitive or always be case insensitive. Possible values form - pairs of lower and upper case letters that configure specific - aspect of behaviour: - p - always ignore case of paths during completion. - P - always match case of paths during completion. - g - always ignore case of characters for f/F/;/,. - G - always match case of characters for f/F/;/,. - - At most one item of each pair takes affect, if both or more are - present, only the last one matters. When none of pair's ele- - ments are present, the behaviour is default (depends on operat- - ing system for path completion and on values of 'ignorecase' and - 'smartcase' options for file navigation). - - 'cdpath' 'cd' - type: string list - default: value of $CDPATH with commas instead of colons - Specifies locations to check on changing directory with relative - path that doesn't start with "./" or "../". When non-empty, - current directory is examined after directories listed in the - option. - - This option doesn't affect completion of :cd command. - - Example: - - set cdpath=~ - - This way ":cd bin" will switch to "~/bin" even if directory - named "bin" exists in current directory, while ":cd ./bin" com- - mand will ignore value of 'cdpath'. - - 'chaselinks' - type: boolean - default: false - When enabled path of view is always resolved to real path (with - all symbolic links expanded). - - 'classify' - type: string list - default: ":dir:/" - Specifies file name prefixes and suffixes depending on file type - or name. The format is either of: - - [{prefix}]:{filetype}:[{suffix}] - - [{prefix}]::{pattern}::[{suffix}] - Possible {pattern} forms are described in "Patterns" section - above. - - Priority rules: - - file name patterns have priority over type patterns - - file name patterns are matched in left-to-right order of - their appearance in this option - - Either {prefix} or {suffix} or both can be omitted (which is the - default for all unspecified file types), this means empty {pre- - fix} and/or {suffix}. {prefix} and {suffix} should consist of - at most eight characters. Elements are separated by commas. - Neither prefixes nor suffixes are part of file names, so they - don't affect commands which operate on file names in any way. - Comma (',') character can be inserted by doubling it. List of - file type names can be found in the description of filetype() - function. - - 'confirm' 'cf' - type: set - default: delete,permdelete - Defines which operations require confirmation: - - delete - moving files to trash (on d or :delete); - - permdelete - permanent deletion of files (on D or :delete! - command or on undo/redo operation). - - 'cpoptions' 'cpo' - type: charset - default: "fst" - Contains a sequence of single-character flags. Each flag - enables behaviour of older versions of vifm. Flags: - - f - when included, running :filter command results in not - inverted (matching files are filtered out) and :filter! in - inverted (matching files are left) filter, when omitted, meaning - of the exclamation mark changes to the opposite; - - s - when included, yy, dd and DD normal mode commands act on - selection, otherwise they operate on current file only; - - t - when included, (thus ) behave as and - switches active pane, otherwise and go forward in - the view history. It's possible to make both and to - work as expected by setting up the terminal to emit a custom - sequence when is pressed; see :histnext for details. - - 'cvoptions' - type: set - default: - Specifies whether entering/leaving custom views triggers events - that normally happen on entering/leaving directories: - - autocmds - trigger autocommands on entering/leaving custom - views; - - localopts - reset local options on entering/leaving custom - views; - - localfilter - reset local filter on entering/leaving custom - views. - - 'deleteprg' - type: string - default: "" - Specifies program to run on files that are permanently removed. - When empty, files are removed as usual, otherwise this command - is invoked on each file by appending its name. If the command - doesn't remove files, they will remain on the file system. - - 'dirsize' - type: enumeration - default: size - Controls how size of directories is displayed in file views. - The following values are possible: - - size - size of directory (i.e., size used to store list of - files) - - nitems - number of entries in the directory (excluding . and - ..) - - Size obtained via ga/gA overwrites this setting so seeing count - of files and occasionally size of directories is possible. - - 'dotdirs' - type: set - default: nonrootparent - Controls displaying of dot directories. The following values - are possible: - - rootparent - show "../" in root directory of file system - - nonrootparent - show "../" in non-root directories of file - system - - Note that empty directories always contain "../" entry regard- - less of value of this option. "../" disappears at the moment at - least one file is created. - - 'dotfiles' - type: boolean - default: false - Whether dot files are shown in the view. Can be controlled with - z* bindings. - - 'fastrun' - type: boolean - default: false - With this option turned on you can run partially entered com- - mands with unambiguous beginning using :! (e.g. :!Te instead of - :!Terminal or :!Te). - - 'fillchars' 'fcs' - type: string list - default: "" - Sets characters used to fill borders. - - item default used for - vborder:c ' ' left, middle and right vertical bor- - ders - - If value is omitted, its default value is used. Example: - - set fillchars=vborder:. - - 'findprg' - type: string - default: "find %s %a -print , -type d \( ! -readable -o ! -exe- - cutable \) -prune" - Specifies format for an external command to be invoked by the - :find command. The format supports expansion of macros specific - for this particular option and %% sequence for inserting percent - sign literally. The macros are: - - macro value/meaning - %s literal arguments of :find or - list of paths to search in - - %A empty or - literal arguments of :find - %a empty or - literal arguments of :find or - predicate followed by escaped arguments of :find - %p empty or - literal arguments of :find or - escaped arguments (parameters) of :find - - %u redirect output to custom view instead of showing a - menu - %U redirect output to unsorted custom view instead of - showing a menu - - Predicate in %a is "-name" on *nix and "-iname" on Windows. - - If both %u and %U are specified, %U is chosen. - - Some macros can be added implicitly: - - if %s isn't present, it's appended - - if neither of %a, %A and %p is present, %a is appended - - if neither of %s, %a, %A and %p is present, %s and %a are - appended in this order - - The macros slightly change their meaning depending on format of - :find's arguments: - - if the first argument points to an existing directory, %s is - assigned all arguments while %a, %A and %p are left empty - - otherwise: - - %s is assigned a dot (".") meaning current directory or - list of selected file names, if any - - %a, %A and %p are assigned literal arguments when first - argument starts with a dash ("-"), otherwise %a gets an escaped - version of the arguments with a predicate and %p contains - escaped version of the arguments - - Starting with Windows Server 2003 a `where` command is avail- - able. One can configure vifm to use it in the following way: - - set findprg="where /R %s %A" - - As the syntax of this command is rather limited, one can't use - :find command with selection of more than one item because the - command ignores all directory paths except for the last one. - - When using find port on Windows, another option is to setup - 'findprg' like this: - - set findprg="find %s %a" - - - 'followlinks' - type: boolean - default: true - Follow links on l or Enter. That is navigate to destination - file instead of treating the link as if it were target file. - Doesn't affects links to directories, which are always entered - (use gf key for directories). - - 'fusehome' - type: string - default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/" - Directory to be used as a root dir for FUSE mounts. Value of - the option can contain environment variables (in form - "$envname"), which will be expanded (prepend it with a slash to - prevent expansion). The value should expand to an absolute - path. - - If you change this option, vifm won't remount anything. It - affects future mounts only. See "Automatic FUSE mounts" section - below for more information. - - 'gdefault' 'gd' - type: boolean - default: false - When on, 'g' flag is on for :substitute by default. - - 'grepprg' - type: string - default: "grep -n -H -I -r %i %a %s" - Specifies format for an external command to be invoked by the - :grep command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %i - macro to specify placement of "-v" string when inversion of - results is requested, %a or %A macro to specify placement of - arguments passed to the :grep command and the %s macro to spec- - ify placement of list of files to search in. If some of the - macros are not used, they will be implicitly added after a space - to the value of the 'grepprg' option in the following order: %i, - %a, %s. Note that when neither %a nor %A are specified, it's %a - which is added implicitly. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - See 'findprg' option for description of difference between %a - and %A. - - Example of setup to use ack (http://beyondgrep.com/) instead of - grep: - - set grepprg='ack -H -r %i %a %s' - - or The Silver Searcher (https://github.com/ggreer/the_sil- - ver_searcher): - - set grepprg='ag --line-numbers %i %a %s' - - - - 'histcursor' - type: set - default: startup,dirmark,direnter - Defines situations when cursor should be moved according to - directory history: - - startup - on loading file lists during startup - - dirmark - after navigating to a mark that doesn't specify - file - - direnter - on opening directory from a file list - - This option has no effect when 'autochpos' is disabled. - - Note that the list is not exhaustive and there are other situa- - tions when cursor is positioned automatically. - - 'history' 'hi' - type: integer - default: 15 - Maximum number of stored items in all histories. - - 'hlsearch' 'hls' - type: boolean - default: true - Highlight all matches of search pattern. - - 'iec' type: boolean - default: false - Use KiB, MiB, ... suffixes instead of K, M, ... when printing - size in human-friendly format. - - 'ignorecase' 'ic' - type: boolean - default: false - Ignore case in search patterns (:substitute, / and ? commands) - and characters after f and F commands. It doesn't affect file - filtering. - - 'incsearch' 'is' - type: boolean - default: false - When this option is set, search and view update for local filter - is be performed starting from initial cursor position each time - search pattern is changed. - - 'iooptions' - type: set - default: - Controls details of file operations. The following values are - available: - - fastfilecloning - perform fast file cloning (copy-on-write), - when available - (available on Linux and btrfs file system). - - 'laststatus' 'ls' - type: boolean - default: true - Controls if status bar is visible. - - 'lines' - type: integer - default: terminal height on startup - Terminal height in lines. - - 'locateprg' - type: string - default: "locate %a" - Specifies format for an external command to be invoked by the - :locate command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :locate - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - 'mediaprg' - type: string - default: path to bundled script that supports udevil, udisks and - udisks2 - (using udisks2 requires python with dbus module - installed) - OS X: path points to a python script that uses diskutil - {only for *nix} - Specifies command to be used to manage media devices. Used by - :media command. - - The command can be passed the following parameters: - - list -- list media - - mount {device} -- mount a device - - unmount {path} -- unmount given mount point - - The output of `list` subcommand is parsed in search of lines - that start with one of the following prefixes: - - device= - specifies device path (e.g., "/dev/sde") - - label= - specifies optional device label (e.g., "Memory - card") - - info= - specifies arbitrary text to display next to - device (by - default "[label]" is used, if label is pro- - vided) - - mount-point= - specifies a mount point (can be absent or - appear more than once) - - All other lines are ignored. Each `device=` starts a new sec- - tion describing a device which should include two other possible - prefixes. - - `list` subcommand is assumed to always succeed, while exit code - of `mount` and `unmount` is taken into account to determine - whether operation was performed successfully. - - 'lsoptions' - type: string list - default: "" - scope: local - - Configures ls-like view. - - item used for - transposed filling view grid by columns rather than by - lines - - - 'lsview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple columns with file names similar to output of `ls -x` - command. See "ls-like view" section below for format descrip- - tion. This option has no effect if 'millerview' is on. - - 'milleroptions' - type: string list - default: "lsize:1,csize:1,rsize:1,rpreview:dirs" - scope: local - - Configures miller view. - - item default used for - lsize:num 0 left column - csize:num 1 center column (can't be disabled) - rsize:num 0 right column - rpreview:str dirs right column - - *size specifies ratios of columns. Each ratio is in the range - from 0 to 100 and values are adjusted to fit the limits. Zero - disables a column, but central (main) column can't be disabled. - - rpreview specifies what file-system objects should be previewed - in the right column and can take two values: dirs (only directo- - ries) or all. Both options don't include parent directory - (".."). - - Example of two-column mode which is useful in combination with - :view command: - - set milleroptions=lsize:1,csize:2 - - - 'millerview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple cascading columns. Ignores 'lsview'. - - 'mintimeoutlen' - type: integer - default: 150 - The fracture of 'timeoutlen' in milliseconds that is waited - between subsequent input polls, which affects various asynchro- - nous operations (detecting changes made by external applica- - tions, monitoring background jobs, redrawing UI). There are no - strict guarantees, however the higher this value is, the less is - CPU load in idle mode. - - 'number' 'nu' - type: boolean - default: false - scope: local - Print line number in front of each file name when 'lsview' - option is turned off. Use 'numberwidth' to control width of - line number. Also see 'relativenumber'. - - 'numberwidth' 'nuw' - type: integer - default: 4 - scope: local - Minimal number of characters for line number field. - - 'previewprg' - type: string - default: "" - scope: local - - External command to be used instead of preview programs config- - ured via :fileviewer command. - - Example: - - " always show git log in preview of files inside some reposi- - tory - au DirEnter '~/git-repo/**/*' setl previewprg='git log --color - -- %c 2>&1' - - 'quickview' - type: boolean - default: false - Whether quick view (:view) is currently active or not. - - 'relativenumber' 'rnu' - type: boolean - default: false - scope: local - Print relative line number in front of each file name when - 'lsview' option is turned off. Use 'numberwidth' to control - width of line number. Various combinations of 'number' and - 'relativenumber' lead to such results: - - nonumber number - - norelativenumber | first | 1 first - | second | 2 second - | third | 3 third - - relativenumber | 1 first | 1 first - | 0 second |2 second - | 1 third | 1 third - - - 'rulerformat' 'ruf' - type: string - default: "%l/%S " - Determines the content of the ruler. Its minimal width is 13 - characters and it's right aligned. Following macros are sup- - ported: - %= - separation point between left and right aligned halves of - the line - %l - file number - %L - total number of files in view (including filtered out - ones) - %x - number of files excluded by filters - %0- - old name for %x macro - %S - number of displayed files - %= - separation point between left and right align items - %% - percent sign - %[ - designates beginning of an optional block - %] - designates end of an optional block - - Percent sign can be followed by optional minimum field width. - Add '-' before minimum field width if you want field to be right - aligned. - - Example: - - set rulerformat='%2l-%S%[ +%x%]' - - 'runexec' - type: boolean - default: false - Run executable file on Enter or l. - - 'scrollbind' 'scb' - type: boolean - default: false - When this option is set, vifm will try to keep difference of - scrolling positions of two windows constant. - - 'scrolloff' 'so' - type: integer - default: 0 - Minimal number of screen lines to keep above and below the cur- - sor. If you want cursor line to always be in the middle of the - view (except at the beginning or end of the file list), set this - option to some large value (e.g. 999). - - 'shell' 'sh' - type: string - default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) - Full path to the shell to use to run external commands. On *nix - a shell argument can be supplied. - - 'shellcmdflag' 'shcf' - type: string - default: "-c" or "/C" (for cmd.exe on MS-Windows) - Command-line option used to pass a command to 'shell'. It's - used in contexts where command comes from the user. - - 'shortmess' 'shm' - type: charset - default: "p" - Contains a sequence of single-character flags. Each flag - enables shortening of some message displayed by vifm in the TUI. - Flags: - - L - display only last directory in tab line instead of full - path. - - M - shorten titles in windows of terminal multiplexers cre- - ated by vifm down to file name instead of using full path. - - T - truncate status-bar messages in the middle if they are - too long to fit on the command line. "..." will appear in the - middle. - - p - use tilde shortening in view titles. - - - 'showtabline' 'stal' - type: enumeration - default: multiple - Specifies when tab line should be displayed. Possible values: - - never - never display tab line - - multiple - show tab line only when there are at least two - tabs - - always - display tab line always - - Alternatively 0, 1 and 2 Vim-like values are also accepted and - correspond to "never", "multiple" and "always" respectively. - - - 'sizefmt' - type: string list - default: "units:iec" - Configures the way size is formatted in human-friendly - way. - - item value meaning - units: iec Use 1024 byte units (K or - KiB, etc.). - See 'iec' option. - si Use 1000 byte units (KB, - etc.). - precision: i > 0 How many fraction digits - to consider. - {not set} Precision of 1 for inte- - ger part < 10, - 0 otherwise (provides old - behaviour). - space {present} Insert space before unit - symbols. - This is the default. - nospace {present} Do not insert space - before unit symbols. - - Numbers are rounded from zero. Trailing zeros are - dropped. - - Example: - - set sizefmt=units:iec,precision:2,nospace - - - 'slowfs' - type: string list - default: "" - only for *nix - A list of mounter fs name beginnings (first column in - /etc/mtab or /proc/mounts) or paths prefixes for - fs/directories that work too slow for you. This option - can be used to stop vifm from making some requests to - particular kinds of file systems that can slow down file - browsing. Currently this means don't check if directory - has changed, skip check if target of symbolic links - exists, assume that link target located on slow fs to be - a directory (allows entering directories and navigating - to files via gf). If you set the option to "*", it means - all the systems are considered slow (useful for cygwin, - where all the checks might render vifm very slow if there - are network mounts). - - Example for autofs root /mnt/autofs: - - set slowfs+=/mnt/autofs - - 'smartcase' 'scs' - type: boolean - default: false - Overrides the ignorecase option if the search pattern - contains at least one upper case character. Only used - when ignorecase option is enabled. It doesn't affect - file filtering. - - 'sort' type: string list - default: +name on *nix and +iname on Windows - scope: local - Sets list of sorting keys (first item is primary key, - second is secondary key, etc.): - [+-]ext - extension of files and directories - [+-]fileext - extension of files only - [+-]name - name (including extension) - [+-]iname - name (including extension, ignores case) - [+-]type - file type - (dir/reg/exe/link/char/block/sock/fifo) - [+-]dir - directory grouping (directory < file) - [+-]gid - group id (*nix only) - [+-]gname - group name (*nix only) - [+-]mode - file type derived from its mode (*nix - only) - [+-]perms - permissions string (*nix only) - [+-]uid - owner id (*nix only) - [+-]uname - owner name (*nix only) - [+-]nlinks - number of hard links (*nix only) - [+-]inode - inode number (*nix only) - [+-]size - size - [+-]nitems - number of items in a directory (zero for - files) - [+-]groups - groups extracted via regexps from 'sort- - groups' - [+-]target - symbolic link target (empty for other - file types) - [+-]atime - time accessed (e.g. read, executed) - [+-]ctime - time changed (changes in metadata, e.g. - mode) - [+-]mtime - time modified (when file contents is - changed) - - Note: look for st_atime, st_ctime and st_mtime in "man 2 - stat" for more information on time keys. - - '+' means ascending sort for this key, and '-' means - descending sort. - - "dir" key is somewhat similar in this regard but it's - added implicitly: when "dir" is not specified, sorting - behaves as if it was the first key in the list. That's - why if one wants sorting algorithm to mix directories and - files, "dir" should be appended to sorting option, for - example like this: - - set sort+=dir - - or - - set sort=-size,dir - - Value of the option is checked to include dir key and - default sorting key (name on *nix, iname on Windows). - Here is what happens if one of them is missing: - - - type key is added at the beginning; - - - default key is added at the end; - - all other keys are left untouched (at most they are - moved). - - This option also changes view columns according to pri- - mary sorting key set, unless 'viewcolumns' option is not - empty. - - 'sortnumbers' - type: boolean - default: false - scope: local - Natural sort of (version) numbers within text. - - 'sortgroups' - type: string - default: "" - scope: local - Sets comma-separated list of regular expressions to use - for group sorting, double comma is literal comma. Each - expression should contain at least one group or its value - will be considered to be always empty. Only first match - of each regular expression is considered. Groups are - considered from right to first similar to 'sort', first - group divides list of files into sub-groups, each of - which is sorted by the second group and so on. - - Example: - set sortgroups=-(done|todo).* this would put files - with "-done" in their names above all files with "-todo". - - 'sortorder' - type: enumeration - default: ascending - Sets sort order for primary key: ascending, descending. - - 'statusline' 'stl' - type: string - default: "" - Determines the content of the status line (the line right - above command-line). Empty string means use same format - like in previous versions. Following macros are sup- - ported: - - - %t - file name (considering value of the 'classify' - option) - - - %T - symbolic link target (empty for other filetypes) - - - %f - file name relative to current directory (considers - 'classify') - - - %A - file attributes (permissions on *nix or properties - on Windows) %u - user name or uid (if it cannot be - resolved) - - - %g - group name or gid (if it cannot be resolved) - - - %s - file size in human readable format - - - %E - size of selected files in human readable format, - same as %s when no files are selected, except that it - will never show size of ../ in visual mode, since it - cannot be selected - - - %d - file modification date (uses 'timefmt' option) - - - %D - path of the other pane for single-pane layout - - - %a - amount of free space available at current parti- - tion - - - %z - short tips/tricks/hints that chosen randomly after - one minute period - - - %{} - evaluate arbitrary vifm expression - '', e.g. '&sort' - - - %* - resets or applies one of User1..User9 highlight - groups; reset happens when width field is 0 or not - specified, one of groups gets picked when width field - is in the range from 1 to 9 - - - all 'rulerformat' macros - - Percent sign can be followed by optional minimum field - width. Add '-' before minimum field width if you want - field to be right aligned. - - On Windows file properties include the following flags - (upper case means flag is on): - A - archive - H - hidden - I - content isn't indexed - R - readonly - S - system - C - compressed - D - directory - E - encrypted - P - reparse point (e.g. symbolic link) - Z - sparse file - - Example without colors: - - set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} - " - - Example with colors: - - highlight User1 ctermbg=yellow - highlight User2 ctermbg=blue ctermfg=white cterm=bold - set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* - %-5s %2* %d " - - - 'suggestoptions' - type: string list - default: - Controls when, for what and how suggestions are dis- - played. The following values are available: - - normal - in normal mode; - - visual - in visual mode; - - view - in view mode; - - otherpane - use other pane to display sugges- - tions, when available; - - delay[:num] - display suggestions after a small - delay (to do not annoy if you just want to type a fast - shortcut consisting of multiple keys), num specifies the - delay in ms (500 by default), 'timeoutlen' at most; - - keys - include shortcuts (commands and - selectors); - - foldsubkeys - fold multiple keys with common pre- - fix; - - marks - include marks; - - registers[:num] - include registers, at most num files - (5 by default). - - 'syncregs' - type: string - default: - Specifies identifier of group of instances that share - registers between each other. When several instances of - vifm have this option set to identical value, they auto- - matically synchronize contents of their registers on - operations which use them. - - 'syscalls' - type: boolean - default: false - When disabled, vifm will rely on external applications to - perform file-system operations, otherwise system calls - are used instead (much faster and supports progress - tracking). The option should eventually be removed. - Mostly *nix-like systems are affected. - - 'tabscope' - type: enumeration - default: global - Picks style of tabs, which defines what a single tab con- - tains. Possible values: - - global - tab describes complete UI of two views and - how they are arranged - - pane - tab is located "inside" a pane and manages it - and quick view - - 'tabstop' 'ts' - type: integer - default: value from curses library - Number of spaces that a Tab in the file counts for. - - 'timefmt' - type: string - default: "%m/%d %H:%M" - Format of time in file list. See "man 1 date" or "man 3 - strftime" for details. - - 'timeoutlen' 'tm' - type: integer - default: 1000 - The time in milliseconds that is waited for a mapped key - in case of already typed key sequence is ambiguous. - - 'title' - type: boolean - default: true when title can be restored, false otherwise - When enabled, title of the terminal or terminal multi- - plexer's window is updated according to current location. - Because not all terminals support setting title, this - works only if `$TERM` value matches one of the following - conditions: - - equals "xterm" or starts with "xterm-" - - equals "rxvt" or starts with "rxvt-" - - equals "screen" or starts with "screen-" - - equals "aterm" - - equals "Eterm" - - 'trash' - type: boolean - default: true - Use trash directory. See "Trash directory" section - below. - - 'trashdir' - type: string - default: on *nix: - "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" - or if $VIFM/Trash doesn't exist - "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm- - Trash" - on Windows: - "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" - List of trash directory path specifications, separated - with commas. Each list item either defines an absolute - path to trash directory or a path relative to a mount - point root when list element starts with "%r/". Value of - the option can contain environment variables (of form - "$envname"), which will be expanded (prepend $ with a - slash to prevent expansion). Environment variables are - expanded when the option is set. - - On *nix, if element ends with "%u", the mark is replaced - with real user ID and permissions are set so that only - that only owner is able to use it. - Note that even this setup is not completely secure when - combined with "%r/" and it's overall safer to keep files - in home directory, but that implies cost of copying files - between partitions. - - When new file gets cut (deleted) vifm traverses each ele- - ment of the option in the order of their appearance and - uses first trash directory that it was able to create or - that is already writable. - - Default value tries to use trash directory per mount - point and falls back to ~/.vifm/Trash on failure. - - Will attempt to create the directory if it does not - exist. See "Trash directory" section below. - - 'tuioptions' 'to' - type: charset - default: "ps" - Each flag configures some aspect of TUI appearance. The - flags are: - p - when included: - * file list inside a pane gets additional single char- - acter padding on left and right sides; - * quick view and view mode get single character pad- - ding. - s - when included, left and right borders (side borders, - hence "s" character) are visible. - u - use Unicode characters in the TUI (Unicode ellipsis - instead of "..."). - - 'undolevels' 'ul' - type: integer - default: 100 - Maximum number of changes that can be undone. Note that - here single file operation is used as a unit, not opera- - tion, i.e. deletion of 101 files will exceed default - limit. - - 'vicmd' - type: string - default: "vim" - Command used to edit files in various contexts. Amper- - sand sign at the end (regardless whether it's preceded by - space or not) means backgrounding of command. - - Background flag is ignored in certain context where vifm - waits for the editor to finish. Such contexts include - any command that spawns editor to change list of file - names or a command, with :rename being one example. `-f` - is also appended to prevent forking in such cases, so the - command needs to handle the flag. - - Additionally `+{num}` and `+'call cursor()'` arguments - are used to position cursor when location is known. - - 'viewcolumns' - type: string - default: "" - scope: local - Format string containing list of columns in the view. - When this option is empty, view columns to show are cho- - sen automatically using sorting keys (see 'sort') as a - base. Value of this option is ignored if 'lsview' is - set. See "Column view" section below for format descrip- - tion. - - An example of setting the options for both panes (note - :windo command): - - windo set viewcolumns=-{name}..,6{size},11{perms} - - 'vixcmd' - type: string - default: value of 'vicmd' - Same as 'vicmd', but takes precedence over it when run- - ning inside a graphical environment. - - 'vifminfo' - type: set - default: bookmarks,bmarks - Controls what will be saved in the $VIFM/vifminfo file. - - bmarks - named bookmarks - bookmarks - marks, except special ones like '< and '> - tui - state of the user interface (sorting, num- - ber of windows, quick - view state, active view) - dhistory - directory history - state - file name and dot filters and terminal - multiplexers integration - state - cs - primary color scheme - savedirs - save last visited directory (requires - dhistory) - chistory - command line history - shistory - search history (/ and ? commands) - phistory - prompt history - fhistory - history of local filter (see description - of the "=" normal mode - command) - dirstack - directory stack overwrites previous stack, - unless stack of - current session is empty - registers - registers content - options - all options that can be set with the :set - command (obsolete) - filetypes - associated programs and viewers (obsolete) - commands - user defined commands (see :command - description) (obsolete) - - 'vimhelp' - type: boolean - default: false - Use vim help format. - - 'wildmenu' 'wmnu' - type: boolean - default: false - Controls whether possible matches of completion will be - shown above the command line. - - 'wildstyle' - type: enumeration - default: bar - Picks presentation style of wild menu. Possible values: - - bar - one-line with left-to-right cursor - - popup - multi-line with top-to-bottom cursor - - 'wordchars' - type: string list - default: "1-8,14-31,33-255" (that is all non-whitespace - characters) - Specifies which characters in command-line mode should be - considered as part of a word. Value of the option is - comma-separated list of ranges. If both endpoints of a - range match, single endpoint is enough (e.g. "a" = "a- - a"). Both endpoints are inclusive. There are two - accepted forms: character representing itself or number - encoding character according to ASCII table. In case of - ambiguous characters (dash, comma, digit) use numeric - form. Accepted characters are in the range from 0 to - 255. Any Unicode character with code greater than 255 is - considered to be part of a word. - - The option affects Alt-D, Alt-B and Alt-F, but not Ctrl- - W. This is intentionally to allow two use cases: - - - Moving by WORDS and deletion by words. - - Moving by words and deletion by WORDS. - - To get the latter use the following mapping: - - cnoremap - - Also used for abbreviations. - - 'wrap' type: boolean - default: true - Controls whether to wrap text in quick view. - - 'wrapscan' 'ws' - type: boolean - default: true - Searches wrap around end of the list. - -Mappings - Map arguments - - LHS of mappings can be preceded by arguments which take the form - of special sequences: - - - Postpone UI updates until RHS is completely processed. - - In case of builtin mapping causing conflict for a user- - defined mapping (e.g., `t` builtin to a partially typed - `ta` user-defined mapping), ignore the builtin mapping - and wait for input indefinitely as opposed to default be- - haviour of triggering the builtin mapping after a delay - defined by 'timeoutlen'. Example: - - nnoremap tw :set wrap! - nnoremap tn :set number! - nnoremap tr :set relativenumber! - - - Special sequences - - Since it's not easy to enter special characters there are sev- - eral special sequences that can be used in place of them. They - are: - - Enter key. - - Escape key. - - - Space key. - - Less-than character (<). - - provides a way to disable a mapping (by mapping it to - ). - - Backspace key (see key conflict description below). - - - Tabulation and Shift+Tabulation keys. - - - Home/End. - - - Arrow keys. - - - PageUp/PageDown. - - - Delete key. and mean different codes, but - is more common. - - - Insert key. - - ,,...,,,,,, - Control + some key (see key conflict description below). - - only for *nix - Control + Space. - - ,,..., - ,,..., Alt + some key. - - ,,..., - ,,..., only for *nix - Alt + Ctrl + some key. - - - - Functional keys. - - - - only for MS-Windows - functional keys with Control key pressed. - - - - only for MS-Windows - functional keys with Alt key pressed. - - - - only for MS-Windows - functional keys with Shift key pressed. - - Note that due to the way terminals process their input, several - keyboard keys might be mapped to single key code, for example: - - - and ; - - - and ; - - - and ; - - - etc. - - Most of the time they are defined consistently and don't cause - surprises, but and are treated differently in differ- - ent environments (although they match each other all the time), - that's why they correspond to different keys in vifm. As a con- - sequence, if you map or be sure to repeat the mapping - with the other one so that it works in all environments. Alter- - natively, provide your mapping in one form and add one of the - following: - - " if mappings with in the LHS work - map - " if mappings with in the LHS work - map - - Whitespace - - vifm removes whitespace characters at the beginning and end of - commands. That's why you may want to use at the end of - rhs in mappings. For example: - - cmap man - - will put "man " in line when you hit the key in the command - line mode. - -Expression syntax - Supported expressions is a subset of what VimL provides. - - Expression syntax summary, from least to most significant: - - expr1 expr2 - expr2 || expr2 .. logical OR - - expr2 expr3 - expr3 && expr3 .. logical AND - - expr3 expr4 - expr4 == expr4 equal - expr4 != expr4 not equal - expr4 > expr4 greater than - expr4 >= expr4 greater than or equal - expr4 < expr4 smaller than - expr4 <= expr4 smaller than or equal - - expr4 expr5 - expr5 + expr5 .. number addition - expr5 - expr5 .. number subtraction - - expr5 expr6 - expr6 . expr6 .. string concatenation - - expr6 expr7 - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - expr7 number number constant - "string" string constant, \ is special - 'string' string constant, ' is doubled - &option option value - $VAR environment variable - v:var builtin variable - function(expr1, ...) function call - (expr1) nested expression - - ".." indicates that the operations in this level can be concate- - nated. - - expr1 - ----- - expr2 || expr2 - - Arguments are converted to numbers before evaluation. - - Result is non-zero if at least one of arguments is non-zero. - - It's right associative and with short-circuiting, so sub-expres- - sions are evaluated from left to right until result of whole - expression is determined (i.e., until first non-zero) or end of - the expression. - - expr2 - ----- - expr3 && expr3 - - Arguments are converted to numbers before evaluation. - - Result is non-zero only if both arguments are non-zero. - - It's right associative and with short-circuiting, so sub-expres- - sions are evaluated from left to right until result of whole - expression is determined (i.e., until first zero) or end of the - expression. - - expr3 - ----- - expr4 {cmp} expr4 - - Compare two expr4 expressions, resulting in a 0 if it evaluates - to false or 1 if it evaluates to true. - - equal == - not equal != - greater than > - greater than or equal >= - smaller than < - smaller than or equal <= - - Examples: - - 'a' == 'a' == 1 - 'a' > 'b' == 1 - 'a' == 'b' == 0 - '2' > 'b' == 0 - 2 > 'b' == 1 - 2 > '1b' == 1 - 2 > '9b' == 0 - -1 == -'1' == 1 - 0 == '--1' == 1 - - expr4 - ----- - expr5 + expr5 .. number addition expr5 - expr5 .. number - subtraction - - Examples: - - 1 + 3 - 3 == 1 - 1 + '2' == 3 - - expr5 - ----- - expr6 . expr6 .. string concatenation - - Examples: - - 'a' . 'b' == 'ab' - 'aaa' . '' . 'c' == 'aaac' - - expr6 - ----- - - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - For '-' the sign of the number is changed. - For '+' the number is unchanged. - For '!' non-zero becomes zero, zero becomes one. - - A String will be converted to a Number first. - - These operations can be repeated and mixed. Examples: - - --9 == 9 - ---9 == -9 - -+9 == 9 - !-9 == 0 - !'' == 1 - !'x' == 0 - !!9 == 1 - - expr7 - ----- - - number number constant - ----- - - Decimal number. Examples: - - 0 == 0 - 0000 == 0 - 01 == 1 - 123 == 123 - 10000 == 10000 - - string - ------ - "string" string constant - - Note that double quotes are used. - - A string constant accepts these special characters: - \b backspace - \e escape - \n newline - \r return - \t tab - \\ backslash - \" double quote - - Examples: - - "\"Hello,\tWorld!\"" - "Hi,\nthere!" - - literal-string - -------------- - 'string' string constant - - Note that single quotes are used. - - This string is taken as it is. No backslashes are removed or - have a special meaning. The only exception is that two quotes - stand for one quote. - - Examples: - - 'All\slashes\are\saved.' - 'This string contains doubled single quotes ''here''' - - option - ------ - &option option value (local one is preferred, if - exists) &g:option global option value &l:option - local option value - - Examples: - - echo 'Terminal size: '.&columns.'x'.&lines - if &columns > 100 - - Any valid option name can be used here (note that "all" in ":set - all" is a pseudo option). See ":set options" section above. - - environment variable - -------------------- - $VAR environment variable - - The String value of any environment variable. When it is not - defined, the result is an empty string. - - Examples: - - 'This is my $PATH env: ' . $PATH - 'vifmrc at ' . $MYVIFMRC . ' is used.' - - builtin variable - -------------------- - v:var builtin variable - - Information exposed by vifm for use in scripting. - - v:count - count passed to : command, 0 by default. Can be used in map- - pings to pass - count to a different command. - v:count1 - same as v:count, but 1 by default. - v:servername - See below. - - function call - ------------- - function(expr1, ...) function call - - See "Functions" section below. - - Examples: - - "'" . filetype('.') . "'" - filetype('.') == 'reg' - - expression nesting - ------------------ - (expr1) nested expression - - Groups any other expression of arbitrary complexity enforcing - order in which operators are applied. - - -Functions - USAGE RESULT DESCRIPTION - - chooseopt({opt}) String Queries choose parameters - passed on startup. - executable({expr}) Integer Checks whether {expr} command - available. - expand({expr}) String Expands special keywords in - {expr}. - extcached({cache}, {path}, {extcmd}) - String Caches output of {extcmd} per - {cache} and - {path} combination. - filetype({fnum} [, {resolve}]) - String Returns file type from posi- - tion. - fnameescape({expr}) String Escapes {expr} for use in a - :command. - getpanetype() String Returns type of current pane. - has({property}) Integer Checks whether instance has - {property}. - layoutis({type}) Integer Checks whether layout is of - type {type}. - paneisat({loc}) Integer Checks whether current pane is - at {loc}. - system({command}) String Executes shell command and - returns its output. - tabpagenr([{arg}]) Integer Returns number of current or - last tab. - term({command}) String Like system(), but for inter- - active commands. - - chooseopt({opt}) - - Retrieves values of options related to file choosing. {opt} can - be one of: - files returns argument of --choose-files or empty - string - dir returns argument of --choose-dir or empty string - cmd returns argument of --on-choose or empty string - delimiter returns argument of --delimiter or the default - one (\n) - - executable({expr}) - - If {expr} is absolute or relative path, checks whether path des- - tination exists and refers to an executable, otherwise checks - whether command named {expr} is present in directories listed in - $PATH. Checks for various executable extensions on Windows. - Returns boolean value describing result of the check. - - Example: - - " use custom default viewer script if it's available and - installed - " in predefined system directory, otherwise try to find it - elsewhere - if executable('/usr/local/bin/defviewer') - fileview * /usr/local/bin/defviewer %c - else - if executable('defviewer') - fileview * defviewer %c - endif - endif - - expand({expr}) - - Expands environment variables and macros in {expr} just like - it's done for command-line commands. Returns a string. See - "Command macros" section above. - - Examples: - - " percent sign - :echo expand('%%') - " the last part of directory name of the other pane - :echo expand('%D:t') - " $PATH environment variable (same as `:echo $PATH`) - :echo expand('$PATH') - - extcached({cache}, {path}, {extcmd}) - - Caches value of {extcmd} external command automatically updating - it as necessary based on monitoring change date of a {path}. - The cache is invalidated when file or its meta-data is updated. - A single path can have multiple caches associated with it. - - {path} value is normalized, but symbolic links in it aren't - resolved. - - Example: - - " display number and size of blocks actually used by a file or - directory - set statusline+=" Uses: %{ extcached('uses', - expand('%c'), - expand('stat --for- - mat=%%bx%%B %c')) }" - - filetype({fnum} [, {resolve}]) - - The result is a string, which represents file type and is one of - the list: - exe executables - reg regular files - link symbolic links - broken broken symbolic links (appears only when resolving) - dir directories - char character devices - block block devices - fifo pipes - sock *nix domain sockets - ? unknown file type (should not normally appear) - - The result can also be an empty string in case of invalid argu- - ment. - - Parameter {fnum} can have following values: - - '.' to get type of file under the cursor in the active - pane - - numerical value base 1 to get type of file on specified - line number - - Optional parameter {resolve} is treated as a boolean and speci- - fies whether symbolic links should be resolved. - - fnameescape({expr}) - - Escapes parameter to make it suitable for use as an argument of - a :command. List of escaped characters includes %, which is - doubled. - - Usage example: - - " navigate to most recently modified file in current directory - execute 'goto' fnameescape(system('ls -t | head -1')) - - getpanetype() - - Retrieves string describing type of current pane. Possible - return values: - regular regular file listing of some directory - custom custom file list (%u) - very-custom very custom file list (%U) - tree tree view - - has({property}) - - Allows examining internal parameters from scripts to e.g. figure - out environment in which application is running. Returns 1 if - property is true/present, otherwise 0 is returned. Currently - the following properties are supported (anything else will yield - 0): - unix runs in *nix-like environment (including Cygwin) - win runs on Windows - - Usage example: - - " skip user/group on Windows - if !has('win') - let $RIGHTS = '%10u:%-7g ' - endif - - execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' - - layoutis({type}) - - Checks whether current interface layout is {type} or not, where - {type} can be: - only single-pane mode - split double-pane mode (either vertical or horizon split) - vsplit vertical split (left and right panes) - hsplit horizontal split (top and bottom panes) - - Usage example: - - " automatically split vertically before enabling preview - :nnoremap w :if layoutis('only') | vsplit | endif | view! - - paneisat({loc}) - - Checks whether position of active pane in current layout matches - one of the following locations: - top pane reaches top border - bottom pane reaches bottom border - left pane reaches left border - right pane reaches right border - - system({command}) - - Runs the command in shell and returns its output (joined stan- - dard output and standard error streams). All trailing newline - characters are stripped to allow easy appending to command out- - put. Ctrl-C should interrupt the command. - - Use this function to consume output of external commands that - don't require user interaction and term() for interactive com- - mands that make use of terminal and are capable of handling - stream redirection. - - Usage example: - - " command to enter .git/ directory of git-repository (when ran - inside one) - command! cdgit :execute 'cd' system('git rev-parse --git-dir') - - tabpagenr([{arg}]) - - When called without arguments returns number of current tab page - base one. - - When called with "$" as an argument returns number of the last - tab page base one, which is the same as number of tabs. - - term({command}) - - Same as system() function, but user interface is shutdown during - the execution of the command, which makes sure that external - interactive applications won't affect the way terminal is used - by vifm. - - Usage example: - - " command to change directory by picking it via fzf - command! fzfcd :execute 'cd' "'".term('find -type d | fzf 2> - /dev/tty')."'" - -Menus and dialogs - When navigating to some path from a menu there is a difference - in end location depending on whether path has trailing slash or - not. Files normally don't have trailing slashes so "file/" - won't work and one can only navigate to a file anyway. On the - other hand with directories there are two options: navigate to a - directory or inside of it. To allow both use cases, the first - one is used on paths like "dir" and the second one for "dir/". - - Commands - - :range navigate to a menu line. - - :exi[t][!] :q[uit][!] :x[it][!] - leave menu mode. - - :noh[lsearch] - reset search match highlighting. - - :w[rite] {dest} - write all menu lines into file specified by {dest}. - - General - - j, Ctrl-N - move down. - k, Ctrl-P - move up. - Enter, l - select and exit the menu. - Ctrl-L - redraw the menu. - - Escape, Ctrl-C, ZZ, ZQ, q - quit. - - In all menus - - The following set of keys has the same meaning as in normal - mode. - - Ctrl-B, Ctrl-F - Ctrl-D, Ctrl-U - Ctrl-E, Ctrl-Y - /, ? - n, N - [count]G, [count]gg - H, M, L - zb, zt, zz - - zh - scroll menu items [count] characters to the right. - zl - scroll menu items [count] characters to the left. - zH - scroll menu items half of screen width characters to the - right. - zL - scroll menu items half of screen width characters to the - left. - - : - enter command line mode for menus (currently only :exi[t], - :q[uit], :x[it] and :{range} are supported). - - b - interpret content of the menu as list of paths and use it to - create custom view in place of previously active pane. See - "Custom views" section below. - B - same as above, but creates unsorted view. - - v - load menu content into quickfix list of the editor (Vim com- - patible by assumption) or if list doesn't have separators after - file names (colons) open each line as a file name. - - - Below is description of additional commands and reaction on - selection in some menus and dialogs. - - Apropos menu - - Selecting menu item runs man on a given topic. Menu won't be - closed automatically to allow view several pages one by one. - - Command-line mode abbreviations menu - - Type dd on an abbreviation to remove it. - - c leaves menu preserving file selection and inserts right-hand - side of selected command into command-line. - - Color scheme menu - - Selecting name of a color scheme applies it the same way as if - ":colorscheme " was executed on the command-line. - - Commands menu - - Selecting command executes it with empty arguments (%a). - - dd on a command to remove. - - Marks menu - - Selecting mark navigates to it. - - dd on a mark to remove it. - - Bookmarks menu - - Selecting a bookmark navigates to it. - - Type dd on a bookmark to remove it. - - gf and e also work to make it more convenient to bookmark files. - - Trash (:lstrash) menu - - r on a file name to restore it from trash. - - dd deletes file under the cursor. - - Trashes menu - - dd empties selected trash in background. - - Directory history and Trashes menus - - Selecting directory name will change directory of the current - view as if :cd command was used. - - Directory stack menu - - Selecting directory name will rotate stack to put selected - directory pair at the top of the stack. - - Filetype menu - - Commands from vifmrc or typed in command-line are displayed - above empty line. All commands below empty line are from .desk- - top files. - - c leaves menu preserving file selection and inserts command - after :! in command-line mode. - - Grep, find, locate, bookmarks and user menu with navigation (%M - macro) - - gf - navigate previously active view to currently selected item. - Leaves menu mode except for grep menu. Pressing Enter key has - the same effect. - - e - open selected path in the editor, stays in menu mode. - - c - leave menu preserving file selection and insert file name - after :! in command-line mode. - - User menu without navigation (%m macro) - - c leaves menu preserving file selection and inserts whole line - after :! in command-line mode. - - Grep menu - - Selecting file (via Enter or l key) opens it in editor set by - 'vicmd' at given line number. Menu won't be closed automati- - cally to allow viewing more than one result. - - See above for "gf" and "e" keys description. - - Command-line history menu - - Selecting an item executes it as command-line command, search - query or local filter. - - c leaves menu preserving file selection and inserts line into - command-line of appropriate kind. - - Volumes menu - - Selecting a drive navigates previously active pane to the root - of that drive. - - Fileinfo dialog - - Enter, q - close dialog - - Sort dialog - - h, Space - switch ascending/descending. - q - close dialog - - One shortcut per sorting key (see the dialog). - - Attributes (permissions or properties) dialog - - h, Space - check/uncheck. - q - close dialog - - Item states: - - - * - checked flag. - - - X - means that it has different value for files in selection. - - - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or - o-x+X argument for the chmod program. If you're not on OS X - and want to remove execute permission bit from all files, but - preserve it for directories, set all execute flags to 'd' and - check 'Set Recursively' flag. - - Jobs menu - - dd requests cancellation of job under cursor. The job won't be - removed from the list, but marked as being cancelled (if cancel- - lation was successfully requested). A message will pop up if - the job has already stopped. Note that on Windows cancelling - external programs like this might not work, because their parent - shell doesn't have any windows. - - e key displays errors of selected job if any were collected. - They are displayed in a new menu, but you can get back to jobs - menu by pressing h. - - - Undolist menu - - r - reset undo position to group under the cursor. - - - Media menu - - Selecting a device either mounts (if it wasn't mounted yet) or - navigates to its first mount point. - - Selecting a mount point navigates to it. - - Selecting "not mounted" line causes mounting. - - Selecting any other line does nothing. - - r - reload the list. - - m - mount/unmount device (cursor should be positioned on lines - under device information). - - [ - put cursor on the previous device. - - ] - put cursor on the next device. - - -Custom views - Definition - - Normally file views contain list of files from a single direc- - tory, but sometimes it's useful to populate them with list of - files that do not belong to the same directory, which is what - custom views are for. - - Presentation - - Custom views are still related to directory they were in before - custom list was loaded. Path to that directory (original direc- - tory) can be seen in the title of a custom view. - - Files in same directory have to be named differently, this - doesn't hold for custom views thus seeing just file names might - be rather confusing. In order to give an idea where files come - from and when possible, relative paths to original directory of - the view is displayed, otherwise full path is used instead. - - Custom views normally don't contain any inexistent files. - - Navigation - - Custom views have some differences related to navigation in reg- - ular views. - - gf - acts similar to gf on symbolic links and navigates to the - file at its real - location. - - h - go to closes parent node in tree view, otherwise return to - the original directory. - - gh - return to the original directory. - - Opening ".." entry also causes return to the original directory. - - History - - Custom list exists only while it's visible, once left one can't - return to it, so there is no appearances of it in any history. - - Filters - - Only local filter affects content of the view. This is inten- - tional, presumably if one loads list, precisely that list should - be displayed (except for inexistent paths, which are ignored). - - Search - - Although directory names are visible in listing, they are not - searchable. Only file names are taken into account (might be - changed in future, searching whole lines seems quite reason- - able). - - Sorting - - Contrary to search sorting by name works on whole visible part - of file path. - - Highlight - - Whole file name is highlighted as one entity, even if there are - directory elements. - - Updates - - Reloads can occur, though they are not automatic due to files - being scattered among different places. On a reload, inexistent - files are removed and meta-data of all other files is updated. - - Once custom view forgets about the file, it won't add it back - even if it's created again. So not seeing file previously - affected by an operation, which was undone is normal. - - Operations - - All operations that add files are forbidden for custom views. - For example, moving/copying/putting files into a custom view - doesn't work, because it doesn't make much sense. - - On the other hand, operations that use files of a custom view as - a source (e.g. yanking, copying, moving file from custom view, - deletion) and operations that modify names are all allowed. - -Compare views - Kinds - - :compare can produce four different results depending on argu- - ments: - - single compare view (ofone and either listall or listdups); - - single custom view (ofone and listunique); - - two compare views (ofboth and either listall or listdups); - - two custom views (ofboth and listunique). - - The first two display files of one file system tree. Here - duplicates are files that have at least one copy in the same - tree. The other two kinds of operation compare two trees, in - which duplicates are files that are found in both trees. - - Lists of unique files are presented in custom views because - there is no file grouping to preserve as all file ids are guar- - anteed to be distinct. - - Creation - - Arguments passed to :compare form four categories each with its - own prefix and is responsible for particular property of opera- - tion. - - Which files to compare: - - ofboth - compares files of two panes against each other; - - ofone - compares files of the same directory. - - How files are compared: - - byname - by their name only; - - bysize - only by their size; - - bycontents - by combination of size and hash of file con- - tents. - - Which files to display: - - listall - all files; - - listunique - unique files only; - - listdups - only duplicated files. - - How results are grouped (has no effect if "ofone" specified): - - groupids - files considered identical are always adjacent - in output; - - grouppaths - file system ordering is preferred (this also - enables displaying identically named files as mismatches). - - Which files to omit: - - skipempty - ignore empty files. - - Each argument can appear multiple times, the rightmost one of - the group is considered. Arguments alter default behaviour - instead of substituting it. - - Examples - - The defaults corresponds to probably the most common use case of - comparing files in two trees with grouping by paths, so the fol- - lowing are equivalent: - - :compare - :compare bycontents grouppaths - :compare bycontents listall ofboth grouppaths - - Another use case is to find duplicates in the current sub-tree: - - :compare listdups ofone - - The following command lists files that are unique to each pane: - - :compare listunique - - Look - - The view can't switch to ls-like view as it's unable to display - diff-like data. - - Comparison views have second column displaying id of the file, - files with same id are considered to be equal. The view columns - configuration is predefined. - - Behaviour - - When two views are being compared against each other the follow- - ing changes to the regular behaviour apply: - - views are scrolled synchronously (as if 'scrollbind' was - set); - - views' cursors are synchronized; - - local filtering is disabled (its results wouldn't be meaning- - ful); - - zd excludes groups of adjacent identical files, 1zd gives - usual behaviour; - - sorting is permanently disabled (ordering is fixed); - - removed files hide their counter pairs; - - exiting one of the views terminates the other immediately; - - renaming files isn't blocked, but isn't taken into account - and might require regeneration of comparison; - - entries which indicate absence of equivalent file have empty - names and can be matched as such; - - when unique files of both views are listed custom views can - be empty, this absence of unique files is stated clearly. - - One compare view has similar properties (those that are applica- - ble for single pane). - - Files are gathered in this way: - - recursively starting at current location of the view; - - dot files are excluded if view hides them at the moment of - comparison; - - directories are not taken into account; - - symbolic links to directories are ignored. - -Startup - On startup vifm determines several variables that are used dur- - ing the session. They are determined in the order they appear - below. - - On *nix systems $HOME is normally present and used as is. On - Windows systems vifm tries to find correct home directory in the - following order: - - $HOME variable; - - $USERPROFILE variable (on Windows only); - - a combination of $HOMEDRIVE and $HOMEPATH variables (on Win- - dows only). - - vifm tries to find correct configuration directory by checking - the following places: - - $VIFM variable; - - parent directory of the executable file (on Windows only); - - $HOME/.vifm directory; - - $APPDATA/Vifm directory (on Windows only); - - $XDG_CONFIG_HOME/vifm directory; - - $HOME/.config/vifm directory. - - vifm tries to find correct configuration file by checking the - following places: - - $MYVIFMRC variable; - - vifmrc in parent directory of the executable file (on Windows - only); - - $VIFM/vifmrc file. - -Configure - See "Startup" section above for the explanations on $VIFM and - $MYVIFMRC. - - The vifmrc file contains commands that will be executed on vifm - startup. There are two such files: global and local. Global - one is at {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable - description for the search algorithm used to find local vifmrc. - Global vifmrc is loaded before the local one, so that the later - one can redefine anything configured globally. - - Use vifmrc to set settings, mappings, filetypes etc. To use - multi line commands precede each next line with a slash (white- - space before slash is ignored, but all spaces at the end of the - lines are saved). For example: - - set - \smartcase - - equals "setsmartcase". When - - set - \ smartcase - - equals "set smartcase". - - The $VIFM/vifminfo file contains session settings. You may edit - it by hand to change the settings, but it's not recommended to - do that, edit vifmrc instead. You can control what settings - will be saved in vifminfo by setting 'vifminfo' option. Vifm - always writes this file on exit unless 'vifminfo' option is - empty. Marks, bookmarks, commands, histories, filetypes, file- - viewers and registers in the file are merged with vifm configu- - ration (which has bigger priority). - - Generally, runtime configuration has bigger priority during - merging, but there are some exceptions: - - - directory stack stored in the file is not overwritten unless - something is changed in vifm session that performs merge; - - - each mark or bookmark is marked with a timestamp, so that - newer value is not overwritten by older one, thus no matter - from where it comes, the newer one wins. - - The $VIFM/scripts directory can contain shell scripts. vifm - modifies its PATH environment variable to let user run those - scripts without specifying full path. All subdirectories of the - $VIFM/scripts will be added to PATH too. Script in a subdirec- - tory overlaps script with the same name in all its parent direc- - tories. - - The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories con- - tain color schemes. Available color schemes are searched in - that order, so on name conflict the one in $VIFM/colors/ wins. - - Each color scheme should have ".vifm" extension. This wasn't - the case before and for this reason the following rules apply - during lookup: - - - if there is no file with .vifm extension, all regular files - are listed; - - - otherwise only files with .vifm extension are listed (with - the extension being truncated). - -Automatic FUSE mounts - vifm has a builtin support of automated FUSE file system mounts. - It is implemented using file associations mechanism. To enable - automated mounts, one needs to use a specially formatted program - line in filetype or filextype commands. These use special - macros, which differ from macros in commands unrelated to FUSE. - Currently three formats are supported: - - 1) FUSE_MOUNT This format should be used in case when all infor- - mation needed for mounting all files of a particular type is the - same. E.g. mounting of tar files don't require any file spe- - cific options. - - Format line: - FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR - - 2) FUSE_MOUNT2 This format allows one to use specially formatted - files to perform mounting and is useful for mounting remotes, - for example remote file systems over ftp or ssh. - - Format line: - FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR - - Example file content: - - root@127.0.0.1:/ - - 3) FUSE_MOUNT3 - - This format is equivalent to FUSE_MOUNT, but omits unmounting. - It is useful for cases, when unmounting isn't needed, like when - using AVFS. - - Example :filetype command: - - :filetype - *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb - \ {Mount with avfs} - \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE - - Example `mount-avfs` helper script: - - #!/bin/sh - - dest=$1 - file=$2 - - rmdir "$dest" - ln -s "$HOME/.avfs$file#/" "$dest" - - All % macros are expanded by vifm at runtime and have the fol- - lowing meaning: - - %SOURCE_FILE is replaced by full path to selected file; - - %DESTINATION_DIR is replaced by full path to mount direc- - tory, which is created by vifm basing on the value of 'fusehome' - option; - - %PARAM value is filled from the first line of file (whole - line), though in the future it can be changed to whole file con- - tent; - - %FOREGROUND means that you want to run mount command as a - regular command (required to be able to provide input for commu- - nication with mounter in interactive way). - - %FOREGROUND is an optional macro. Other macros are not manda- - tory, but mount commands likely won't work without them. - - %CLEAR is obsolete name of %FOREGROUND, which is still sup- - ported, but might be removed in future. Its use is discouraged. - - Unlike macros elsewhere, these are recognized only if they - appear at the end of a command or are followed by a space. - There is no way to escape % either. These are historical limi- - tations, which might be addressed in the future. - - The mounted FUSE file systems will be automatically unmounted in - two cases: - - - when vifm quits (with ZZ, :q, etc. or when killed by sig- - nal); - - - when you explicitly leave mount point going up to its parent - directory (with h, Enter on "../" or ":cd ..") and other - pane is not in the same directory or its child directories. - -View look - vifm supports displaying of file list view in two different - ways: - - - in a table mode, when multiple columns can be set using - 'viewcolumns' option (see "Column view" section below for - details); - - - in a multicolumn list manner which looks almost like `ls -x` - command output (see "ls-like view" section below for - details). - - The look is local for each view and can be chosen by changing - value of the 'lsview' boolean option. - - Depending on view look some of keys change their meaning to - allow more natural cursor moving. This concerns mainly h, j, k, - l and other similar navigation keys. - - Also some of options can be ignored if they don't affect view - displaying in selected look. For example value of 'viewcolumns' - when 'lsview' is set. - -ls-like view - When this view look is enabled by setting 'lsview' option on, - vifm will display files in multiple columns. Number of columns - depends on the length of the longest file name present in cur- - rent directory of the view. Whole file list is automatically - reflowed on directory change, terminal or view resize. - - View looks close to output of `ls -x` command, so files are - listed left to right in rows. - - In this mode file manipulation commands (e.g. d) don't work - line-wise like they do in Vim, since such operations would be - uncommon for file manipulation tasks. Thus, for example, dd - will remove only current file. - - By default the view is filled by lines, 'lsoptions' can be used - to get filling by columns. - - Note that tree-view and compare view inhibit ls-like view. - -Column view - View columns are described by a comma-separated list of column - descriptions, each of which has the following format - [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} - where fw stands for full width and tw stands for text width. - - So it basically consists of four parts: - 1. Optional alignment specifier - 2. Optional width specifier - 3. Mandatory column name - 4. Optional cropping specifier - - Alignment specifier - - It's an optional minus or asterisk sign as the first symbol of - the string. - - Specifies type of text alignment within a column. Three types - are supported: - - - left align - - set viewcolumns=-{name} - - - right align (default) - - set viewcolumns={name} - - - dynamic align - - It's like left alignment, but when the text is bigger than the - column, the alignment is made at the right (so the part of the - field is always visible). - - set viewcolumns=*{name} - - Width specifier - - It's a number followed by a percent sign, two numbers (second - one should be less than or equal to the first one) separated - with a dot or a single number. - - Specifies column width and its units. There are three size - types: - - - absolute size - column width is specified in characters - - set viewcolumns=-100{name},20.15{ext} - - results in two columns with lengths of 100 and 20 and a - reserved space of five characters on the left of second col- - umn. - - - relative (percent) size - column width is specified in per- - cents of view width - - set viewcolumns=-80%{name},15%{ext},5%{mtime} - - results in three columns with lengths of 80/100, 15/100 and - 5/100 of view width. - - - auto size (default) - column width is automatically determined - - set viewcolumns=-{name},{ext},{mtime} - - results in three columns with length of one third of view - width. There is no size adjustment to content, since it will - slow down rendering. - - Columns of different sizing types can be freely mixed in one - view. Though sometimes some of columns can be seen partly or be - completely invisible if there is not enough space to display - them. - - Column name - - This is just a sort key surrounded with curly braces or {root}, - e.g. - - {name},{ext},{mtime} - - {name} and {iname} keys are the same and present both for con- - sistency with 'sort' option. - - Following keys don't have corresponding sorting keys: - - - {root} - display name without extension (as a complement - for {ext}) - - - {fileroot} - display name without extension for anything - except for directories and symbolic links to directories (as - a complement for {fileext}) - - Empty curly braces ({}) are replaced with the default secondary - column for primary sort key. So after the next command view will - be displayed almost as if 'viewcolumns' is empty, but adding - ellipsis for long file names: - - set viewcolumns=-{name}..,6{}. - - Cropping specifier - - It's from one to three dots after closing curly brace in column - format. - - Specifies type of text truncation if it doesn't fit in the col- - umn. Currently three types are supported: - - - truncation - text is truncated - - set viewcolumns=-{name}. - - results in truncation of names that are too long too fit in - the view. - - - adding of ellipsis - ellipsis on the left or right are added - when needed - - set viewcolumns=-{name}.. - - results in that ellipsis are added at the end of too long - file names. - - - none (default) - text can pass column boundaries - - set viewcolumns=-{name}...,{ext} - - results in that long file names can partially be written on - the ext column. - -Color schemes - The color schemes in vifm can be applied in two different ways: - - - as the primary color scheme; - - - as local to a pane color scheme. - - Both types are set using :colorscheme command, but of different - forms: - - - :colorscheme color_scheme_name - for the primary color - scheme; - - - :colorscheme color_scheme_name directory - for local color - schemes. - - Look of different parts of the TUI (Text User Interface) is - determined in this way: - - - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, - ErrorMsg, StatusLine, JobLine, SuggestBox and WildMenu are - always determined by the primary color scheme; - - - CurrLine, Selected, Directory, Link, BrokenLink, Socket, - Device, Executable, Fifo, CmpMismatch, Win, AuxWin and Oth- - erWin are determined by primary color scheme and a set of - local color schemes, which can be empty. - - There might be a set of local color schemes because they are - structured hierarchically according to file system structure. - For example, having the following piece of file system: - - ~ - `-- bin - | - `-- my - - Two color schemes: - - # ~/.vifm/colors/for_bin - highlight Win cterm=none ctermfg=white ctermbg=red - highlight CurrLine cterm=none ctermfg=red ctermbg=black - - # ~/.vifm/colors/for_bin_my - highlight CurrLine cterm=none ctermfg=green ctermbg=black - - And these three commands in the vifmrc file: - - colorscheme Default - colorscheme for_bin ~/bin - colorscheme for_bin_my ~/bin/my - - File list will look in the following way for each level: - - - ~/ - Default color scheme - black background - cursor with blue background - - - ~/bin/ - mix of Default and for_bin color schemes - red background - cursor with black background and red foreground - - - ~/bin/my/ - mix of Default, for_bin and for_bin_my color - schemes - red background - cursor with black background and green foreground - -Trash directory - vifm has support of trash directory, which is used as temporary - storage for deleted files or files that were cut. Using trash - is controlled by the 'trash' option, and exact path to the trash - can be set with 'trashdir' option. Trash directory in vifm dif- - fers from the system-wide one by default, because of possible - incompatibilities of storing deleted files among different file - managers. But one can set 'trashdir' to "~/.local/share/Trash" - to use a "standard" trash directory. - - There are two scenarios of using trash in vifm: - - 1. As a place for storing files that were cut by "d" and may - be inserted to some other place in file system. - - 2. As a storage of files, that are deleted but not purged yet. - - The first scenario uses deletion ("d") operations to put files - to trash and put ("p") operations to restore files from trash - directory. Note that such operations move files to and from - trash directory, which can be long term operations in case of - different partitions or remote drives mounted locally. - - The second scenario uses deletion ("d") operations for moving - files to trash directory and :empty command-line command to - purge all previously deleted files. - - Deletion and put operations depend on registers, which can point - to files in trash directory. Normally, there are no nonexistent - files in registers, but vifm doesn't keep track of modifications - under trash directory, so one shouldn't expect value of regis- - ters to be absolutely correct if trash directory was modified - not by operation that are meant for it. But this won't lead to - any issues with operations, since they ignore nonexistent files. - -Client-Server - vifm supports remote execution of command-line mode commands, - remote changing of directories and expression evaluation. This - is possible using --remote and --remote-expr command-line argu- - ments. - - To execute a command remotely combine --remote argument with -c - or +. For example: - - vifm --remote -c 'cd /' - vifm --remote '+cd /' - - To change directory not using command-line mode commands one can - specify paths right after --remote argument, like this: - - vifm --remote / - vifm --remote ~ - vifm --remote /usr/bin /tmp - - Evaluating expression remotely might be useful to query informa- - tion about an instance, for example its location: - - vifm --remote-expr 'expand("%d")' - - If there are several running instances, the target can be speci- - fied with --server-name option (otherwise, the first one lexico- - graphically is used): - - vifm --server-name work --remote ~/work/project - - List of names of running instances can be obtained via - --server-list option. Name of the current one is available via - v:servername. - - - v:servername - server name of the running vifm instance. Empty if - client-server feature is disabled. - -Plugin - Plugin for using vifm in vim as a file selector. - - Commands: - - :EditVifm select a file or files to open in the current - buffer. - :Vifm alias for :EditVifm. - :SplitVifm split buffer and select a file or files to open. - :VsplitVifm vertically split buffer and select a file or files - to open. - :DiffVifm select a file or files to compare to the current - file with - :vert diffsplit. - :TabVifm select a file or files to open in tabs. - - Each command accepts up to two arguments: left pane directory - and right pane directory. After arguments are checked, vifm - process is spawned in a special "file-picker" mode. To pick - files just open them either by pressing l, i or Enter keys, or - by running :edit command. If no files are selected, file under - the cursor is opened, otherwise whole selection is passed to the - plugin and opened in vim. - - The plugin have only two settings. It's a string variable named - g:vifm_term to let user specify command to run GUI terminal. By - default it's equal to 'xterm -e'. And another string variable - named g:vifm_exec, which equals "vifm" by default and specifies - path to vifm's executable. To pass arguments to vifm use - g:vifm_exec_args, which is empty by default. - - To use the plugin copy the vifm.vim file to either the system - wide vim/plugin directory or into ~/.vim/plugin. - - If you would prefer not to use the plugin and it is in the sys- - tem wide plugin directory add - - let loaded_vifm=1 - - to your ~/.vimrc file. - -Reserved - The following command names are reserved and shouldn't be used - for user commands. - - g[lobal] - v[global] - -ENVIRONMENT - VIFM Points to main configuration directory (usually - ~/.vifm/). - - MYVIFMRC - Points to main configuration file (usually - ~/.vifm/vifmrc). - - These environment variables are valid inside vifm and also can - be used to configure it by setting some of them before running - vifm. - - When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception - for Windows: vifmrc in the same directory as vifm.exe has higher - priority than $VIFM/vifmrc). - - See "Startup" section above for more details. - - VIFM_FUSE_FILE - On execution of external commands this variable is set to - the full path of file used to initiate FUSE mount of the - closes mount point from current pane directory up. It's - not set when outside FUSE mount point. When vifm is used - inside terminal multiplexer, it tries to set this vari- - able as well (it doesn't work this way on its own). - -SEE ALSO - vifm-convert-dircolors(1), vifm-pause(1) - - Website: https://vifm.info/ - Wiki: https://wiki.vifm.info/ - - Esperanto translation of the documentation by Sebastian Cyprych: - http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html - -AUTHOR - Vifm was written by ksteen - And currently is developed by xaizek - - - -vifm 0.10.1 July 29, 2019 VIFM(1) diff --git a/vifm/vifm/vifminfo b/vifm/vifm/vifminfo deleted file mode 100644 index 706799f..0000000 --- a/vifm/vifm/vifminfo +++ /dev/null @@ -1,189 +0,0 @@ -# You can edit this file by hand, but it's recommended not to do that. - -# Marks: -'H - /Users/jackson/ - .. -1595521010 -'b - /Users/jackson/bin/ - .. -1595521010 -'h - /Users/jackson/ - .. -1595521010 - -# Bookmarks: - -# TUI: -al -q1 -v2 -ov -m-1 -l2 -r2 - -# Left window history (oldest to newest): -d/Users/jackson - Music -11 -d/Users/jackson/Music - BULGARA -3 -d/Users/jackson/Music/BULGARA - .. -0 -d/Users/jackson/Music - iTunes -24 -d/Users/jackson/Music/iTunes - Previous iTunes Libraries -2 -d/Users/jackson/Music/iTunes/Previous iTunes Libraries - .. -0 -d/Users/jackson/Music/iTunes - .. -0 -d/Users/jackson/Music - .. -0 -d/Users/jackson - nltk_data -19 -d/Users/jackson/nltk_data - corpora -1 -d/Users/jackson/nltk_data/corpora - .. -0 -d/Users/jackson/nltk_data - .. -0 -d/Users/jackson - Boostnote -4 -d/Users/jackson/Boostnote - notes -1 -d/Users/jackson/Boostnote/notes - 0f7d6db2-c6aa-48c5-b01c-70843cdbe2b9.cson -1 -d/Users/jackson/Boostnote - notes -1 -d/Users/jackson - Boostnote -4 -d/Users - jackson -3 -d/ - Users -3 -d/Users - jackson -3 -d/Users/jackson - Applications -3 -d/Users/jackson/Applications - .. -0 -d/Users/jackson - Applications -3 -d/Users/jackson/Applications - .. -0 -d/Users/jackson - Applications -3 -d/Users/jackson/Applications - Brave Browser Apps.localized -1 -d/Users/jackson/Applications/Brave Browser Apps.localized - .. -0 -d/Users/jackson/Applications - Brave Browser Apps.localized -1 -d/Users/jackson - AndroidStudioProjects -2 -d/Users - jackson -3 -d/Users/jackson - .vifm -42 -d/Users/jackson/.vifm - .vifmrc -1 -d - -# Right window history (oldest to newest): -D/Users/jackson - .. -0 -D/etc - .. -0 -D/ - etc -8 -D/etc - group -40 -D/ - cores -6 -D/Users/jackson - fluidlan.vim -25 -D - -# Command line history (oldest to newest): -:bd -:only -:vsp ~ -:help -:e .vifmrc -:mkdir .vifm -:e ~/.vifm/.vifmrc -:q - -# Search history (oldest to newest): -/Music -/hosts -/vifm - -# Prompt history (oldest to newest): - -# Local filter history (oldest to newest): - -# Registers: -""/Users/jackson/.local/share/vifm/Trash/000_localhost.key - -# Directory stack (oldest to newest): - -# Trash content: -t/Users/jackson/.local/share/vifm/Trash/000_download - /Users/jackson/download -t/Users/jackson/.local/share/vifm/Trash/000_localhost.crt - /Users/jackson/localhost.crt -t/Users/jackson/.local/share/vifm/Trash/000_localhost.key - /Users/jackson/localhost.key - -# State: -f -i1 -[.0 -[F -F -I1 -].1 -]F -s0 diff --git a/vifm/vifm/vifmrc b/vifm/vifm/vifmrc deleted file mode 100644 index 98d5d87..0000000 --- a/vifm/vifm/vifmrc +++ /dev/null @@ -1,414 +0,0 @@ -" vim: filetype=vifm : -" Sample configuration file for vifm on OSX (last updated: 2 June, 2019) -" You can edit this file by hand. -" The " character at the beginning of a line comments out the line. -" Blank lines are ignored. -" The basic format for each item is shown with an example. - -" ------------------------------------------------------------------------------ - -" Command used to edit files in various contexts. The default is vim. -" If you would like to use another vi clone such as Elvis or Vile -" you will need to change this setting. - -set vicmd=vim -" set vicmd=elvis\ -G\ termcap -" set vicmd=vile - -" This makes vifm perform file operations on its own instead of relying on -" standard utilities like `cp`. While using `cp` and alike is a more universal -" solution, it's also much slower when processing large amounts of files and -" doesn't support progress measuring. - -set syscalls - -" Trash Directory -" The default is to move files that are deleted with dd or :d to -" the trash directory. If you change this you will not be able to move -" files by deleting them and then using p to put the file in the new location. -" I recommend not changing this until you are familiar with vifm. -" This probably shouldn't be an option. - -set trash - -" This is how many directories to store in the directory history. - -set history=100 - -" Automatically resolve symbolic links on l or Enter. - -set nofollowlinks - -" With this option turned on you can run partially entered commands with -" unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te). - -" set fastrun - -" Natural sort of (version) numbers within text. - -set sortnumbers - -" Maximum number of changes that can be undone. - -set undolevels=100 - -" Use Vim's format of help file (has highlighting and "hyperlinks"). -" If you would rather use a plain text help file set novimhelp. - -set vimhelp - -" If you would like to run an executable file when you -" press return on the file name set this. - -set norunexec - -" Selected color scheme - -colorscheme Default - -" Format for displaying time in file list. For example: -" TIME_STAMP_FORMAT=%m/%d-%H:%M -" See man date or man strftime for details. - -set timefmt=%m/%d\ %H:%M - -" Show list of matches on tab completion in command-line mode - -set wildmenu - -" Display completions in a form of popup with descriptions of the matches - -set wildstyle=popup - -" Display suggestions in normal, visual and view modes for keys, marks and -" registers (at most 5 files). In other view, when available. - -set suggestoptions=normal,visual,view,otherpane,keys,marks,registers - -" Ignore case in search patterns unless it contains at least one uppercase -" letter - -set ignorecase -set smartcase - -" Don't highlight search results automatically - -set nohlsearch - -" Use increment searching (search while typing) -set incsearch - -" Try to leave some space from cursor to upper/lower border in lists - -set scrolloff=4 - -" Don't do too many requests to slow file systems - -set slowfs=curlftpfs - -" Set custom status line look - -set statusline=" Hint: %z%= %A %10u:%-7g %15s %20d " - -" ------------------------------------------------------------------------------ - -" :mark mark /full/directory/path [filename] - -mark b ~/bin/ -mark h ~/ - -" ------------------------------------------------------------------------------ - -" :com[mand][!] command_name action -" The following macros can be used in a command -" %a is replaced with the user arguments. -" %c the current file under the cursor. -" %C the current file under the cursor in the other directory. -" %f the current selected file, or files. -" %F the current selected file, or files in the other directory. -" %b same as %f %F. -" %d the current directory name. -" %D the other window directory name. -" %m run the command in a menu window - -command! df df -h %m 2> /dev/null -command! diff vim -d %f %F -command! zip zip -r %f.zip %f -command! run !! ./%f -command! make !!make %a -command! mkcd :mkdir %a | cd %a -command! reload :write | restart - -" ------------------------------------------------------------------------------ - -" The file type is for the default programs to be used with -" a file extension. -" :filetype pattern1,pattern2 defaultprogram,program2 -" :fileviewer pattern1,pattern2 consoleviewer -" The other programs for the file type can be accessed with the :file command -" The command macros %f, %F, %d, %F may be used in the commands. -" Spaces in an app name will have to be escaped e.g. QuickTime\ Player.app -" The %a macro is ignored. To use a % you must put %%. - -" For automated FUSE mounts, you must register an extension with :file[x]type -" in one of following formats: -" -" :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables -" %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime. -" A sample line might look like this: -" :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR -" -" :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables -" %PARAM and %DESTINATION_DIR are filled in by vifm at runtime. -" A sample line might look like this: -" :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR -" %PARAM value is filled from the first line of file (whole line). -" Example first line for SshMount filetype: root@127.0.0.1:/ -" -" You can also add %CLEAR if you want to clear screen before running FUSE -" program. - -" Pdf -filetype *.pdf - \ {Open in Preview} - \ open -a Preview.app, - \ {Open in Skim} - \ open -a Skim.app, -fileviewer *.pdf pdftotext -nopgbrk %c - - -" PostScript -filetype *.ps,*.eps open -a Preview.app - -" Djvu -filetype *.djvu open -a MacDjView.app - -" Audio -filetype *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus - \ {Play using MPlayerX} - \ open -a MPlayerX.app, - \ {Open in iTunes} - \ open -a iTunes.app, - \ {Open in QuickTime Player} - \ open -a QuickTime\ Player.app, -fileviewer *.mp3 mp3info -fileviewer *.flac soxi - -" Video -filetype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob, - \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx, - \*.as[fx] - \ {Open in VLC} - \ open -a VLC.app, - \ {Open in QuickTime Player} - \ open -a QuickTime\ Player.app, - \ {Open in MPlayerX} - \ open -a MPlayerX.app, -fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob, - \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx, - \*.as[fx] - \ ffprobe -pretty %c 2>&1 - -" Web -filetype *.html,*.htm - \ {Open in Safari} - \ open -a Safari.app, - \ {Open in Firefox} - \ open -a Firefox.app, - \ {Open in Chrome} - \ open -a Google\ Chrome.app, - \ {Open in vim} - \ vim, -fileviewer *.html,*.htm w3m -dump -T text/html - -" Object -filetype *.o nm %f | less - -" Man page -filetype *.[1-8] man ./%c -fileviewer *.[1-8] man ./%c | col -b - -" Image -filetype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm, - \ open -a Preview.app, -fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm - \ identify %f - -" MD5 -filetype *.md5 - \ {Check MD5 hash sum} - \ md5sum -c %f %S, - -" SHA1 -filetype *.sha1 - \ {Check SHA1 hash sum} - \ sha1sum -c %f %S, - -" SHA256 -filetype *.sha256 - \ {Check SHA256 hash sum} - \ sha256sum -c %f %S, - -" SHA512 -filetype *.sha512 - \ {Check SHA512 hash sum} - \ sha512sum -c %f %S, - -" Torrent -filetype *.torrent open -a Transmission.app -fileviewer *.torrent dumptorrent -v %c - -" Extract zip files -filetype *.zip unzip %f -fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c - -" Extract tar archives -filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz tar -xf %f -fileviewer *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz tar -tf %f - -" Extract .bz2 archives -filetype *.bz2 bzip2 -d %f - -" Extract .gz files -filetype *.gz gunzip %f - -" Mount .dmg archives -filetype *.dmg open - -" Mount disk .img -filetype *.img open - -" Open .pkg binaries -filetype *.pkg open - -" Office files -filetype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx,*.ppt open -a LibreOffice.app -fileviewer *.doc antiword - -fileviewer *.docx docx2txt.pl %f - - -" Syntax highlighting in preview -" -" Explicitly set highlight type for some extensions -" -" 256-color terminal -" fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c -" fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c -" -" 16-color terminal -" fileviewer *.c,*.h highlight -O ansi -s dante %c -" -" Or leave it for automatic detection -" -" fileviewer *[^/] pygmentize -O style=monokai -f console256 -g - -" Displaying pictures in terminal -" -" fileviewer *.jpg,*.png shellpic %c - -" Open all other files with default system programs (you can also remove all -" :file[x]type commands above to ensure they don't interfere with system-wide -" settings). By default all unknown files are opened with 'vi[x]cmd' -" uncommenting one of lines below will result in ignoring 'vi[x]cmd' option -" for unknown file types. -" For OS X: -" filetype * open - -" ------------------------------------------------------------------------------ - -" What should be saved automatically between vifm sessions. Drop "savedirs" -" value if you don't want vifm to remember last visited directories for you. -set vifminfo=dhistory,savedirs,chistory,state,tui,shistory, - \phistory,fhistory,dirstack,registers,bookmarks,bmarks - -" ------------------------------------------------------------------------------ - -" Examples of configuring both panels - -" Customize view columns a bit (enable ellipsis for truncated file names) -" -" set viewcolumns=-{name}..,6{}. - -" Filter-out build and temporary files -" -" filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/ - -" ------------------------------------------------------------------------------ - -" Sample mappings - -" Start shell in current directory -nnoremap s :shell - -" Display sorting dialog -nnoremap S :sort - -" Toggle visibility of preview window -nnoremap w :view -vnoremap w :viewgv - -" Open file in new MacVim tab -nnoremap o :!mvim --remote-tab-silent %f -" Open file in new MacVim window -nnoremap O :!mvim %f - -" Open file in the background using its default program -nnoremap gb :!open -g %f - -" Yank current directory path into the clipboard -nnoremap yd :!printf %d | pbcopy - -" Yank current file path into the clipboard -nnoremap yf :!printf %c:p | pbcopy - -" View preview in Quick Look -nnoremap q :!qlmanage -p %f > /dev/null 2>&1 -" Unhide builtin q* keymaps -nnoremap q: q: -nnoremap q/ q/ -nnoremap q? q? -nnoremap q= q= - -" Mappings for faster renaming -nnoremap I cw -nnoremap cc cw -nnoremap A cw - -" Open editor to edit vifmrc and apply settings after returning to vifm -nnoremap ,c :write | edit $MYVIFMRC | restart -" Open MacVim to edit vifmrc -nnoremap ,C :!mvim --remote-tab-silent $MYVIFMRC & - -" Toggle wrap setting on ,w key -nnoremap ,w :set wrap! - -" Example of standard two-panel file managers mappings -nnoremap :!less %f -nnoremap :edit -nnoremap :copy -nnoremap :move -nnoremap :mkdir -nnoremap :delete - -" ------------------------------------------------------------------------------ - -" Various customization examples - -" Use ag (the silver searcher) instead of grep -" -" set grepprg='ag --line-numbers %i %a %s' - -" Add additional place to look for executables -" -" let $PATH = $HOME.'/bin/fuse:'.$PATH - -" Block particular shortcut -" -" nnoremap - -" Export IPC name of current instance as environment variable and use it to -" communicate with the instance later. -" -" It can be used in some shell script that gets run from inside vifm, for -" example, like this: -" vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'" -" -" let $VIFM_SERVER_NAME = v:servername diff --git a/vifm/vifminfo b/vifm/vifminfo deleted file mode 100644 index 7636110..0000000 --- a/vifm/vifminfo +++ /dev/null @@ -1,10 +0,0 @@ -# You can edit this file by hand, but it's recommended not to do that. - -# Marks: -'h - /Users/jackson/ - .. -1595531838 - -# Bookmarks: - diff --git a/vifm/vifmrc b/vifm/vifmrc deleted file mode 100644 index 973e652..0000000 --- a/vifm/vifmrc +++ /dev/null @@ -1,127 +0,0 @@ -" Opens files in NeoVim -set vicmd=nvim - -" Preview files in second pane -view - -" Shows hidden files by default -windo normal zo - -" Temporarily preserve deleted files -set trash - -" Sane search highlighting -set nohlsearch -set incsearch - -" Automatically resolve symbolic links on l or Enter -set nofollowlinks - -" Status line -" %t = current file or directory -" %A = file permissions -" %15E = size of current file(s) -set statusline=" %t%= %A %15E " - -" Number of directories to store in history -set history=100 - -" Maximum number of changes that can be undone -set undolevels=100 - -" Run partially entered commands with unambiguous beginning -" (e.g. :!Te instead of :!Terminal or :!Te) -set fastrun - -" Use KiB, MiB, etc. instead of KB, MB, etc. -set noiec - -" Show list of matches on tab completion in command-line mode -set wildmenu - -" Ignore case in search unless it has at least one uppercase letter -set ignorecase -set smartcase - -"" Syntax highlighting in preview -" Explicitly set highlight type for some extensions -" 256-color terminal -fileviewer *.js,*.ts,*.json,*.md, highlight -O xterm256 -s moria %c - -"" Default programs to open various filetypes - -" Images and PDFs -filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm,*.pdf open -a Preview.app - -" Pages & Word Docs -filextype *.pages,*.docx,*.doc open -a Pages.app - -" Spreadsheets -filextype *.xls,*.xlsx,*.numbers open -a Numbers.app -" -" Audio -filextype *.wav,*.mp3,*.flac,*.ogg,*.m4a,*.wma,*.ape,*.ac3 - \ open -a QuickTime\ Player.app - -" Video -filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.vob,*.flv,*.m2v,*.mov,*.webm,*.ts,*.m4v - \ open -a QuickTime\ Player.app, - -" Extract zip files -filetype *.zip unzip %f -fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c - -" Extract tar archives -filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz tar -xf %f -fileviewer *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz tar -tf %f - -" Extract .bz2 archives -filetype *.bz2 bzip2 -d %f - -" Extract .gz files -filetype *.gz gunzip %f - -" Mount .dmg archives -filetype *.dmg open - -" Open .pkg binaries -filetype *.pkg open - - -"" Remaps - -" Start shell in current directory -nnoremap s :shell - -" Display sorting dialog -nnoremap S :sort - -" Toggle visibility of preview window -nnoremap w :view -vnoremap w :viewgv - -" Open file in the background using its default program -nnoremap gb :!open -g %f - -" Yank current directory path into the clipboard -nnoremap yd :!printf %d | pbcopy - -" Yank current file path into the clipboard -nnoremap yf :!printf %c:p | pbcopy - -" Mappings for faster renaming -nnoremap I cw -nnoremap cc cw -nnoremap A cw - -" Open vim to edit vifmrc and apply settings after returning to vifm -nnoremap ,c :write | execute ':!nvim $MYVIFMRC' | restart - -" Toggle wrap setting on ,w key -nnoremap ,w :set wrap! - - -"" Marks - -mark h ~/ - diff --git a/vim/doc/uncap_ex.txt b/vim/doc/uncap_ex.txt deleted file mode 100644 index e69de29..0000000 diff --git a/vim/filetype.vim b/vim/filetype.vim deleted file mode 100644 index 3d65273..0000000 --- a/vim/filetype.vim +++ /dev/null @@ -1,7 +0,0 @@ -if exists("did_load_filetypes") - finish -endif -augroup filetypedetect - " au! commands to set the filetype go here - au! BufNewFile,BufRead *.csv setf csv -augroup END diff --git a/vim/ftplugin/csv.vim b/vim/ftplugin/csv.vim deleted file mode 100644 index a9a6110..0000000 --- a/vim/ftplugin/csv.vim +++ /dev/null @@ -1,431 +0,0 @@ -" Filetype plugin for editing CSV files. -" Version 2011-11-02 from http://vim.wikia.com/wiki/csv -if v:version < 700 || exists('b:did_ftplugin') - finish -endif -let b:did_ftplugin = 1 - -" Return number of characters (not bytes) in string. -function! s:CharLen(str) - return strlen(substitute(a:str, '.', 'x', 'g')) -endfunction - -" Display a warning message. -function! s:Warn(msg) - echohl WarningMsg - echo a:msg - echohl NONE -endfunction - -" --- Highlighting a column {{{ -" Highlight a column in csv text. -" :Csv 1 " highlight first column -" :Csv 12 " highlight twelfth column -" :Csv 0 " switch off highlight -function! CSVH(colnr) - if a:colnr > 1 - let n = a:colnr - 1 - execute 'match Keyword /^\([^,]*,\)\{'.n.'}\zs[^,]*/' - execute 'normal! 0'.n.'f,' - elseif a:colnr == 1 - match Keyword /^[^,]*/ - normal! 0 - else - match - endif -endfunction -command! -nargs=1 Csv :call CSVH() - -"}}} -" Set or show column delimiter. -" Accept '\t' (2 characters: backslash, t) as the tab character. -function! s:Delimiter(delim) - if !empty(a:delim) - let want = a:delim == '\t' ? "\t" : a:delim - if s:CharLen(want) != 1 - call s:Warn('Delimiter must be a single character') - return - endif - let b:csv_delimiter = want - endif - let b:changed_done = -1 - let b:csv_column = 1 - silent call s:Highlight(b:csv_column) - echo printf('Delimiter = "%s"', b:csv_delimiter == "\t" ? '\t' : strtrans(b:csv_delimiter)) -endfunction -command! -buffer -nargs=? Delimiter call s:Delimiter('') - -" Get string containing delimiter (default ',') specified for current buffer. -" A command like ':let g:csv_delimiter = ";"' changes the default. -" Script assumes 'magic' option is in effect, so some special processing -" is needed for some delimiters like '~' and '*'. -" An alternative would be to use '\V' in patterns, but that would be tricky -" given that the "search" patterns are combined with user-entered patterns. -function! s:GetStr(id) - if !exists('b:csv_delimiter') || empty(b:csv_delimiter) - if exists('g:csv_delimiter') && !empty(g:csv_delimiter) - let b:csv_delimiter = g:csv_delimiter - else - let b:csv_delimiter = ',' - endif - endif - if !exists('b:csv_str') - let b:csv_str = {'delim': ''} - endif - if b:csv_str['delim'] !=# b:csv_delimiter - " Define strings using delimiter ',' then substitute if required. - let b:csv_str['delim'] = ',' - let b:csv_str['numco'] = '\%(\%("\%([^"]\|""\)*"\)\|\%([^,"]*\)\)' - let b:csv_str['expr1'] = '\%(\%("\zs\%([^"]\|""\)*\ze"\)\|\%(\zs[^,"]*\ze\)\)' - let b:csv_str['expr2'] = '\%(\%(\zs"\%([^"]\|""\)*",\?\ze\)\|\%(\zs[^,"]*,\?\ze\)\)' - let b:csv_str['expr3'] = '^\%(\%(\%("\%([^"]\|""\)*"\)\|\%([^,"]*\)\),\)\{' - let b:csv_str['delco'] = ',$' - let b:csv_str['sear1'] = '^\%(\%("\%([^,]\|""\)*\zs' - let b:csv_str['sear2'] = '\ze\%([^,]\|""\)*"\)\|\%([^,"]*\zs' - let b:csv_str['sear3'] = '\ze[^,"]*\)\)' - let b:csv_str['sear4'] = '^\%(\%(\%("\%([^"]\|""\)*"\)\|\%([^,"]*\)\),\)\{' - let b:csv_str['sear5'] = '}\%(\%("\%([^,]\|""\)*\zs' - if b:csv_delimiter != ',' - let d1 = b:csv_delimiter " d1 replaces ',' in '[...]' - let d2 = d1 " d2 replaces ',' not in '[...]' - if d1 == '&' - let d1 = '\&' " '&' after substitute() - let d2 = '\&' " '&' - elseif d1 == '[' - let d1 = '\[' " '[' - let d2 = '\\[' " '\[' - elseif d1 == '\' - let d1 = '\\' " '\' - let d2 = '\\\\' " '\\' - elseif stridx('.*$^~', d1) >= 0 - let d2 = '\\'.d1 " '\'.d1 - endif - for key in keys(b:csv_str) - if key == 'delim' - let b:csv_str[key] = b:csv_delimiter - else - let replace = substitute(b:csv_str[key], '\[[^]]*\zs,', d1, 'g') - let b:csv_str[key] = substitute(replace, ',', d2, 'g') - endif - endfor - endif - endif - return b:csv_str[a:id] -endfunction - -" Get the number of columns -" Optionally takes one parameter, a specified line number -function! s:GetNumCols(...) - let b:csv_max_col = 1 - " if a line number was provided we will examine that ... - if a:0 == 1 - let rg_cols_to_check = a:000 - " ... else we will default to the maximum of number in first and last three - " lines; at least one of them should contain typical csv data - else - let rg_cols_to_check = [1, 2, 3, line('$')-2, line('$')-1, line('$')] - endif - - for l in rg_cols_to_check - " Determine number of columns by counting the (unescaped) delimiters. - " Note: The regexp may also return unbalanced ", so filter out anything - " which isn't a delimiter in the second pass. - let c = s:CharLen(substitute(substitute(getline(l), s:GetStr('numco'), '', 'g'), '"', '', 'g')) + 1 - if b:csv_max_col < c - let b:csv_max_col = c - endif - endfor - if b:csv_max_col <= 1 - let b:csv_max_col = 999 - call s:Warn('No delimiter-separated columns were detected') - endif - return b:csv_max_col -endfunction - -" Return regex to find the n-th column. -function! s:GetExpr(colnr, ...) - if a:0 == 0 " field only - let field = s:GetStr('expr1') - else " field with quotes (if present) and trailing delimiter (if present) - let field = s:GetStr('expr2') - endif - if a:colnr > 1 - return s:GetStr('expr3') . (a:colnr - 1) . '}' . field - else - return '^' . field - endif -endfunction - -" Default column header line is the first line -let b:csv_heading_line_number=1 - -" Extract and echo the column header on the status line. -function! s:PrintColumnInfo(colnr) - let colHeading = substitute(matchstr(getline(b:csv_heading_line_number), s:GetExpr(a:colnr)), - \ '^\s*\(.*\)\s*$', '\1', '') - let info = 'Column ' . a:colnr - if empty(colHeading) - echo info - else - echon info . ': ' - echohl Type - " Limit length to avoid "Hit ENTER" prompt. - echon strpart(colHeading, 0, (&columns / 2)) . (len(colHeading) > (&columns / 2) ? '...' : '') - echohl NONE - endif -endfunction - -" Change csv_heading_line_number to specified line. -" If no line is specified, use the current line. -function! s:SetHeadinglineNumber(linenr) - if empty(a:linenr) - let b:csv_heading_line_number = line('.') - else - let b:csv_heading_line_number = a:linenr - endif - " Update the displayed column name to use the new heading line - call s:PrintColumnInfo(b:csv_column) - " Update the maximum number of columns based on heading - " line - call s:GetNumCols(b:csv_heading_line_number) -endfunction -command! -buffer -nargs=? HL call s:SetHeadinglineNumber('') - -" Highlight n-th column (if n > 0). -" Remove previous highlight match (ignore error if none). -" matchadd() priority -1 means 'hlsearch' will override the match. -function! s:Highlight(colnr) - silent! call matchdelete(b:csv_match) - if a:colnr > 0 - if exists('*matchadd') - let b:csv_match = matchadd('Keyword', s:GetExpr(a:colnr), -1) - else - execute '2match Keyword /' . s:GetExpr(a:colnr) . '/' - endif - if b:changed_done != b:changedtick - let b:changed_done = b:changedtick - call s:GetNumCols() - endif - call s:Focus_Column(a:colnr) - endif -endfunction - -" Focus the cursor on the n-th column of the current line. -function! s:Focus_Column(colnr) - normal! 0 - call search(s:GetExpr(a:colnr), '', line('.')) - call s:PrintColumnInfo(a:colnr) -endfunction - -" Highlight next column. -function! s:HighlightNextColumn() - if b:csv_column < b:csv_max_col - let b:csv_column += 1 - endif - call s:Highlight(b:csv_column) -endfunction - -" Highlight previous column. -function! s:HighlightPrevColumn() - if b:csv_column > 1 - let b:csv_column -= 1 - endif - call s:Highlight(b:csv_column) -endfunction - -" Highlight the column the cursor is on -function! s:Focus_Cursor() - let b:csv_column = s:CharLen(substitute(substitute(getline(".")[:col(".")-1], s:GetStr('numco'), '', 'g'), '"', '', 'g')) + 1 - call s:Highlight(b:csv_column) -endfunction -" Wrapping would distort the column-based layout. -" Lines must not be broken when typed. -setlocal nowrap textwidth=0 -" Undo the stuff we changed. -let b:undo_ftplugin = "setlocal wrap< textwidth<" - \ . "|if exists('*matchdelete')|call matchdelete(b:csv_match)|else|2match none|endif" - \ . "|sil! exe 'nunmap H'" - \ . "|sil! exe 'nunmap L'" - \ . "|sil! exe 'nunmap J'" - \ . "|sil! exe 'nunmap K'" - \ . "|sil! exe 'nunmap '" - \ . "|sil! exe 'nunmap '" - \ . "|sil! exe 'nunmap 0'" - \ . "|sil! exe 'nunmap $'" - \ . "|sil exe 'augroup csv' . bufnr('')" - \ . "|sil exe 'au!'" - \ . "|sil exe 'augroup END'" - -let b:changed_done = -1 -" Highlight the first column, but not if reloading or resetting filetype. -if !exists('b:csv_column') - let b:csv_column = 1 -endif -" Following highlights column and calls GetNumCols() if set filetype manually -" (BufEnter will also do it if filetype is set during load). -silent call s:Highlight(b:csv_column) - -" Return Float value of field in line selected by regex, or the String field. -function! s:GetValue(line, regex) - let field = matchstr(a:line, a:regex) - let val = str2float(field) - if val == 0 && match(field, '^0*\.\?0*$') < 0 - return field - endif - return val -endfunction - -" Compare lines based on the floating point values in the specified column. -" This uses string compare 'ignorecase' option if neither field is a float. -function! s:CompareLines(line1, line2) - let val1 = s:GetValue(a:line1, b:csv_sort_regex) - let val2 = s:GetValue(a:line2, b:csv_sort_regex) - if type(val1) != type(val2) - let val1 = type(val1) - let val2 = type(val2) - endif - let ascending = val1 > val2 ? 1 : val1 < val2 ? -1 : 0 - return b:csv_sort_ascending ? ascending : -ascending -endfunction - -" Sort the n-th column, the highlighted one by default. -" If range_given is non-zero we use line1 and line2, -" otherwise they are ignored. Range_given is given the -" value of below -" Column number is first optional arg; following are flags for :sort. -function! s:SortColumn(bang, range_given, line1, line2, ...) range - let colnr = b:csv_column - let args = copy(a:000) - if len(args) > 0 && args[0] =~ '^\d\+$' - let colnr = str2nr(args[0]) - unlet args[0] - endif - if colnr < 1 || colnr > b:csv_max_col - call s:Warn('Column number out of range') - endif - - "First check that the headings line is a valid line - if b:csv_heading_line_number >= line('$') - call s:Warn('No lines to sort - specified heading line ['.b:csv_heading_line_number. - \ '] is at or beyond end of file') - return 1 - endif - - "Work out the first line to start sorting at. - "If they explicitly passed a range, use it - "else use from line after heading line to $ - "(if they turned off the heading line with HL 0, - " this will cover the whole buffer) - if a:range_given - let first = a:line1 - let last = a:line2 - else - let first = b:csv_heading_line_number + 1 - let last = line('$') - endif - - let flags = join(args) - if flags == 'f' - let b:csv_sort_ascending = empty(a:bang) - let b:csv_sort_regex = s:GetExpr(colnr) - call setline(first, sort(getline(first, last), function('s:CompareLines'))) - else - let cmd = first.','.last.'sort'.a:bang - execute cmd 'r'.flags '/'.escape(s:GetExpr(colnr), '/').'/' - endif -endfunction -command! -bang -buffer -nargs=* -range=0 Sort call s:SortColumn('', , , , ) - -" Copy an entire column into a register. -" Column number can be omitted (default is the current column). -" Register is a-z, or A-Z (append), or omitted for the unnamed register. -" Example: ':CC 12 b' copies column 12 into register b. -function! s:CopyColumn(args) - let l = matchlist(a:args, '^\(\d*\)\s*\(\a\)\?$') - if len(l) < 3 - call s:Warn('Invalid arguments (need column_number register)') - return - endif - let col = empty(l[1]) ? b:csv_column : str2nr(l[1]) - let reg = empty(l[2]) ? '@' : l[2] - if col < 1 || col > b:csv_max_col - call s:Warn('Column number out of range') - return - endif - let matchcol = s:GetExpr(col) - let cells = [] - for lnum in range(1, line('$')) - call add(cells, matchstr(getline(lnum), matchcol)) - endfor - execute 'let @'.reg.' = join(cells, "\n")."\n"' -endfunction -command! -buffer -nargs=* CC call s:CopyColumn('') - -" Delete the n-th column, the highlighted one by default. -function! s:DeleteColumn(colnr) - if empty(a:colnr) - let col = b:csv_column - else - let col = str2nr(a:colnr) - endif - if col < 1 || col > b:csv_max_col - call s:Warn('Column number out of range') - endif - execute '%s/'.escape(s:GetExpr(col, 1), '/').'//' - if col == b:csv_max_col - execute 'silent %s/'.escape(s:GetStr('delco'), '/').'//e' - endif - let b:csv_max_col -= 1 - if b:csv_column > b:csv_max_col - call s:HighlightPrevColumn() - endif -endfunction -command! -buffer -nargs=? DC call s:DeleteColumn('') - -" Search the n-th column. Argument in n=regex form where n is the column -" number, and regex is the expression to use. If "n=" is omitted, then -" use the current highlighted column. -function! s:SearchColumn(args) - let [colstr, target] = matchlist(a:args, '\%(\([1-9][0-9]*\)=\)\?\(.*\)')[1:2] - if empty(colstr) - let col = b:csv_column - else - let col = str2nr(colstr) - endif - if col < 1 || col > b:csv_max_col - call s:Warn('Column number out of range') - endif - if col == 1 - let @/ = s:GetStr('sear1').target.s:GetStr('sear2').target.s:GetStr('sear3') - else - let @/ = s:GetStr('sear4').(col-1).s:GetStr('sear5').target.s:GetStr('sear2').target.s:GetStr('sear3') - endif -endfunction -" Use :SC n=string to search for string in the n-th column -command! -buffer -nargs=1 SC execute s:SearchColumn('')|normal! n - -nnoremap :call Focus_Cursor() -nnoremap H :call HighlightPrevColumn() -nnoremap L :call HighlightNextColumn() -nnoremap J :call Focus_Column(b:csv_column) -nnoremap K :call Focus_Column(b:csv_column) -nnoremap :call Focus_Column(b:csv_column) -nnoremap :call Focus_Column(b:csv_column) -nnoremap :call Focus_Column(b:csv_column) -nnoremap :call Focus_Column(b:csv_column) -nnoremap 0 :let b:csv_column=1:call Highlight(b:csv_column) -nnoremap $ :let b:csv_column=b:csv_max_col:call Highlight(b:csv_column) -nnoremap gm :call Focus_Column(b:csv_column) -nnoremap J J -nnoremap K K - -" The column highlighting is window-local, not buffer-local, so it can persist -" even when the filetype is undone or the buffer changed. -execute 'augroup csv' . bufnr('') - autocmd! - " These events only highlight in the current window. - " Note: Highlighting gets slightly confused if the same buffer is present in - " two split windows next to each other, because then the events aren't fired. - autocmd BufLeave silent call s:Highlight(0) - autocmd BufEnter silent call s:Highlight(b:csv_column) -augroup END diff --git a/vim/maps.vim b/vim/maps.vim deleted file mode 100644 index a861ece..0000000 --- a/vim/maps.vim +++ /dev/null @@ -1,36 +0,0 @@ -"" Remaps - -let mapleader = " " - -" Resize -nnoremap + :vertical resize +5 -nnoremap - :vertical resize -5 - -" Vim config -nnoremap ve :e ~/.vimrc -nnoremap vv :vsp ~/.vimrc -nnoremap vs :source ~/.vimrc -nnoremap vp :vsp ~/.vim/plugins.vim -nnoremap vm :vsp ~/.vim/maps.vim - -" Trim trailing whitespace -nnoremap :call Preserve("%s/\\s\\+$//e") - -" Prefill substitute -nnoremap ts :%s/ - -" Easy save and quit -nnoremap w :w -nnoremap q :q -nnoremap Q :q -nnoremap x :x - -" Close all buffers except the current one -nnoremap bda :up %bd e# - -" Fix visual block indenting -vmap < >gv - -" Make Y work like other maps -nmap Y y$ diff --git a/vim/plugin/preserve.vim b/vim/plugin/preserve.vim deleted file mode 100644 index 58bf20c..0000000 --- a/vim/plugin/preserve.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Wrap commands in Preserve to keep window position -function Preserve(command) - " Preparation: save window state - let l:saved_winview = winsaveview() - " Run the command: - execute a:command - " Clean up: restore previous window position - call winrestview(l:saved_winview) -endfunction diff --git a/vim/plugin/uncap_ex.vim b/vim/plugin/uncap_ex.vim deleted file mode 100644 index 3901249..0000000 --- a/vim/plugin/uncap_ex.vim +++ /dev/null @@ -1,46 +0,0 @@ -" -" uncap_ex.vim: Tolerate typos like :Wq, :Q, or :Qa and do what I mean, -" including any arguments or modifiers; I fat-finger these commands a lot -" because I type them so rapidly, and they don't correspond to any other -" commands I use -" -" Author: Tom Ryder -" License: Same as Vim itself -" -if exists('g:loaded_uncap_ex') || &compatible - finish -endif -if !has('user_commands') || v:version < 600 - finish -endif -let g:loaded_uncap_ex = 1 - -" Define commands -command -bang -bar -complete=file -nargs=? - \ E - \ edit -command -bang -bar -complete=file -nargs=? - \ W - \ write -command -bang -bar -complete=file -nargs=? - \ WQ - \ wq -command -bang -bar -complete=file -nargs=? - \ Wq - \ wq -command -bang -bar - \ Q - \ quit -command -bang -bar - \ Qa - \ qall -command -bang -bar - \ QA - \ qall -command -bang -bar - \ Wa - \ wall -command -bang -bar - \ WA - \ wa - diff --git a/vim/plugin/wildignore.vim b/vim/plugin/wildignore.vim deleted file mode 100644 index 6d2eada..0000000 --- a/vim/plugin/wildignore.vim +++ /dev/null @@ -1,176 +0,0 @@ -" Don't complete certain files that I'm not likely to want to manipulate from -" within Vim; this is kind of expensive to reload, so I've made it a plugin -" with a load guard -if &compatible || v:version < 700 || !has('wildignore') - finish -endif -if exists('g:loaded_wildmenu') - finish -endif -let g:loaded_wildmenu = 1 - -" Helper function for local scope -function! s:Wildignore() abort - - " New empty array - let l:ignores = [] - - " Archives - let l:ignores += [ - \ '*.7z' - \,'*.bz2' - \,'*.gz' - \,'*.jar' - \,'*.rar' - \,'*.tar' - \,'*.xz' - \,'*.zip' - \ ] - - " Bytecode - let l:ignores += [ - \ '*.class' - \,'*.pyc' - \ ] - - " Databases - let l:ignores += [ - \ '*.db' - \,'*.dbm' - \,'*.sdbm' - \,'*.sqlite' - \ ] - - " Disk - let l:ignores += [ - \ '*.adf' - \,'*.bin' - \,'*.hdf' - \,'*.iso' - \ ] - - " Documents - let l:ignores += [ - \ '*.docx' - \,'*.djvu' - \,'*.odp' - \,'*.ods' - \,'*.odt' - \,'*.pdf' - \,'*.ppt' - \,'*.xls' - \,'*.xlsx' - \ ] - - " Encrypted - let l:ignores += [ - \ '*.asc' - \,'*.gpg' - \ ] - - " Executables - let l:ignores += [ - \ '*.exe' - \,'*.dmg' - \,'*.pkg' - \ ] - - " Fonts - let l:ignores += [ - \ '*.ttf' - \ ] - - " Images - let l:ignores += [ - \ '*.bmp' - \,'*.gd2' - \,'*.gif' - \,'*.ico' - \,'*.jpeg' - \,'*.jpg' - \,'*.pbm' - \,'*.png' - \,'*.psd' - \,'*.tga' - \,'*.xbm' - \,'*.xcf' - \,'*.xpm' - \ ] - - " Incomplete - let l:ignores += [ - \ '*.filepart' - \ ] - - " Objects - let l:ignores += [ - \ '*.a' - \,'*.o' - \ ] - - " Sound - let l:ignores += [ - \ '*.au' - \,'*.aup' - \,'*.flac' - \,'*.mid' - \,'*.m4a' - \,'*.mp3' - \,'*.ogg' - \,'*.opus' - \,'*.s3m' - \,'*.wav' - \ ] - - " System-specific - let l:ignores += [ - \ '.DS_Store' - \ ] - - " Translation - let l:ignores += [ - \ '*.gmo' - \ ] - - " Version control - let l:ignores += [ - \ '.git' - \,'.hg' - \,'.svn' - \ ] - - " Video - let l:ignores += [ - \ '*.avi' - \,'*.gifv' - \,'*.mp4' - \,'*.ogv' - \,'*.rm' - \,'*.swf' - \,'*.webm' - \ ] - - " Vim - let l:ignores += [ - \ '*~' - \,'*.swp' - \ ] - - " If on a system where case matters for filenames, for any that had - " lowercase letters, add their uppercase analogues - if has('fname_case') - for l:ignore in l:ignores - if l:ignore =~# '\l' - call add(l:ignores, toupper(l:ignore)) - endif - endfor - endif - - " Return the completed setting - return join(l:ignores, ',') - -endfunction - -" Run helper function just defined -let &wildignore = s:Wildignore() - diff --git a/vim/plugins.vim b/vim/plugins.vim deleted file mode 100644 index a5f54ac..0000000 --- a/vim/plugins.vim +++ /dev/null @@ -1,479 +0,0 @@ -"" Plugins - -" Download Vim Plug if not already downloaded -if empty(glob('~/.vim/autoload/plug.vim')) - silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs - \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - autocmd VimEnter * PlugInstall --sync | source $MYVIMRC -endif - -call plug#begin('~/.vim/plugged') - -Plug 'tpope/vim-sensible' " basic defaults -Plug 'tpope/vim-unimpaired' " variety of useful bracket maps -Plug 'tpope/vim-commentary' " (un)comment code blocks -Plug 'tpope/vim-surround' " edit surrounding tags easily -Plug 'wellle/targets.vim' " target more text objects -Plug 'tpope/vim-repeat' " repeat commands, not just motions -Plug 'tpope/vim-eunuch' " sugar for UNIX shell commands -Plug 'tpope/vim-vinegar' " extend netrw file tree -Plug 'easymotion/vim-easymotion' " move around the buffer even faster -Plug 'mbbill/undotree' " visualize undo history -Plug 'yuttie/comfortable-motion.vim' " smooth scrolling -Plug 'AndrewRadev/splitjoin.vim' " split/join single/multiline blocks/functions -Plug 'junegunn/goyo.vim' " distraction-free editing (for prose/documentation) -Plug 'skywind3000/asyncrun.vim' " run shell commands asynchronously -Plug 'neoclide/coc.nvim', {'branch': 'release'} " autocomplete/intellisense -Plug 'j5shi/CommandlineComplete.vim' " autocomplete for command mode -Plug 'godlygeek/tabular' " autocomplete for command mode -Plug 'liuchengxu/vim-which-key', { 'on': ['WhichKey', 'WhichKey!'] } " key-binding guide -Plug 'mhinz/vim-startify' - -" Colors -Plug 'jhwheeler/fluidlan-vim' - -" Status line -Plug 'vim-airline/vim-airline' -Plug 'vim-airline/vim-airline-themes' -Plug 'bling/vim-bufferline' - -" Git -Plug 'tpope/vim-fugitive' -Plug 'airblade/vim-gitgutter' -Plug 'rhysd/git-messenger.vim' - -" Fuzzy finder -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -Plug 'junegunn/fzf.vim' -Plug 'airblade/vim-rooter' - -" Session management -Plug 'xolox/vim-misc' -Plug 'xolox/vim-session' - -" Integrated Tmux navigation -Plug 'christoomey/vim-tmux-navigator' - -" Language plugins -Plug 'sheerun/vim-polyglot' -Plug 'fatih/vim-go' -" Plug 'evanleck/vim-svelte' -Plug 'leafOfTree/vim-svelte-plugin' -Plug 'leafgarland/typescript-vim' -Plug 'alx741/vim-rustfmt' -Plug 'mattn/emmet-vim' -Plug 'isRuslan/vim-es6' - -call plug#end() - - -"" Plugin Settings - -"" Netrw -let g:netrw_browse_split=4 -let g:netrw_banner = 0 -let g:netrw_winsize = 25 -let g:netrw_liststyle = 3 -let g:netrw_list_hide=netrw_gitignore#Hide() -" Hide hidden files -let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' - - -"" EasyMotion -map f (easymotion-overwin-f) -map j (easymotion-overwin-line) -map k (easymotion-overwin-line) -map w (easymotion-overwin-w) - -"Jump to anywhere you want with minimal keystrokes, with just one key -"binding. -" `s{char}{char}{label}` -nmap s (easymotion-overwin-f2) - -" Turn on case insensitive feature -let g:EasyMotion_smartcase = 1 - -if executable('rg') - let g:rg_derive_root='true' -endif - -"" Undotree -nnoremap u :UndotreeShow - - -"" Fugitive -" set diffopt+=vertical " vertical diffs -nnoremap gs :vertical Gstatus :vertical resize 50 -nmap gc :Gcommit -nmap gpl :Gpull -nmap gps :Gpush -nmap ga% :G add % -nmap gaa :G add . -nmap gd :Gdiff -nmap gt :G stash -nmap gl :diffget //3 -nmap gh :diffget //2 -nmap ggd :Gdiff master - - -"" Emmet -map ,, , -imap ,, , - - -"" CoC - -" Extensions -let g:coc_global_extensions = [ - \ 'coc-pairs', - \ 'coc-json', - \ 'coc-svelte', - \ 'coc-vimlsp', - \ 'coc-rust-analyzer', - \ 'coc-go', - \ 'coc-emmet', - \ 'coc-html', - \ 'coc-css', - \ 'coc-tsserver', - \ 'coc-explorer', - \ ] - -" Always show the signcolumn, otherwise it would shift the text each time -" diagnostics appear/become resolved. -if has("patch-8.1.1564") - " Recently vim can merge signcolumn and number column into one - set signcolumn=number -else - set signcolumn=yes -endif - -" Use tab for trigger completion with characters ahead and navigate. -" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by -" other plugin before putting this into your config. -inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() -inoremap pumvisible() ? "\" : "\" - -function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction - -" Restart CoC to refresh new settings/extensions -nnoremap cr :CocRestart - -" Show documentation in preview window. -nnoremap K :call show_documentation() - -function! s:show_documentation() - if (index(['vim','help'], &filetype) >= 0) - execute 'h '.expand('') - else - call CocAction('doHover') - endif -endfunction - -" Python path -let g:python3_host_prog = $GLOBALINSTALLDIR . "/usr/bin/python3" - -" Go imports -let g:go_fmt_command = "goimports" -let g:go_auto_type_info = 1 - -" Explorer -nmap e :CocCommand explorer -autocmd BufEnter * if (winnr("$") == 1 && &filetype == 'coc-explorer') | q | endif" - - -"" FZF - -let $FZF_DEFAULT_OPTS = '--layout=reverse --inline-info' - -" Customize fzf colors to match your color scheme -let g:fzf_colors = -\ { 'fg': ['fg', 'Normal'], - \ 'bg': ['bg', 'Normal'], - \ 'hl': ['fg', 'Comment'], - \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], - \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], - \ 'hl+': ['fg', 'Statement'], - \ 'info': ['fg', 'PreProc'], - \ 'border': ['fg', 'Ignore'], - \ 'prompt': ['fg', 'Conditional'], - \ 'pointer': ['fg', 'Exception'], - \ 'marker': ['fg', 'Keyword'], - \ 'spinner': ['fg', 'Label'], - \ 'header': ['fg', 'Comment'] } - -let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.95, 'highlight': 'Comment' } } - -" Search filenames -command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, fzf#vim#with_preview({'options': ['--layout=reverse', '--inline-info']}), 0) - -" Search in files -" --column: Show column number -" --line-number: Show line number -" --no-heading: Do not show file headings in results -" --fixed-strings: Search term as a literal string -" --ignore-case: Case insensitive search -" --no-ignore: Do not respect .gitignore, etc... -" --hidden: Search hidden files and folders -" --follow: Follow symlinks -" --glob: Additional conditions for search (in this case ignore everything in the .git/ folder) -" --color: Search color options -command! -bang -nargs=* FindInFiles - \ call fzf#vim#grep( - \ 'rg --column --line-number --hidden --smart-case --no-heading --color=always --glob "!.git/*" --glob "!node_modules/*" --glob "!*/node_modules/*" --glob "!.jest/*" --glob "!.expo/*" --glob "!__sapper__/*" --glob "!*/__sapper__/*" --glob "!*/bundle/*" --glob "!public/bundle/build.js" '.shellescape(), 1, - \ 0 ? fzf#vim#with_preview({'options': '--delimiter : --nth 4..'}, 'up:60%') - \ : fzf#vim#with_preview({'options': '--delimiter : --nth 4.. -e'}, 'right:50%', '?'), - \ 0) - -" Allows you to put selected items in the quickfix list -function! s:build_quickfix_list(lines) - call setqflist(map(copy(a:lines), '{ "filename": v:val }')) - copen - cc -endfunction - -let g:fzf_action = { - \ 'ctrl-q': function('s:build_quickfix_list'), - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit' } - -function! QuickFixOpenAll() - if empty(getqflist()) - return - endif - let s:prev_val = "" - for d in getqflist() - let s:curr_val = bufname(d.bufnr) - if (s:curr_val != s:prev_val) - exec "edit " . s:curr_val - endif - let s:prev_val = s:curr_val - endfor -endfunction - -nnoremap oqf :call QuickFixOpenAll() - -nnoremap go :GCheckout -" let g:fzf_checkout_track_key = 'ctrl-t' -let g:fzf_checkout_git_options = '--sort=-committerdate' - -" Maps (s is for search) -nnoremap s/ :History/ -nnoremap s: :History: -nnoremap s; :Commands -nnoremap sa :Ag -nnoremap sb :BLines -nnoremap sB :Buffers -nnoremap sc :Commits -nnoremap sC :BCommits -nnoremap sf :Files -nnoremap sg :GFiles? -nnoremap sh :Helptags -nnoremap sH :History -nnoremap si :FindInFiles -nnoremap sl :Lines -nnoremap sm :Marks -nnoremap sM :Maps -nnoremap ss :Snippets -nnoremap sS :Colors -nnoremap st :Tags -nnoremap st :BTags -nnoremap sy :Filetypes - - - -"" AsyncRun -let g:asyncrun_open = 8 -nnoremap r :AsyncRun -" Allow vim fugitive commands to be wrapped w/ AsyncRun -command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ - -"" Airline -let g:bufferline_echo = 0 -autocmd VimEnter * - \ let &statusline='%{bufferline#refresh_status()}' - \ .bufferline#get_status_string() -let g:airline_theme='violet' -" For GitGutter integration -let g:airline#extensions#hunks#non_zero_only = 1 - - -"" WhichKey - -" Show on leader -nnoremap :WhichKey '' - -" Only wait half a second before showing window -set timeoutlen=500 - -" Show keys in small floating window -let g:which_key_use_floating_win = 1 - -" Register Which Key map -" call which_key#register('', "g:which_key_map") -autocmd! User vim-which-key call which_key#register('', 'g:which_key_map') - -" Define prefix dictionary -let g:which_key_map = {} -" Define a separator -" let g:which_key_sep = '→' - -" Single Mappings -let g:which_key_map['e'] = [ ':CocCommand explorer' , 'explorer' ] -let g:which_key_map['r'] = [ ':AsyncRun' , 'async run' ] - -" b is for buffer -let g:which_key_map.b = { - \ 'name': '+buffer', - \ 'd': [':bd' , 'delete buffer'], - \ 'da': 'close all buffers except the current one', - \ } - -" v is for vim -let g:which_key_map.v = { - \ 'name': '+vim', - \ 'e': [':e ~/.vimrc' , 'edit vimrc'], - \ 'v': [':vsp ~/.vimrc' , 'edit vimrc (vertical split)'], - \ 's': [':source ~/.vimrc' , 'source vimrc'], - \ 'p': [':vsp ~/.vim/plugins.vim' , 'edit plugins config'], - \ 'm': [':vsp ~/.vim/maps.vim' , 'edit mapping config'], - \ } - -" g is for git -let g:which_key_map.g = { - \ 'name': '+git', - \ 's': [':Gstatus' , 'git status'], - \ 'c': [':Gcommit' , 'git commit'], - \ 't': [':G stash' , 'git stash'], - \ 'pl': [':Gpull' , 'git pull'], - \ 'ps': [':Gpush' , 'git push'], - \ 'a%': [':G add %' , 'git add %'], - \ 'a.': [':G add .' , 'git add .'], - \ } - -" s is for search -let g:which_key_map.s = { - \ 'name': '+search', - \ '/': [':History/' , 'history'], - \ ':': [':History:' , 'command history'], - \ ';': [':Commands' , 'commands'], - \ 'b': [':BLines' , 'current buffer'], - \ 'B': [':Buffers' , 'open buffers'], - \ 'c': [':Commits' , 'commits'], - \ 'C': [':BCommits' , 'buffer commits'], - \ 'f': [':Files' , 'files'], - \ 'g': [':GFiles?' , 'modified git files'], - \ 'h': [':Helptags' , 'help tags'] , - \ 'H': [':History' , 'file history'], - \ 'i': [':FindInFiles' , 'find in files'], - \ 'l': [':Lines' , 'lines'] , - \ 'm': [':Marks' , 'marks'] , - \ 'M': [':Maps' , 'normal maps'] , - \ 's': [':Snippets' , 'snippets'], - \ 'S': [':Colors' , 'color schemes'], - \ 't': [':Tags' , 'project tags'], - \ 'T': [':BTags' , 'buffer tags'], - \ 'y': [':Filetypes' , 'file types'], - \ } - -" t is for tools -let g:which_key_map.t = { - \ 'name': '+tools', - \ 's': [':%s/' , 'prefill substitute'], - \ } - - -"" Session -set sessionoptions-=buffers -set sessionoptions-=help -let g:session_autosave='yes' -let g:session_autoload='no' -let g:session_default_to_last='no' -let g:session_command_aliases = 1 - - -"" rustfmt -let g:rustfmt_on_save = 1 -let g:rustfmt_backup = 0 - - -"" Goyo -let g:goyo_height='100%' -let g:goyo_width=85 - - -"" GitGutter -nmap ]h (GitGutterNextHunk) -nmap [h (GitGutterPrevHunk) - - -"" Startify - -" Save sessions -let g:startify_session_dir = '~/.vim/session' - -" Like vim rooter -let g:startify_change_to_vcs_root = 1 - -" Automatically save sessions -let g:startify_session_persistence = 1 - -" Get rid of empty buffer on quit -let g:startify_enable_special = 0 - -" Skip these files in the start menu -let g:startify_skiplist = [ - \ 'COMMIT_EDITMSG', - \ '.git', - \ '^/tmp', - \ ] - -" Returns all modified files of the current git repo -" `2>/dev/null` makes the command fail quietly, so that when we are not -" in a git repo, the list will be empty -function! s:gitModified() - let files = systemlist('git ls-files -m 2>/dev/null') - return map(files, "{'line': v:val, 'path': v:val}") -endfunction - -" same as above, but show untracked files, honouring .gitignore -function! s:gitUntracked() - let files = systemlist('git ls-files -o --exclude-standard 2>/dev/null') - return map(files, "{'line': v:val, 'path': v:val}") -endfunction - -let g:startify_lists = [ - \ { 'type': 'files', 'header': [' Recent'] }, - \ { 'type': function('s:gitModified'), 'header': [' Git modified']}, - \ { 'type': function('s:gitUntracked'), 'header': [' Git untracked']}, - \ { 'type': 'sessions', 'header': [' Sessions'] }, - \ { 'type': 'dir', 'header': [' Current'. getcwd()] }, - \ { 'type': 'bookmarks', 'header': [' Bookmarks'] }, - \ { 'type': 'commands', 'header': [' Commands'] }, - \ ] - - -let g:startify_commands = [ - \ ['Vim Reference', 'h ref'], - \ ] - -let g:startify_bookmarks = [ - \ '~/Projects/', - \ '~/Projects/dotfiles', - \ ] - -let g:startify_custom_header = [ - \ ' __ _ _ _ _ ', - \ ' / _| | (_) | | | ', - \ ' | |_| |_ _ _ __| | | __ _ _ __ ', - \ ' | _| | | | | |/ _` | |/ _` | `_ \ ', - \ ' | | | | |_| | | (_| | | (_| | | | |', - \ ' |_| |_|\__,_|_|\__,_|_|\__,_|_| |_|', - \] diff --git a/vim/spell/en.utf-8.add b/vim/spell/en.utf-8.add deleted file mode 100644 index e74316a..0000000 --- a/vim/spell/en.utf-8.add +++ /dev/null @@ -1,15 +0,0 @@ -subpages -screenshot -sortings -IIRC -metadata -popup -lifecycle -S3 -DynamoDB -CloudFormation -EBS -EC2 -w -AWS -Fargate diff --git a/vim/spell/en.utf-8.add.spl b/vim/spell/en.utf-8.add.spl deleted file mode 100644 index ed1e1ef..0000000 Binary files a/vim/spell/en.utf-8.add.spl and /dev/null differ diff --git a/vim/vimrc b/vim/vimrc deleted file mode 100644 index ce3bd1d..0000000 --- a/vim/vimrc +++ /dev/null @@ -1,79 +0,0 @@ -" Source custom mappings and plugins from ~/.vim -runtime maps.vim -runtime plugins.vim - -syntax on " syntax highlighting - -filetype plugin indent on " filetype detection - -set hidden " open new buffers without saving the current one -set noerrorbells " silence error bells -set expandtab " tabs are spaces -set tabstop=2 softtabstop=2 " two space indent -set shiftwidth=2 " two space shift -set ignorecase " ignore case by default... -set smartcase " ...but respect case once you use uppercase letters -set history=3000 " save command history -set encoding=utf8 " support unicode -set colorcolumn=0 " don't highlight columns -set noshowmode " hide mode (airline shows it already) -set synmaxcol=0 " don't limit syntax highlighting -set mouse=a " allow the mouse -set autoread " Autoread when file is changed from outside of vim -set foldmethod=marker " Default foldmethod - -" See both current line number and relative numbers above/below -set number -set relativenumber - -" Better defaults for splits -set splitbelow -set splitright - -" Undo to you heart's content -set undolevels=1000 -set undofile -set undodir=~/.vim/undodir - -" You don't need swap files or backups if you have an undodir and Git -set noswapfile -set nobackup -set nowritebackup - -" Wildmenu settings; see also plugin/wildignore.vim -set wildmenu " Use wildmenu -set wildmode=list:longest " Tab press completes and lists -silent! set wildignorecase " Case insensitive, if supported - -" Highlight searches; clear on reload -set hlsearch -set incsearch -if 1 - nohlsearch -endif - -" Don't show startup splash screen -set shortmess+=I -" Don't pass messages to |ins-completion-menu|. -set shortmess+=c - -" Give more space for displaying messages -set cmdheight=2 - -" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable -" delays and poor user experience. -set updatetime=50 - -highlight clear SignColumn - -" Wrap text in diffs -au VimEnter * if &diff | execute 'windo set wrap' | endif - - -"" Colors -colorscheme fluidlan - -set termguicolors -hi Normal ctermbg=NONE guibg=NONE -hi LineNr ctermbg=NONE guibg=NONE -hi SignColumn ctermbg=NONE guibg=NONE diff --git a/waybar/config.jsonc b/waybar/config.jsonc new file mode 100644 index 0000000..26d9736 --- /dev/null +++ b/waybar/config.jsonc @@ -0,0 +1,117 @@ +{ + "layer": "top", + "position": "top", + "mod": "dock", + "exclusive": true, + "passthrough": false, + "gtk-layer-shell": true, + "height": 40, + "modules-left": ["clock", "hyprland/workspaces"], + "modules-center": ["hyprland/window"], + "modules-right": ["network", "bluetooth", "temperature","custom/power_profile","battery","backlight","pulseaudio","pulseaudio#microphone", "tray"], + "hyprland/window": { + "format": "{}" + }, + + "custom/power_profile":{ + //shows the current power profile and switches to next on click + "exec": "asusctl profile -p | sed s:'Active profile is'::", + "interval": 30, + "format": "󰈐{}", + "on-click": "asusctl profile -n; pkill -SIGRTMIN+8 waybar", + "signal": 8 + }, + + "tray": { + "icon-size": 18, + "spacing": 10 + }, + + "clock": { + "format": "{:%H:%M:%S (%Z) %Y-%m-%d}", + "interval": 1, + "tooltip-format": "{tz_list}", + "timezones": [ + "Asia/Hong_Kong", + "America/Los_Angeles", + "America/Phoenix", + "America/New_York", + "Etc/UTC", + "Europe/Sofia" + ] + }, + "backlight": { + "device": "intel_backlight", + "format": "{icon} {percent}%", + "format-icons": ["󰃞", "󰃟", "󰃠"], + "on-scroll-up": "brightnessctl set 1%+", + "on-scroll-down": "brightnessctl set 1%-", + "min-length": 6 + }, + + "battery": { + "states": { + "good": 95, + "warning": 30, + "critical": 20 + }, + "format": "{icon} {capacity}%", + "format-charging": " {capacity}%", + "format-plugged": " {capacity}%", + "format-alt": "{time} {icon}", + "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"] + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "tooltip": false, + "format-muted": " Muted", + "on-click": "pamixer -t", + "on-scroll-up": "pamixer --allow-boost -i 5", + "on-scroll-down": "pamixer --allow-boost -d 5", + "scroll-step": 5, + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + } + }, + + "pulseaudio#microphone": { + "format": "{format_source}", + "format-source": " {volume}%", + "format-source-muted": " Muted", + "on-click": "pamixer --default-source -t", + "on-scroll-up": "pamixer --default-source -i 5", + "on-scroll-down": "pamixer --default-source -d 5", + "scroll-step": 5 + }, + + "temperature": { + "thermal-zone": 1, + "format": "{temperatureC}°C ", + "critical-threshold": 80, + }, + + "network": { + "format-wifi": " {signalStrength}%", + "format-ethernet": "{ipaddr}/{cidr}", + "tooltip-format": "{essid} - {ifname} via {gwaddr}", + "format-linked": "{ifname} (No IP)", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}:{essid} {ipaddr}/{cidr}" + }, + + "bluetooth": { + "format": " {status}", + "format-disabled": "", // an empty format will hide the module + "format-connected": " {num_connections}", + "tooltip-format": "{device_alias}", + "tooltip-format-connected": " {device_enumerate}", + "tooltip-format-enumerate-connected": "{device_alias}" + } +} diff --git a/waybar/scripts/waybar-wttr.py b/waybar/scripts/waybar-wttr.py new file mode 100755 index 0000000..38f1e88 --- /dev/null +++ b/waybar/scripts/waybar-wttr.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +import json +import requests +from datetime import datetime + +WEATHER_CODES = { + '113': '☀️ ', + '116': '⛅ ', + '119': '☁️ ', + '122': '☁️ ', + '143': '☁️ ', + '176': '🌧️', + '179': '🌧️', + '182': '🌧️', + '185': '🌧️', + '200': '⛈️ ', + '227': '🌨️', + '230': '🌨️', + '248': '☁️ ', + '260': '☁️ ', + '263': '🌧️', + '266': '🌧️', + '281': '🌧️', + '284': '🌧️', + '293': '🌧️', + '296': '🌧️', + '299': '🌧️', + '302': '🌧️', + '305': '🌧️', + '308': '🌧️', + '311': '🌧️', + '314': '🌧️', + '317': '🌧️', + '320': '🌨️', + '323': '🌨️', + '326': '🌨️', + '329': '❄️ ', + '332': '❄️ ', + '335': '❄️ ', + '338': '❄️ ', + '350': '🌧️', + '353': '🌧️', + '356': '🌧️', + '359': '🌧️', + '362': '🌧️', + '365': '🌧️', + '368': '🌧️', + '371': '❄️', + '374': '🌨️', + '377': '🌨️', + '386': '🌨️', + '389': '🌨️', + '392': '🌧️', + '395': '❄️ ' +} + +data = {} + + +weather = requests.get("https://wttr.in/?format=j1").json() + + +def format_time(time): + return time.replace("00", "").zfill(2) + + +def format_temp(temp): + return (hour['FeelsLikeF']+"°").ljust(3) + + +def format_chances(hour): + chances = { + "chanceoffog": "Fog", + "chanceoffrost": "Frost", + "chanceofovercast": "Overcast", + "chanceofrain": "Rain", + "chanceofsnow": "Snow", + "chanceofsunshine": "Sunshine", + "chanceofthunder": "Thunder", + "chanceofwindy": "Wind" + } + + conditions = [] + for event in chances.keys(): + if int(hour[event]) > 0: + conditions.append(chances[event]+" "+hour[event]+"%") + return ", ".join(conditions) + +tempint = int(weather['current_condition'][0]['FeelsLikeF']) +extrachar = '' +if tempint > 0 and tempint < 10: + extrachar = '+' + + +data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \ + " "+extrachar+weather['current_condition'][0]['FeelsLikeF']+"°" + +data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_F']}°\n" +data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeF']}°\n" +data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n" +data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" +for i, day in enumerate(weather['weather']): + data['tooltip'] += f"\n" + if i == 0: + data['tooltip'] += "Today, " + if i == 1: + data['tooltip'] += "Tomorrow, " + data['tooltip'] += f"{day['date']}\n" + data['tooltip'] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° " + data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n" + for hour in day['hourly']: + if i == 0: + if int(format_time(hour['time'])) < datetime.now().hour-2: + continue + data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n" + + +print(json.dumps(data)) diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..4098df0 --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,153 @@ +* { + border: none; + border-radius: 0; + font-family: "JetBrainsMono Nerd Font"; + font-weight: bold; + font-size: 16px; + min-height: 0; +} + +window#waybar { + background: rgba(21, 18, 27, 0); + color: #cdd6f4; +} + +tooltip { + background: #1e1e2e; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #11111b; +} + +#workspaces button { + padding: 5px; + color: #313244; + margin-right: 5px; +} + +#workspaces button.active { + color: #a6adc8; +} + +#workspaces button.focused { + color: #a6adc8; + background: #eba0ac; + border-radius: 10px; +} + +#workspaces button.urgent { + color: #11111b; + background: #a6e3a1; + border-radius: 10px; +} + +#workspaces button:hover { + background: #11111b; + color: #cdd6f4; + border-radius: 10px; +} + +#custom-power_profile, +#custom-weather, +#window, +#clock, +#battery, +#pulseaudio, +#network, +#bluetooth, +#temperature, +#workspaces, +#tray, +#backlight { + background: #1e1e2e; + opacity: 0.8; + padding: 0px 10px; + margin: 3px 0px; + margin-top: 10px; + border: 1px solid #181825; +} + +#temperature { + border-radius: 10px 0px 0px 10px; +} + +#temperature.critical { + color: #eba0ac; +} + +#backlight { + border-radius: 10px 0px 0px 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} + +#workspaces { + background: #1e1e2e; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; +} + +#custom-power_profile { + color: #a6e3a1; + border-left: 0px; + border-right: 0px; +} + +#window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; +} + +#clock { + color: #fab387; + border-radius: 10px 0px 0px 10px; + margin-left: 10px; + border-right: 0px; +} + +#network { + color: #f9e2af; + border-radius: 10px 0px 0px 10px; + border-left: 0px; + border-right: 0px; +} + +#bluetooth { + color: #89b4fa; + border-radius: 0px 10px 10px 0px; + margin-right: 10px +} + +#pulseaudio { + color: #89b4fa; + border-left: 0px; + border-right: 0px; +} + +#pulseaudio.microphone { + color: #cba6f7; + border-left: 0px; + border-right: 0px; + border-radius: 0px 10px 10px 0px; + margin-right: 10px; +} + +#battery { + color: #a6e3a1; + border-radius: 0 10px 10px 0; + margin-right: 10px; + border-left: 0px; +} + +#custom-weather { + border-radius: 0px 10px 10px 0px; + border-right: 0px; + margin-left: 0px; +}