{"id":13593528,"url":"https://github.com/noborus/ov","last_synced_at":"2026-02-20T05:01:59.253Z","repository":{"id":37777024,"uuid":"249098588","full_name":"noborus/ov","owner":"noborus","description":"🎑Feature-rich terminal-based text viewer.  It is a so-called terminal pager.","archived":false,"fork":false,"pushed_at":"2026-02-14T03:50:18.000Z","size":12845,"stargazers_count":1878,"open_issues_count":28,"forks_count":41,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-02-14T07:22:05.657Z","etag":null,"topics":["cli","command-line","command-line-tool","go","golang","incremental-search","less","more","pager","tail","tcell","terminal","terminal-pager","tui"],"latest_commit_sha":null,"homepage":"https://noborus.github.io/ov","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/noborus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"noborus"}},"created_at":"2020-03-22T02:27:32.000Z","updated_at":"2026-02-14T03:50:22.000Z","dependencies_parsed_at":"2023-10-23T02:33:00.607Z","dependency_job_id":"5683fc44-ca0d-48b2-9186-067f5ded04fe","html_url":"https://github.com/noborus/ov","commit_stats":{"total_commits":1186,"total_committers":21,"mean_commits":"56.476190476190474","dds":"0.031197301854974713","last_synced_commit":"1990228c56ad09b531582f2243d5b6ad5fd62975"},"previous_names":["noborus/zpager","noborus/oviewer"],"tags_count":84,"template":false,"template_full_name":null,"purl":"pkg:github/noborus/ov","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noborus%2Fov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noborus%2Fov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noborus%2Fov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noborus%2Fov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noborus","download_url":"https://codeload.github.com/noborus/ov/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noborus%2Fov/sbom","scorecard":{"id":4261,"data":{"date":"2025-08-04","repo":{"name":"github.com/noborus/ov","commit":"41e0e9fda0acf998c5435e6ce13c424e91ff450c"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":4.9,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/build.yml:3","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:3","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/noborus/ov/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/noborus/ov/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/noborus/ov/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/noborus/ov/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/noborus/ov/release.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.42.1 not signed: https://api.github.com/repos/noborus/ov/releases/229561262","Warn: release artifact v0.42.0 not signed: https://api.github.com/repos/noborus/ov/releases/227503724","Warn: release artifact v0.41.0 not signed: https://api.github.com/repos/noborus/ov/releases/219330716","Warn: release artifact v0.40.1 not signed: https://api.github.com/repos/noborus/ov/releases/212367622","Warn: release artifact v0.40.0 not signed: https://api.github.com/repos/noborus/ov/releases/212002094","Warn: release artifact v0.42.1 does not have provenance: https://api.github.com/repos/noborus/ov/releases/229561262","Warn: release artifact v0.42.0 does not have provenance: https://api.github.com/repos/noborus/ov/releases/227503724","Warn: release artifact v0.41.0 does not have provenance: https://api.github.com/repos/noborus/ov/releases/219330716","Warn: release artifact v0.40.1 does not have provenance: https://api.github.com/repos/noborus/ov/releases/212367622","Warn: release artifact v0.40.0 does not have provenance: https://api.github.com/repos/noborus/ov/releases/212002094"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T13:12:42.949Z","repository_id":37777024,"created_at":"2025-08-14T13:12:42.950Z","updated_at":"2025-08-14T13:12:42.950Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29641929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T03:21:14.183Z","status":"ssl_error","status_checked_at":"2026-02-20T03:18:24.455Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","command-line-tool","go","golang","incremental-search","less","more","pager","tail","tcell","terminal","terminal-pager","tui"],"created_at":"2024-08-01T16:01:21.242Z","updated_at":"2026-02-20T05:01:59.243Z","avatar_url":"https://github.com/noborus.png","language":"Go","readme":"# ov - feature rich terminal pager\n\n\u003c!-- markdownlint-disable MD019 MD029 MD033 MD036 MD060 --\u003e\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/noborus/ov)](https://pkg.go.dev/github.com/noborus/ov)\n[![Actions Status](https://github.com/noborus/ov/workflows/Go/badge.svg)](https://github.com/noborus/ov/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/noborus/ov)](https://goreportcard.com/report/github.com/noborus/ov)\n\nov is a terminal pager.\n\n![ov-image.png](./docs/ov-image.png)\n\n\u003c!-- vscode-markdown-toc --\u003e\n* 1. [Feature](#feature)\n  * 1.1. [Not supported](#not-supported)\n* 2. [Install](#install)\n  * 2.1. [deb package](#deb-package)\n  * 2.2. [rpm package](#rpm-package)\n  * 2.3. [MacPorts (macOS)](#macports-(macos))\n  * 2.4. [Homebrew(macOS or Linux)](#homebrew(macos-or-linux))\n  * 2.5. [winget(windows)](#winget(windows))\n  * 2.6. [pkg (FreeBSD)](#pkg-(freebsd))\n  * 2.7. [Arch Linux](#arch-linux)\n  * 2.8. [nix (nixOS, Linux, or macOS)](#nix-(nixos,-linux,-or-macos))\n  * 2.9. [Binary](#binary)\n  * 2.10. [go install](#go-install)\n  * 2.11. [Build from source](#build-from-source)\n  * 2.12. [Completion](#completion)\n    * 2.12.1. [bash](#bash)\n    * 2.12.2. [zsh](#zsh)\n    * 2.12.3. [fish](#fish)\n    * 2.12.4. [powershell](#powershell)\n* 3. [Basic usage](#basic-usage)\n* 4. [Usage](#usage)\n  * 4.1. [Config](#config)\n  * 4.2. [Header](#header)\n    * 4.2.1. [Skip](#skip)\n  * 4.3. [Vertical Header](#vertical-header)\n  * 4.4. [Column mode](#column-mode)\n  * 4.5. [Header Column](#header-column)\n  * 4.6. [Column rainbow mode](#column-rainbow-mode)\n  * 4.7. [Column width](#column-width)\n  * 4.8. [Wrap/NoWrap](#wrap/nowrap)\n  * 4.9. [Alternate-Rows](#alternate-rows)\n  * 4.10. [Sidebar](#sidebar)\n  * 4.11. [Section](#section)\n    * 4.11.1. [section example](#section-example)\n    * 4.11.2. [hide other sections](#hide-other-sections)\n  * 4.12. [Multiple files](#multiple-files)\n  * 4.13. [Follow mode](#follow-mode)\n    * 4.13.1. [Follow name](#follow-name)\n    * 4.13.2. [Follow all mode](#follow-all-mode)\n    * 4.13.3. [Follow section mode](#follow-section-mode)\n    * 4.13.4. [Sticky Follow](#sticky-follow)\n  * 4.14. [Exec mode](#exec-mode)\n  * 4.15. [Search](#search)\n    * 4.15.1. [Pattern](#pattern)\n    * 4.15.2. [Filter](#filter)\n  * 4.16. [Caption](#caption)\n  * 4.17. [Mark](#mark)\n  * 4.18. [Watch](#watch)\n  * 4.19. [Mouse support](#mouse-support)\n    * 4.19.1. [Text Selection](#text-selection)\n    * 4.19.2. [Wheel scroll](#wheel-scroll)\n    * 4.19.3. [Scroll Amount Configuration](#scroll-amount-configuration)\n    * 4.19.4. [Anchor and Extend Selection](#anchor-and-extend-selection)\n  * 4.20. [Multi color highlight](#multi-color-highlight)\n  * 4.21. [Plain](#plain)\n  * 4.22. [Converter](#converter)\n  * 4.23. [Align](#align)\n    * 4.23.1. [Shrink](#shrink)\n    * 4.23.2. [Right Align](#right-align)\n  * 4.24. [Jump target](#jump-target)\n  * 4.25. [View mode](#view-mode)\n    * 4.25.1. [List View Modes](#list-view-modes)\n  * 4.26. [Output on exit](#output-on-exit)\n  * 4.27. [Quit if one screen](#quit-if-one-screen)\n  * 4.28. [Suspend](#suspend)\n  * 4.29. [Edit](#edit)\n  * 4.30. [Save](#save)\n  * 4.31. [Ruler](#ruler)\n  * 4.32. [Redirect Output](#redirect-output)\n* 5. [How to reduce memory usage](#how-to-reduce-memory-usage)\n  * 5.1. [Regular file (seekable)](#regular-file-(seekable))\n  * 5.2. [Other files, pipes(Non-seekable)](#other-files,-pipes(non-seekable))\n* 6. [Command option](#command-option)\n* 7. [Key bindings](#key-bindings)\n  * 7.1. [Ctrl key and corresponding key pairs (commonly treated as the same in terminals)](#ctrl-key-and-corresponding-key-pairs-(commonly-treated-as-the-same-in-terminals))\n* 8. [Customize](#customize)\n  * 8.1. [Style customization](#style-customization)\n    * 8.1.1. [UnderlineStyle](#underlinestyle)\n  * 8.2. [Customizing the bottom status line](#customizing-the-bottom-status-line)\n    * 8.2.1. [Customizing LeftStatus and RightStatus styles](#customizing-leftstatus-and-rightstatus-styles)\n  * 8.3. [Terminal Title](#terminal-title)\n    * 8.3.1. [Command line usage](#command-line-usage)\n    * 8.3.2. [Configuration file](#configuration-file)\n    * 8.3.3. [Custom terminal title](#custom-terminal-title)\n  * 8.4. [Help and Log Documentation customization](#help-and-log-documentation-customization)\n  * 8.5. [Key binding customization](#key-binding-customization)\n  * 8.6. [General configuration](#general-configuration)\n* 9. [VS](#vs)\n* 10. [Work together](#work-together)\n* 11. [Contributing](#contributing)\n\n\u003c!-- vscode-markdown-toc-config\n\tnumbering=true\n\tautoSave=true\n\t/vscode-markdown-toc-config --\u003e\n\u003c!-- /vscode-markdown-toc --\u003e\n\n##  1. \u003ca name='feature'\u003e\u003c/a\u003eFeature\n\n* Quickly opens files larger than memory.\n* Supports fixed header lines and columns.\n* Optimized for tabular text with column mode and customizable column colors.\n* Fully customizable shortcut keys and styles.\n* Follow mode for real-time updates (like `tail -f` / `tail -F`).\n* Exec mode to display command output dynamically.\n* Watch mode to monitor file changes periodically.\n* Advanced search: incremental, regex, and filter functions.\n* Multi-color highlighting for multiple words.\n* Supports Unicode and East Asian Width characters.\n* Handles compressed files (gzip, bzip2, zstd, lz4, xz).\n\n###  1.1. \u003ca name='not-supported'\u003e\u003c/a\u003eNot supported\n\n* Does not support syntax highlighting for file types (source code, markdown, etc.)\n\n##  2. \u003ca name='install'\u003e\u003c/a\u003eInstall\n\n###  2.1. \u003ca name='deb-package'\u003e\u003c/a\u003edeb package\n\nYou can download the package from [releases](https://github.com/noborus/ov/releases).\n\n```console\ncurl -L -O https://github.com/noborus/ov/releases/download/vx.x.x/ov_x.x.x-1_amd64.deb\nsudo dpkg -i ov_x.x.x-1_amd64.deb\n```\n\n###  2.2. \u003ca name='rpm-package'\u003e\u003c/a\u003erpm package\n\nYou can download the package from [releases](https://github.com/noborus/ov/releases).\n\n```console\nsudo rpm -ivh https://github.com/noborus/ov/releases/download/vx.x.x/ov_x.x.x-1_amd64.rpm\n```\n\n###  2.3. \u003ca name='macports-(macos)'\u003e\u003c/a\u003eMacPorts (macOS)\n\n```console\nsudo port install ov\n```\n\n###  2.4. \u003ca name='homebrew(macos-or-linux)'\u003e\u003c/a\u003eHomebrew(macOS or Linux)\n\n```console\nbrew install ov\n```\n\n###  2.5. \u003ca name='winget(windows)'\u003e\u003c/a\u003ewinget(windows)\n\n```console\nwinget install -e --id noborus.ov\n```\n\n###  2.6. \u003ca name='pkg-(freebsd)'\u003e\u003c/a\u003epkg (FreeBSD)\n\n```console\npkg install ov\n```\n\n###  2.7. \u003ca name='arch-linux'\u003e\u003c/a\u003eArch Linux\n\nYou can install ov using an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers).\n\nChoose an AUR package:\n\n* [https://aur.archlinux.org/packages/ov](https://aur.archlinux.org/packages/ov) (build and install from latest stable source)\n* [https://aur.archlinux.org/packages/ov-bin](https://aur.archlinux.org/packages/ov-bin) (install pre-compiled binary)\n* [https://aur.archlinux.org/packages/ov-git](https://aur.archlinux.org/packages/ov-git) (build and install from latest git commit)\n\n###  2.8. \u003ca name='nix-(nixos,-linux,-or-macos)'\u003e\u003c/a\u003enix (nixOS, Linux, or macOS)\n\nov is available as a nix package. You can install it with\n\n```console\nnix profile install nixpkgs#ov\n```\n\nif you use flakes, or using nix-env otherwise:\n\n```console\nnix-env -iA nixpkgs.ov\n```\n\n###  2.9. \u003ca name='binary'\u003e\u003c/a\u003eBinary\n\nYou can download the binary from [releases](https://github.com/noborus/ov/releases).\n\n```console\ncurl -L -O https://github.com/noborus/ov/releases/download/vx.x.x/ov_x.x.x_linux_amd64.zip\nunzip ov_x.x.x_linux_amd64.zip\nsudo install ov /usr/local/bin\n```\n\n###  2.10. \u003ca name='go-install'\u003e\u003c/a\u003ego install\n\nIt will be installed in $GOPATH/bin by the following command.\n\n```console\ngo install github.com/noborus/ov@latest\n```\n\nOr to install the latest commit from master:\n\n```console\ngo install github.com/noborus/ov@master\n```\n\n###  2.11. \u003ca name='build-from-source'\u003e\u003c/a\u003eBuild from source\n\nFirst of all, clone this repo with either `git clone` or `gh repo clone`, then `cd` to the directory, for example:\n\n```console\ngit clone https://github.com/noborus/ov.git\ncd ov\n```\n\nNext, to install to $GOPATH/bin, run the make install command.\n\n```console\nmake install\n```\n\nOr, install it in a PATH location for other users to use\n(For example, in /usr/local/bin).\n\n```console\nmake\nsudo install ov /usr/local/bin\n```\n\n###  2.12. \u003ca name='completion'\u003e\u003c/a\u003eCompletion\n\nYou can generate completion scripts for bash, zsh, fish, and powershell.\n\n####  2.12.1. \u003ca name='bash'\u003e\u003c/a\u003ebash\n\n```console\nov --completion bash \u003e /etc/bash_completion.d/ov\n```\n\n####  2.12.2. \u003ca name='zsh'\u003e\u003c/a\u003ezsh\n\n```console\nov --completion zsh \u003e /usr/share/zsh/site-functions/_ov\n```\n\nFor zinit users.\n\n```console\nzinit load 'https://github.com/noborus/ov/blob/master/ov.plugin.zsh'\n```\n\n####  2.12.3. \u003ca name='fish'\u003e\u003c/a\u003efish\n\n```console\nov --completion fish \u003e ~/.config/fish/completions/ov.fish\n```\n\n####  2.12.4. \u003ca name='powershell'\u003e\u003c/a\u003epowershell\n\n```console\nov --completion powershell completion powershell | Out-String | Invoke-Expression\n```\n\n##  3. \u003ca name='basic-usage'\u003e\u003c/a\u003eBasic usage\n\nov supports open file name or standard input.\n\n```console\nov filename\n```\n\n```console\ncat filename|ov\n```\n\nUsed by other commands by setting the environment variable **PAGER**.\n\n```console\nexport PAGER=ov\n```\n\n##  4. \u003ca name='usage'\u003e\u003c/a\u003eUsage\n\nSee the [ov site](https://noborus.github.io/ov/) for more use cases and examples.\n\n\u003e [!NOTE]\n\u003e (default key `key`) indicates the key that can be specified even after starting the same function as the command line option.\n\n###  4.1. \u003ca name='config'\u003e\u003c/a\u003eConfig\n\nYou can set style and key bindings in the configuration file.\n\nov will look for a configuration file in the following paths in descending order:\n\n```filepath\n$XDG_CONFIG_HOME/ov/config.yaml\n$HOME/.config/ov/config.yaml\n$HOME/.ov.yaml\n```\n\nOn Windows:\n\n```filepath\n%USERPROFILE%/.config/ov/config.yaml\n%USERPROFILE%/.ov.yaml\n```\n\nCreate a `config.yaml` file in one of the above directories. If the file is in the user home directory, it should be named `.ov.yaml`.\n\nPlease refer to the sample [ov.yaml](https://raw.githubusercontent.com/noborus/ov/master/ov.yaml) configuration file.\n\n\u003e [!NOTE]\n\u003e If you like `less` key bindings, copy  [ov-less.yaml](https://raw.githubusercontent.com/noborus/ov/master/ov-less.yaml) and use it.\n\n###  4.2. \u003ca name='header'\u003e\u003c/a\u003eHeader\n\nThe `--header` (`-H`) (default key `H`) option fixedly displays the specified number of lines.\n\n```console\nov --header 1 README.md\n```\n\n[Related styling](#style-customization): `Header` and `HeaderBorder`.\n\n####  4.2.1. \u003ca name='skip'\u003e\u003c/a\u003eSkip\n\nWhen used with the `--skip-lines` (default key `ctrl+s`) option, it hides the number of lines specified by skip and then displays the header.\n\n```console\nov --skip-lines 1 --header 1 README.md\n```\n\n###  4.3. \u003ca name='vertical-header'\u003e\u003c/a\u003eVertical Header\n\nThe `--vertical-header` (`-y`) (default key `y`) option fixedly displays the specified number of characters.\n\n```console\nov --vertical-header=4 README.md\n```\n\nIf you want to specify by column instead of character, see [Header Column](#header-column).\n\n[Related styling](#style-customization): `VerticalHeader` and `VerticalHeaderBorder`.\n\n###  4.4. \u003ca name='column-mode'\u003e\u003c/a\u003eColumn mode\n\nSpecify the delimiter with `--column-delimiter`(default key is `d`) and set it to `--column-mode`(default key is `c`) to highlight the column.\n\n```console\nov --column-delimiter \",\" --column-mode test.csv\n```\n\nRegular expressions can be used for the `--column-delimiter`.\nEnclose in '/' when using regular expressions.\n\n\u003e [!TIP]\n\u003e Use regex delimiters like `/\\s+/` for variable whitespace or `/[,;]/` for multiple delimiter characters.\n\n```console\nps aux | ov -H1 --column-delimiter \"/\\s+/\" --column-rainbow --column-mode\n```\n\n[Related styling](#style-customization): `ColumnHighlight`,`ColumnRainbow`.\n\n###  4.5. \u003ca name='header-column'\u003e\u003c/a\u003eHeader Column\n\nThe `--header-column` (`-Y`) (default key is `Y`) option fixedly displays the specified number of columns when `column-mode` is enabled.\n\n```console\nov --column-mode --column-delimiter=\",\" --header-column=2 test.csv\n```\n\nWhen in column-mode, pressing `F` will switch to fixed display for the selected columns up to that point.\n\n[Related styling](#style-customization): `VerticalHeader` and `VerticalHeaderBorder`.\n\n###  4.6. \u003ca name='column-rainbow-mode'\u003e\u003c/a\u003eColumn rainbow mode\n\nYou can also color each column individually in column mode.\nSpecify `--column-rainbow`(default key is `ctrl+r`) in addition to the `--column-mode` option.\n\nColor customization is possible. Please specify 7 or more colors in `config.yaml`.\n\n```yaml\nStyle:\n  ColumnRainbow:\n    - Foreground: \"white\"\n    - Foreground: \"aqua\"\n    - Foreground: \"lightsalmon\"\n    - Foreground: \"lime\"\n    - Foreground: \"blue\"\n    - Foreground: \"yellowgreen\"\n    - Foreground: \"red\"\n```\n\nStyle specifications other than `Foreground` can also be specified.\n\n```yaml\nStyle:\n  ColumnRainbow:\n    - Foreground: \"white\"\n      Background: \"red\"\n    - Foreground: \"aqua\"\n      Underline: true\n    - Foreground: \"#ff7f00\"\n      Background: \"blue\"\n      Bold: true\n    - Foreground: \"lime\"\n      Italic: true\n    - Foreground: \"blue\"\n      Dim: true\n    - Foreground: \"yellowgreen\"\n    - Foreground: \"red\"\n```\n\n[Related styling](#style-customization): `ColumnRainbow`.\n\n###  4.7. \u003ca name='column-width'\u003e\u003c/a\u003eColumn width\n\nThe `--column-width` option is designed for **command output with irregular spaces**, such as `ps aux`, `df`, etc.  (default key `alt+o`).\nIt automatically **detects and separates columns** without needing a specific delimiter.\n\n```console\nps aux|ov -H1 --column-width --column-rainbow\n```\n\n![ps-ov.png](docs/ps-ov.png)\n\nThis column-width feature is implemented using [guesswidth](https://github.com/noborus/guesswidth).\n\n###  4.8. \u003ca name='wrap/nowrap'\u003e\u003c/a\u003eWrap/NoWrap\n\nSupports switching between wrapping and not wrapping lines.\n\nThe option is `--wrap`, specify `--wrap=false` (default key `w`, `W`) if you do not want to wrap.\n\n###  4.9. \u003ca name='alternate-rows'\u003e\u003c/a\u003eAlternate-Rows\n\nAlternate row styles with the `--alternate-rows`(`-C`) (default key `C`) option\nThe style can be set with [Style customization](#style-customization).\n\n```console\nov --alternate-rows test.csv\n```\n\n[Related styling](#style-customization): `Alternate`.\n\n###  4.10. \u003ca name='sidebar'\u003e\u003c/a\u003eSidebar\n\n*Added in v0.51.0*\n\n![sidebar.png](docs/sidebar1.png)\n\n`ov` now supports a sidebar feature, allowing you to display additional information alongside the main content.\n\nThe sidebar can show:\n\n* Help (default key `Alt + h`)\n* Mark list (default key `Alt + m`)\n* Document list (default key `Alt + l`)\n* Section list (default key `Alt + u`)\n\nYou can toggle the sidebar and switch its mode using keyboard shortcuts or configuration options. The sidebar width is configurable, and its content updates dynamically according to the current mode.\n\nSidebar scrolling is independent of the main content.\nDefault keys are:\n\n* up(default key `shift+up`)\n* down(default key `shift+down`)\n* left(default key `shift+left`)\n* right(default key `shift+right`)\n\nYou can also specify the sidebar mode via CLI or config(`help`, `marks`, `documents`, `sections`).\n\n```console\nov --sidebar-mode=sections --section-delimiter \"^#\" README.md\n```\n\nYou can specify the initial sidebar mode via CLI with `--sidebar-mode=string` or by setting it in the config file.\nYou can set the sidebar width using `SidebarWidth`. This can be specified as a percentage (e.g., `20%`) or as a fixed width in columns (e.g., `30`).\n\nExample:\n\n```yaml\nSidebarMode: \"marks\"  # Initial sidebar mode (help, marks, documents, sections)\nSidebarWidth: 30      #  Width of the sidebar. Can be specified in percentage or fixed width (e.g., \"30\" for 30 columns).\n```\n\n###  4.11. \u003ca name='section'\u003e\u003c/a\u003eSection\n\nYou can specify a section delimiter using `--section-delimiter` (default key `alt+d`).\n\nThis allows you to move between sections (default keys `space` and `^`).\n\nThe specified line will also be treated as a **section header** and will remain fixed at the specified position until the next section appears at the specified position.\n\nThe start of the section can be adjusted with `--section-start`(default key `ctrl+F3`, `alt+s`).\n\n![section.png](docs/section.png)\n\nThe `--section-delimiter` is written in a regular expression (for example: \"^#\").\n(Line breaks are not included in matching lines).\n\nFor example, if you specify \"^diff\" for a diff that contains multiple files,\nyou can move the diff for each file.\n\nThe number of lines in section-header can be changed.\nYou can specify the number of lines using the `--section-header-num` option or key input(default key `F7`).\n\nThe specified section can be viewed in the section list in the [Sidebar](#sidebar)(default key `alt+u`).\n\n####  4.11.1. \u003ca name='section-example'\u003e\u003c/a\u003esection example\n\nThis is an example of using the `git` pager.\n\n```gitconfig\n[pager]\n  diff = \"ov -F --section-delimiter '^diff'\"\n  log = \"ov -F --section-delimiter '^commit' --section-header-num 3\"\n```\n\n[Related styling](#style-customization): `SectionLine`.\n\n####  4.11.2. \u003ca name='hide-other-sections'\u003e\u003c/a\u003ehide other sections\n\nIf you specify `--hide-other-section`(default key `alt+-`), only the current section is displayed.\n\n```console\nov --section-delimiter \"^#\" --hide-other-section README.md\n```\n\nThis is just hidden, so it will be displayed when you move to the next section.\n\n###  4.12. \u003ca name='multiple-files'\u003e\u003c/a\u003eMultiple files\n\n`ov` can also open multiple files.\n\n```console\nov file1 file2\n```\n\nMultiple files are each opened as a document and can be navigated using the Next Document `]` key (default), Previous Document `[` key (default).\n\nSpecified multiple files can also be displayed in the document list in the [Sidebar](#sidebar)(default key `alt + l`).\n\nRelated Styling: [Customizing the bottom status line](#customizing-the-bottom-status-line).\n\n###  4.13. \u003ca name='follow-mode'\u003e\u003c/a\u003eFollow mode\n\n`--follow`(`-f`)(default key `ctrl+f`) prints appended data and moves to the bottom line (like `tail -f`).\n\n```console\nov --follow-mode /var/log/syslog\n```\n\n```console\n(while :; do echo random-$RANDOM; sleep 0.1; done;)|./ov  --follow-mode\n```\n\n\u003e [!NOTE]\n\u003e Due to issue[issue #643](https://github.com/noborus/ov/issues/643), follow-mode does not work for files in the /tmp folder on macOS.\n\n####  4.13.1. \u003ca name='follow-name'\u003e\u003c/a\u003eFollow name\n\n\u003e [!TIP]\n\u003e Use `--follow-name` instead of `--follow-mode` when files might be rotated (like log files). This ensures you continue following the new file even if the original is moved or deleted.\n\nYou can specify the file name to follow with `--follow-name`(like `tail -F`).\nMonitor file names instead of file descriptors.\n\n```console\nov --follow-name /var/log/nginx/access.log\n```\n\n####  4.13.2. \u003ca name='follow-all-mode'\u003e\u003c/a\u003eFollow all mode\n\n`--follow-all`(`-A`)(default key `ctrl+a`) is the same as follow mode, it switches to the last updated file if there are multiple files.\n\n```console\nov --follow-all /var/log/nginx/access.log /var/log/nginx/error.log\n```\n\n####  4.13.3. \u003ca name='follow-section-mode'\u003e\u003c/a\u003eFollow section mode\n\nUse the `--follow-section`(default key `F2`) option to follow by section.\nFollow mode is line-by-line, while follow section mode is section-by-section.\nFollow section mode displays the bottom section.\nThe following example is displayed from the header (#) at the bottom.\n\n```console\nov --section-delimiter \"^#\" --follow-section README.md\n```\n\n\u003e [!NOTE]\n\u003e [Watch](#watch) mode is a mode in which `--follow-section` and `--section-delimiter \"^\\f\"` are automatically set.\n\n####  4.13.4. \u003ca name='sticky-follow'\u003e\u003c/a\u003eSticky Follow\n\n*Added in v0.44.0*\n\nFollow mode uses **Sticky follow** by default. In Sticky follow mode, when you move up from the bottom, follow mode temporarily pauses. Follow mode resumes automatically when you return to the bottom of the file.\n\nThis behavior allows you to:\n\n* Scroll up to examine previous content without losing your position\n* Automatically resume following new content when you return to the bottom\n* Maintain context while monitoring live files\n\n**Visual Indicators:**\n\nWhen follow mode is paused, you'll see visual indicators to help you understand the current state:\n\n* `||` appears at the beginning of the status line to indicate that follow mode is paused\n* The line where follow mode was paused is highlighted with the `PauseLine` style\n\nYou can disable Sticky follow by setting `DisableStickyFollow: true` in your configuration file:\n\n```yaml\nGeneral:\n  DisableStickyFollow: true\n```\n\n[Related styling](#style-customization): `PauseLine`.\n\n###  4.14. \u003ca name='exec-mode'\u003e\u003c/a\u003eExec mode\n\nExec mode captures the output of a command and displays it in `ov`.\nIt works similarly to `watch`, but with advanced paging features.\n\nUse the `--exec` (`-e`) option to run the command and display stdout/stderr separately.\n\n\u003e [!TIP]\n\u003e When using `--exec`, you must insert `--` to separate ov's options from the command you want to run.\n\u003e Everything after `--` is interpreted as the command and its arguments.\n\n```console\nov --exec -- ls -l\n```\n\nShows the stderr screen as soon as an error occurs, when used with `--follow-all`.\n\n```console\nov --follow-all --exec -- make\n```\n\nIn exec mode (other than Windows) the output is opened by opening a `pty`.\nTherefore, the command is likely to be printed in color.\n\n```console\nov --exec -- eza -l\n```\n\nIt is useful to use the `--notify-eof` option together with exec mode to get notified when the command finishes.\nThis is especially helpful for long-running commands like make.\n\n```console\nov --notify-eof --exec -- make\n```\n\n###  4.15. \u003ca name='search'\u003e\u003c/a\u003eSearch\n\nSearch by forward search `/` key(default) or the backward search `?` key(default).\nSearch can be toggled between incremental search, regular expression search, and case sensitivity.\nDisplayed when the following are enabled in the search input prompt:\n\n|         Function          | display | (Default)key |     command option     |    config file     |\n|---------------------------|---------|--------------|------------------------|--------------------|\n| Incremental search        | (I)     | alt+i        | --incremental          | Incsearch          |\n| Regular expression search | (R)     | alt+r        | --regexp-search        | RegexpSearch       |\n| Case-sensitive            | (Aa)    | alt+c        | -i, --case-sensitive   | CaseSensitive      |\n| Smart case-sensitive      | (S)     | alt+s        | --smart-case-sensitive | SmartCaseSensitive |\n\nSpecify true/false in config file.\n\n```config.yaml\nCaseSensitive: false\nRegexpSearch: false\nIncsearch: true\nSmartCaseSensitive: true\n```\n\n[Related styling](#style-customization): `SearchHighlight`\n\n####  4.15.1. \u003ca name='pattern'\u003e\u003c/a\u003ePattern\n\nThe pattern option allows you to specify a search at startup.\n\n```console\nov --pattern install README.md\n```\n\n####  4.15.2. \u003ca name='filter'\u003e\u003c/a\u003eFilter\n\nFilter input is possible using the `\u0026` key(default).\nThe filter input creates a new document only for the lines that match the filter.\n\nMove next document `]` and previous document `[` key(default) allow you to move between the filter document and the original document.\n\nThe `K`(`shift+k`) key (default) closes all documents created by the filter.\n\nYou can also specify a filter using the command line option `--filter`.\n\n```console\nov --filter \"install\" README.md\n```\n\nThe filter is a regular expression.\n\n```console\nov --filter \"^#\" README.md\n```\n\nYou can also filter for lines that do not match the specified pattern.\n\nIf you press `!` on `\u0026` while inputting a filter, non-matching lines will be targeted.\n\nThe command line option for this can be specified with `--non-match-filter`.\n\n```console\nov --non-match-filter info /var/log/syslog\n```\n\nIf you specify both a `filter` option and the [Quit if one screen](#quit-if-one-screen) option,\nthe command will display the results of the filter and then quit if the results fit on one screen.\n\n```console\n$ ps aux|ov -H1 --filter postgres --quit-if-one-screen\nUSER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND\npostgres    1589  0.0  0.0 221992 29952 ?        Ss   Jul24   0:02 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf\npostgres    1624  0.0  0.0 222104  9544 ?        Ss   Jul24   0:00 postgres: 14/main: checkpointer\npostgres    1626  0.0  0.0 221992  8392 ?        Ss   Jul24   0:00 postgres: 14/main: background writer\npostgres    1627  0.0  0.0 221992 11464 ?        Ss   Jul24   0:00 postgres: 14/main: walwriter\npostgres    1628  0.0  0.0 222560  9928 ?        Ss   Jul24   0:01 postgres: 14/main: autovacuum launcher\npostgres    1629  0.0  0.0  76728  7112 ?        Ss   Jul24   0:01 postgres: 14/main: stats collector\npostgres    1631  0.0  0.0 222420  8904 ?        Ss   Jul24   0:00 postgres: 14/main: logical replication launcher\nnoborus   193766  0.0  0.0 1603756 7552 pts/0    Rl+  10:37   0:00 ov -H1 -F --filter postgres\n```\n\n###  4.16. \u003ca name='caption'\u003e\u003c/a\u003eCaption\n\nYou can specify a caption instead of the file name in status line to display it.\n\n```console\nls -alF|ov --caption \"ls -alF\"\n```\n\nIt can also be specified as an environment variable.\n\n```console\nexport OV_CAPTION=\"ls -alF\"\nls -alF|ov\n```\n\n###  4.17. \u003ca name='mark'\u003e\u003c/a\u003eMark\n\nMark the display position with the `m` key(default).\nThe mark is decorated with `MarkLine` and `MarkStyleWidth`.\n\nMarks can be erased individually with the `M` key(default).\nIt is also possible to delete all marks with the `ctrl + delete` key(default).\n\nThe specified marks can be displayed in the mark list in the [Sidebar](#sidebar)(default key `alt + m`).\n\n[Related styling](#style-customization): `MarkLine`.\n\n#### mark by pattern\n\nYou can use mark by pattern to mark all lines that match the search(default key `*`).\nThis will enter pattern input mode and, when you press `Enter`, mark all lines\nthat match the pattern.\n\n#### Specifying a mark\n\nUse the `\u003e`next and `\u003c`previous (default) key to move to the marked position.\nYou can also enter mark specify mode with `,` (default) and select a mark by\nnumber. There are two input styles: enter the number directly, or enter a\nrelative offset like `+N`/`-N` from the current mark. When you press `,`, the\nmark list sidebar opens automatically along with number input mode.\n\n###  4.18. \u003ca name='watch'\u003e\u003c/a\u003eWatch\n\n`ov` has a watch mode that reads the file every N seconds and adds it to the end.\nWhen you reach EOF, add '\\f' instead.\nUse the `--watch`(`-T`) option.\nGo further to the last section.\nThe default is'section-delimiter', so the last loaded content is displayed.\n\nfor example.\n\n```console\nov --watch 1 /proc/meminfo\n```\n\n###  4.19. \u003ca name='mouse-support'\u003e\u003c/a\u003eMouse support\n\nThe `ov` makes the mouse support its control.\nThis can be disabled with the option `--disable-mouse` (default keys for toggling mouse support are `ctrl+alt+r`).\n\nIf mouse support is enabled, tabs and line breaks will be interpreted correctly when copying.\n\nCopying to the clipboard uses [atotto/clipboard](https://github.com/atotto/clipboard).\nFor this reason, the 'xclip' or 'xsel' command is required in Linux/Unix environments.\n\n*Add in v0.40.0*\n\nAlternatively, you can use the `OSC52` escape sequence for clipboard operations by setting\n`ClipboardMethod` to `OSC52` in the configuration file (`config.yaml`):\n\n\u003e [!TIP]\n\u003e Use `OSC52` method if you're working over SSH or in terminal multiplexers like tmux/screen where traditional clipboard tools might not work.\n\n```yaml\nClipboardMethod: \"OSC52\"\n```\n\nThis method is useful in environments where `OSC52` is supported by the terminal.\n\nSelecting the range with the mouse and then left-clicking will copy it to the clipboard.\n\nPasting in `ov` is done with the middle button.\nIn other applications, it is pasted from the clipboard (often by pressing the right-click).\n\n####  4.19.1. \u003ca name='text-selection'\u003e\u003c/a\u003eText Selection\n\n*Added in v0.44.0*\n\nThe mouse supports intelligent text selection for improved productivity:\n\n* **Single click**: Place cursor and start text selection by dragging\n* **Double click**: Select the word under the cursor\n* **Triple click**: Select the entire line under the cursor\n\nThese selection methods work seamlessly with the clipboard functionality. After making a selection with double or triple click, the selected text is automatically copied to the clipboard.\n\n####  4.19.2. \u003ca name='wheel-scroll'\u003e\u003c/a\u003eWheel scroll\n\nWhen mouse support is enabled, you can use the mouse wheel for navigation:\n\n* **Vertical scrolling**: Use the mouse wheel to scroll up and down\n* **Horizontal scrolling**: Use `Shift + wheel` to scroll left and right\n\n####  4.19.3. \u003ca name='scroll-amount-configuration'\u003e\u003c/a\u003eScroll Amount Configuration\n\nYou can customize the scroll amounts using command-line options or configuration file settings:\n\n####  4.19.4. \u003ca name='anchor-and-extend-selection'\u003e\u003c/a\u003eAnchor and Extend Selection\n\n*Added in v0.50.0*\n\nYou can now use \"Anchor and Extend Selection\" with the mouse:\n\n* **Set Anchor**: Left-click to set an anchor point.\n* **Extend Selection**: After setting an anchor, use `Alt+Click` or right-click to extend the selection from the anchor to the clicked position and copy the selected range.\n* **Clear Anchor**: If no selection is created, double-click will clear the anchor.\n* **Anchor Highlight**: When there is no selection, the anchor point is visually highlighted (reverse style).\n\nThis feature enables flexible, editor-like selection and copy operations using the mouse.\n\n**Vertical Scroll Amount:**\n\n*Added in v0.44.0*\n\n* Command-line: Not directly configurable (uses system default)\n* Config file: Set `VScrollLines` in the `General` section\n\n```yaml\nGeneral:\n  VScrollLines: 3\n```\n\n**Horizontal Scroll Amount:**\n\nCommand-line: --hscroll-width (e.g., --hscroll-width \"20%\" or --hscroll-width \"10\")\nConfig file: Set HScrollWidth in the General section\n\n```yaml\nGeneral:\n  HScrollWidth: \"10%\"  # Percentage of screen width\n  # or\n  HScrollWidth: \"20\"   # Specific number of columns\n```\n\n###  4.20. \u003ca name='multi-color-highlight'\u003e\u003c/a\u003eMulti color highlight\n\nThis feature styles multiple words individually.\n`.`key(default) enters multi-word input mode.\nEnter multiple words (regular expressions) separated by spaces.\n\nFor example, `error info warn debug` will color errors red, info cyan, warn yellow, and debug magenta.\n\nIt can also be specified with the command line option `--multi-color`(`-M`)(default key `.`).\nFor command line options, pass them separated by ,(comma).\n\nFor example:\n\n```console\nov --multi-color \"ERROR,WARN,INFO,DEBUG,not,^.{24}\" access.log\n```\n\n![multi-color.png](https://raw.githubusercontent.com/noborus/ov/master/docs/multi-color.png)\n\nColor customization is possible. Please specify 7 or more colors in config.yaml.\n\n```yaml\nStyle:\n  MultiColorHighlight:\n    - Foreground: \"red\"\n      Reverse: true\n    - Foreground: \"aqua\"\n      Underline: true\n    - Foreground: \"yellow\"\n      Background: \"blue\"\n    - Foreground: \"fuchsia\"\n    - Foreground: \"lime\"\n    - Foreground: \"blue\"\n    - Foreground: \"#c0c0c0\"\n```\n\n[Related styling](#style-customization): `MultiColorHighlight`.\n\n###  4.21. \u003ca name='plain'\u003e\u003c/a\u003ePlain\n\nSupports disable decoration ANSI escape sequences.\nThe option is `--plain` (or `-p`) (default key `ctrl+e`).\n\n###  4.22. \u003ca name='converter'\u003e\u003c/a\u003eConverter\n\nConverter selects the engine to convert and display the text.\nUsually, the escape sequence is interpreted and displayed by `es` (default).\n`raw` displays as it is without interpreting the escape sequence.\n\nYou can specify the `--converter` option with `[es|raw|align]`,\nand you can also specify the `--raw`, `--align`([Align](#align)) option as a shortcut option.\n\n\u003e [!NOTE]\n\u003e `raw` also displays the character string of the escape sequence,\n\u003e but be aware that [Plain](#plain) hides the decoration after interpreting the escape sequence.\n\n###  4.23. \u003ca name='align'\u003e\u003c/a\u003eAlign\n\nThe `--align` option adjusts column widths to improve readability for **irregularly formatted tabular data**, such as CSV files with misaligned columns.\n\nExample:\n\n```console\nov --column-mode --align test.csv\n```\n\n```csv\nc1,c2,c3\na,b,c\naaaaaaaaaaaaaaaaaaaa,bb,cc\naa,bbbbbbbbbbbbbb,cc\naa,bb,cccccccccccccccccccccc\n```\n\nAfter applying --align:\n\n![ov-align](docs/ov-align.png)\n\nAlign can also shrink column.\n\n####  4.23.1. \u003ca name='shrink'\u003e\u003c/a\u003eShrink\n\nAlign allows columns to be shrunk and stretched by toggling with the (default key `s`).\n\n![ov-column-shrink](docs/ov-column-shrink.gif)\n\nTo change the character displayed when columns are shrunk, set ShrinkChar in the configuration file:\n\n```yaml\nShrinkChar: '.'\n```\n\n####  4.23.2. \u003ca name='right-align'\u003e\u003c/a\u003eRight Align\n\nColumns displayed by alignment are left-justified. Columns can be right-aligned (default key alt+a).\n\n###  4.24. \u003ca name='jump-target'\u003e\u003c/a\u003eJump target\n\nYou can specify the lines to be displayed in the search results.\nThis function is similar to `--jump-target` of `less`.\nPositive numbers are displayed downwards by the number of lines from the top(1).\nNegative numbers are displayed up by the number of lines from the bottom(-1).\n. (dot) can be used to specify a percentage. .5 is the middle of the screen(.5).\nYou can also specify a percentage, such as (50%).\n\nThis option can be specified with `--jump-target`(or `-j`) (default key `j`).\n\nIf `section` is specified as the `--jump-target`, the display will start from the beginning of the section as much as possible\nand the jump-target will be changed.\n\n```console\nov --section-delimiter \"^#\" --jump-target section README.md\n```\n\n[Related styling](#style-customization): `JumpTarget`.\n\n###  4.25. \u003ca name='view-mode'\u003e\u003c/a\u003eView mode\n\nYou can also use a combination of modes using the `--view-mode`(default key `p`) option.\nIn that case, you can set it in advance and specify the combined mode at once.\n\nFor example, if you write the following settings in ov.yaml,\n the csv mode will be set with `--view-mode csv`.\n\n```console\nov --view-mode csv test.csv\n```\n\n```ov.yaml\nMode:\n  p:\n    Header: 2\n    AlternateRows: true\n    ColumnMode: true\n    LineNumMode: false\n    WrapMode: true\n    ColumnDelimiter: \"|\"\n    ColumnRainbow: true\n  m:\n    Header: 3\n    AlternateRows: true\n    ColumnMode: true\n    LineNumMode: false\n    WrapMode: true\n    ColumnDelimiter: \"|\"\n  csv:\n    Header: 1\n    AlternateRows: true\n    ColumnMode: true\n    LineNumMode: false\n    WrapMode: true\n    ColumnDelimiter: \",\"\n    ColumnRainbow: true\n```\n\n####  4.25.1. \u003ca name='list-view-modes'\u003e\u003c/a\u003eList View Modes\n\n*Add in v0.40.0*\n\nThe `--list-view-modes` option outputs a list of available view modes defined in the configuration file.\n\n```sh\nov --config ov.yaml --list-view-modes\n```\n\nExample output:\n\n```plaintext\ngeneral\nmarkdown\nmysql\npsql\n```\n\nThis is useful for checking predefined view modes and their configurations.\n\n###  4.26. \u003ca name='output-on-exit'\u003e\u003c/a\u003eOutput on exit\n\n`--exit-write`, `-X`(default key `Q`) option prints the current screen on exit.\nThis looks like the display remains on the console after the ov is over.\n\n*Change in v0.40.0*\n\nBy default, it outputs the amount of the displayed screen **with all decorations**, such as search highlights, as it appears on the screen.\n\n```console\nov -X README.md\n```\n\nIf you want to revert to the previous behavior (outputting the original text without decorations), set IsWriteOriginal: true in the configuration file.\n\n```yaml\nIsWriteOriginal: true\n```\n\nYou can change how much is written using `--exit-write-before` and `--exit-write-after`(default key `ctrl+q`).\n`--exit-write-before`\n\n`--exit-write-before` specifies the number of lines before the current position(top of screen).\n`--exit-write-before 3` will output from 3 lines before.\n\n`--exit-write-after` specifies the number of lines after the current position (top of screen).\n\n`--exit-write-before 3 --exit-write-after 3` outputs 6 lines.\n\n###  4.27. \u003ca name='quit-if-one-screen'\u003e\u003c/a\u003eQuit if one screen\n\nThe `--quit-if-one-screen`, `-F` option allows the program to exit immediately if the content fits within one screen.\nThis can be useful when you only want to view small files or when you want to quickly check the content without scrolling.\n\nIf you want to enable this option by default, set `QuitSmall` to `true` in the configuration file.\n\n```yaml\nQuitSmall: true\n```\n\n###  4.28. \u003ca name='suspend'\u003e\u003c/a\u003eSuspend\n\nYou can suspend ov with `ctrl+z`(default key).\nNormally, you can resume from suspend by typing `fg`.\n\n```console\nsuspended ov (use 'fg' to resume)\n```\n\nOn Windows or if the environment variable `OV_SUBSHELL` is set, `exit` instead of `fg`.\nThe process actually starts a subshell without suspending.\n\n```console\nsuspended ov (use 'exit' to resume)\n```\n\n\u003e [!NOTE]\n\u003e Until v0.36.0, it was a Subshell method.\n\n###  4.29. \u003ca name='edit'\u003e\u003c/a\u003eEdit\n\n*Added in v0.42.0*\n\nYou can edit the currently displayed file with your preferred editor by pressing the default key `alt+v`.\n\nIf the file is not a regular file (for example, when viewing input from a pipe or standard input), a temporary file is created and passed to the editor for editing. This ensures that you can still edit the content even if the original input is not seekable.\n\nThe editor command is determined by the `OVEDIT` or `EDITOR` environment variable.\n\nYou can use `%f` and `%d` as arguments in the editor command:\n\n* `%f` will be replaced with the current file name.\n* `%d` will be replaced with the current line number.\n\nFor example:\n\n```env\nOVEDIT=\"vim +%d %f\"\n```\n\nThis will open the current file in `vim` at the specified line number.\n\n###  4.30. \u003ca name='save'\u003e\u003c/a\u003eSave\n\nIf the file input is via a pipe, you can save it by pressing the `save buffer` (default `S`) key.\n\nThis will put you in input mode, so enter the file name.\nOnly the buffer currently in memory is saved.\n\n```ov:prompt\n(Save)file:savefile.txt\n```\n\nIf the file name already exists, select `Overwrite`, `Append`, or `Cancel`.\n\n```ov:prompt\noverwrite? (O)overwrite, (A)append, (N)cancel\n```\n\n###  4.31. \u003ca name='ruler'\u003e\u003c/a\u003eRuler\n\nThe `--ruler` option displays a ruler at the top of the screen to help you see the column positions. (default key `alt+shift+F9`)\n\n* `--ruler` or `--ruler=1`: Displays a relative ruler that moves with horizontal scrolling.\n* `--ruler=2`: Displays an absolute ruler that does not move with horizontal scrolling.\n* `--ruler=0`: Disables the ruler (default).\n\n```console\nov --ruler README.md\nov --ruler=2 README.md\n```\n\n![ov-ruler.png](docs/ov-ruler.png)\n\n[Related styling](#style-customization): `Ruler` .\n\n###  4.32. \u003ca name='redirect-output'\u003e\u003c/a\u003eRedirect Output\n\nBy default, `ov` does not show the screen when output is redirected.\nTo force display, use the `--force-screen` option:\n\n```console\nov --force-screen filename \u003e output.txt\n```\n\n##  5. \u003ca name='how-to-reduce-memory-usage'\u003e\u003c/a\u003eHow to reduce memory usage\n\nSince **v0.30.0** it no longer loads everything into memory.\nThe first chunk from the beginning to the 10,000th line is loaded into memory\nand never freed.\nTherefore, files with less than 10,000 lines do not change behavior.\n\nThe `--memory-limit` option can be used to limit the chunks loaded into memory.\nMemory limits vary by file type.\n\nAlso, go may use a lot of memory until the memory is freed by GC.\nAlso consider setting the environment variable `GOMEMLIMIT`.\n\n```console\nexport GOMEMLIMIT=100MiB\n```\n\n###  5.1. \u003ca name='regular-file-(seekable)'\u003e\u003c/a\u003eRegular file (seekable)\n\n![regular file memory](docs/ov-file-mem.png)\n\nNormally large (10,000+ lines) files are loaded in chunks when needed. It also frees chunks that are no longer needed.\nIf `--memory-limit` is not specified, it will be limited to 100.\n\n```console\nov --memory-limit-file 3 /var/log/syslog\n```\n\nSpecify `MemoryLimit` in the configuration file.\n\n```yaml\nMemoryLimitFile: 3\n```\n\nYou can also use the `--memory-limit-file` option and the `MemoryLimitFile` setting for those who think regular files are good memory saving.\n\n###  5.2. \u003ca name='other-files,-pipes(non-seekable)'\u003e\u003c/a\u003eOther files, pipes(Non-seekable)\n\n![non-regular file memory](docs/ov-mem-mem.png)\n\nNon-seekable files and pipes cannot be read again, so they must exist in memory.\n\nIf you specify the upper limit of chunks with `--memory-limit` or `MemoryLimit`,\nit will read up to the upper limit first, but after that,\nwhen the displayed position advances, the old chunks will be released.\nUnlimited if `--memory-limit` is not specified.\n\n```console\ncat /var/log/syslog | ov --memory-limit 10\n```\n\nIt is recommended to put a limit in the config file as you may receive output larger than memory.\n\n```yaml\nMemoryLimit: 1000\n```\n\n##  6. \u003ca name='command-option'\u003e\u003c/a\u003eCommand option\n\n| Short |                    Long                    |                            Purpose                             |\n|-------|--------------------------------------------|----------------------------------------------------------------|\n| -l,   | --align                                    | align the output columns for better readability                |\n| -C,   | --alternate-rows                           | alternately change the line color                              |\n|       | --caption string                           | custom caption                                                 |\n| -i,   | --case-sensitive                           | case-sensitive in search                                       |\n| -d,   | --column-delimiter character               | column delimiter character (default \",\")                       |\n| -c,   | --column-mode                              | column mode                                                    |\n|       | --column-rainbow                           | column mode to rainbow                                         |\n|       | --column-width                             | column mode for width                                          |\n|       | --completion string                        | generate completion script [bash\\|zsh\\|fish\\|powershell]       |\n|       | --config file                              | config file (default is $XDG_CONFIG_HOME/ov/config.yaml)       |\n|       | --converter string                         | converter [es\\|raw\\|align] (default \"es\")                      |\n|       | --debug                                    | debug mode                                                     |\n|       | --disable-column-cycle                     | disable column cycling                                         |\n|       | --disable-mouse                            | disable mouse support                                          |\n| -e,   | --exec                                     | command execution result instead of file                       |\n| -X,   | --exit-write                               | output the current screen when exiting                         |\n| -a,   | --exit-write-after int                     | number after the current lines when exiting                    |\n| -b,   | --exit-write-before int                    | number before the current lines when exiting                   |\n|       | --filter string                            | filter search pattern                                          |\n| -A,   | --follow-all                               | follow multiple files and show the most recently updated one   |\n| -f,   | --follow-mode                              | monitor file and display new content as it is written          |\n|       | --follow-name                              | follow mode to monitor by file name                            |\n|       | --follow-section                           | section-by-section follow mode                                 |\n|       | --force-screen                             | display screen even when redirecting output                    |\n| -H,   | --header int                               | number of header lines to be displayed constantly              |\n| -Y,   | --header-column int                        | number of columns to display as a vertical header              |\n| -h,   | --help                                     | help for ov                                                    |\n|       | --help-key                                 | display key bind information                                   |\n|       | --hide-other-section                       | hide other section                                             |\n|       | --hscroll-width [int\\|int%\\|.int]          | width to scroll horizontally [int\\|int%\\|.int] (default \"10%\") |\n|       | --incsearch[=true\\|false]                  | incremental search (default true)                              |\n| -j,   | --jump-target [int\\|int%\\|.int\\|'section'] | jump target [int\\|int%\\|.int\\|'section']                       |\n| -n,   | --line-number                              | line number mode                                               |\n|       | --list-view-modes                          | list available view modes defined in the configuration file    |\n|       | --memory-limit int                         | number of chunks to limit in memory (default -1)               |\n|       | --memory-limit-file int                    | number of chunks to limit in memory for the file (default 100) |\n| -M,   | --multi-color strings                      | comma separated words(regexp) to color .e.g. \"ERROR,WARNING\"   |\n|       | --non-match-filter string                  | filter non match search pattern                                |\n|       | --notify-eof int                           | notify at the end of the file                                  |\n|       | --pattern string                           | search pattern                                                 |\n| -p,   | --plain                                    | disable original decoration                                    |\n| -F,   | --quit-if-one-screen                       | quit if the output fits on one screen                          |\n| -r,   | --raw                                      | raw escape sequences without processing                        |\n|       | --regexp-search                            | regular expression search                                      |\n|       | --ruler int                                | display ruler (=0: none, =1: relative, =2: absolute)           |\n|       | --section-delimiter regexp                 | regexp for section delimiter .e.g. \"^#\"                        |\n|       | --section-header                           | enable section-delimiter line as Header                        |\n|       | --section-header-num int                   | number of section header lines (default 1)                     |\n|       | --section-start int                        | section start position                                         |\n|       | --set-terminal-title                       | set terminal title                                             |\n|       | --sidebar-mode string                      | apply predefined settings for sidebar mode                     |\n|       | --skip-extract                             | skip extracting compressed files                               |\n|       | --skip-lines int                           | skip the number of lines                                       |\n|       | --smart-case-sensitive                     | smart case-sensitive in search                                 |\n|       | --status-line[=true\\|false]                | status line (default true)                                     |\n| -x,   | --tab-width int                            | tab stop width (default 8)                                     |\n| -v,   | --version                                  | display version information                                    |\n| -y,   | --vertical-header int                      | number of characters to display as a vertical header           |\n| -m,   | --view-mode string                         | apply predefined settings for a specific mode                  |\n| -T,   | --watch seconds                            | watch mode interval(seconds)                                   |\n| -w,   | --wrap[=true\\|false]                       | wrap mode (default true)                                       |\n\nIt can also be changed after startup.\n\n##  7. \u003ca name='key-bindings'\u003e\u003c/a\u003eKey bindings\n\n|              Key              |                       Action                       |\n|-------------------------------|----------------------------------------------------|\n| **General**                   |                                                    |\n| [Escape], [q]                 | * quit                                             |\n| [ctrl+c]                      | * cancel                                           |\n| [Q]                           | * output screen and quit                           |\n| [ctrl+q]                      | * set output screen and quit                       |\n| [alt+shift+F8]                | * set output original screen and quit              |\n| [ctrl+z]                      | * suspend                                          |\n| [alt+v]                       | * edit current document                            |\n| [h], [ctrl+alt+c], [ctrl+f1]  | * display help screen                              |\n| [ctrl+f2], [ctrl+alt+e]       | * display log screen                               |\n| [ctrl+l]                      | * screen sync                                      |\n| [ctrl+f]                      | * follow mode toggle                               |\n| [ctrl+a]                      | * follow all mode toggle                           |\n| [ctrl+F8], [ctrl+alt+r]       | * enable/disable mouse                             |\n| [S]                           | * save buffer to file                              |\n| **Moving**                    |                                                    |\n| [Enter], [Down], [ctrl+n]     | * forward by one line                              |\n| [Up], [ctrl+p]                | * backward by one line                             |\n| [Home]                        | * go to top of document                            |\n| [End]                         | * go to end of document                            |\n| [PageDown], [ctrl+v]          | * forward by page                                  |\n| [PageUp], [ctrl+b]            | * backward by page                                 |\n| [ctrl+d]                      | * forward a half page                              |\n| [ctrl+u]                      | * backward a half page                             |\n| [left]                        | * scroll left                                      |\n| [right]                       | * scroll right                                     |\n| [ctrl+left]                   | * scroll left half screen                          |\n| [ctrl+right]                  | * scroll right half screen                         |\n| [alt+left]                    | * scroll left specified width                      |\n| [alt+right]                   | * scroll right specified width                     |\n| [shift+Home]                  | * go to beginning of line                          |\n| [shift+End]                   | * go to end of line                                |\n| [g]                           | * go to line(input number or `.n` or `n%` allowed) |\n| [,]                           | * go to mark number(input number allowed)          |\n| **Sidebar**                   |                                                    |\n| [alt+h]                       | * toggle help in sidebar                           |\n| [alt+m]                       | * toggle mark list in sidebar                      |\n| [alt+l]                       | * toggle document list in sidebar                  |\n| [alt+u]                       | * toggle section list in sidebar                   |\n| [shift+Up]                    | * scroll up in sidebar                             |\n| [shift+Down]                  | * scroll down in sidebar                           |\n| [shift+Left]                  | * scroll left in sidebar                           |\n| [shift+Right]                 | * scroll right in sidebar                          |\n| **Move document**             |                                                    |\n| []]                           | * next document                                    |\n| [[]                           | * previous document                                |\n| [ctrl+k]                      | * close current document                           |\n| [K]                           | * close all filtered documents                     |\n| **Mark position**             |                                                    |\n| [m]                           | * mark current position                            |\n| [M]                           | * remove mark current position                     |\n| [ctrl+delete]                 | * remove all mark                                  |\n| [\u003e]                           | * move to next marked position                     |\n| [\u003c]                           | * move to previous marked position                 |\n| [*]                           | * mark by pattern mode                             |\n| **Search**                    |                                                    |\n| [/]                           | * forward search mode                              |\n| [?]                           | * backward search mode                             |\n| [n]                           | * repeat forward search                            |\n| [N]                           | * repeat backward search                           |\n| [\u0026]                           | * filter search mode                               |\n| **Change display**            |                                                    |\n| [w], [W]                      | * wrap/nowrap toggle                               |\n| [c]                           | * column mode toggle                               |\n| [alt+o]                       | * column width toggle                              |\n| [ctrl+r]                      | * column rainbow toggle                            |\n| [C]                           | * alternate rows of style toggle                   |\n| [G]                           | * line number toggle                               |\n| [ctrl+e]                      | * original decoration toggle(plain)                |\n| [alt+f]                       | * align columns                                    |\n| [alt+r]                       | * raw output                                       |\n| [alt+shift+F9]                | * ruler toggle                                     |\n| [ctrl+F10]                    | * status line toggle                               |\n| **Change Display with Input** |                                                    |\n| [p], [P]                      | * view mode selection                              |\n| [d]                           | * column delimiter string                          |\n| [H]                           | * number of header lines                           |\n| [ctrl+s]                      | * number of skip lines                             |\n| [t]                           | * TAB width                                        |\n| [.]                           | * multi color highlight                            |\n| [j]                           | * jump target(`.n` or `n%` or `section` allowed)   |\n| [alt+t]                       | * convert type selection                           |\n| [y]                           | * number of vertical header                        |\n| [Y]                           | * number of header column                          |\n| **Column operation**          |                                                    |\n| [F]                           | * header column fixed toggle                       |\n| [s]                           | * shrink column toggle(align mode only)            |\n| [alt+a]                       | * right align column toggle(align mode only)       |\n| **Section operation**         |                                                    |\n| [alt+d]                       | * section delimiter regular expression             |\n| [ctrl+F3], [alt+s]            | * section start position                           |\n| [space]                       | * next section                                     |\n| [^]                           | * previous section                                 |\n| [9]                           | * last section                                     |\n| [F2]                          | * follow section mode toggle                       |\n| [F7]                          | * number of section header lines                   |\n| [alt+-]                       | * hide \"other\" section toggle                      |\n| **Close and reload**          |                                                    |\n| [ctrl+F9], [ctrl+alt+s]       | * close file                                       |\n| [ctrl+alt+l], [F5]            | * reload file                                      |\n| [ctrl+alt+w], [F4]            | * watch mode                                       |\n| [ctrl+w]                      | * set watch interval                               |\n| **Key binding when typing**   |                                                    |\n| [alt+c]                       | * case-sensitive toggle                            |\n| [alt+s]                       | * smart case-sensitive toggle                      |\n| [alt+r]                       | * regular expression search toggle                 |\n| [alt+i]                       | * incremental search toggle                        |\n| [!]                           | * non-match toggle                                 |\n| [Up]                          | * previous candidate                               |\n| [Down]                        | * next candidate                                   |\n| [ctrl+c]                      | * copy to clipboard                                |\n| [ctrl+v]                      | * paste from clipboard                             |\n\n###  7.1. \u003ca name='ctrl-key-and-corresponding-key-pairs-(commonly-treated-as-the-same-in-terminals)'\u003e\u003c/a\u003eCtrl key and corresponding key pairs (commonly treated as the same in terminals)\n\nIn many terminals, certain Ctrl key combinations and regular keys (such as Backspace, Tab, Enter) are treated as the same input. Here are typical examples:\n\n| Ctrl Key | Corresponding Key |\n|----------|-------------------|\n| Ctrl+H   | Backspace         |\n| Ctrl+I   | Tab               |\n| Ctrl+M   | Enter             |\n| Ctrl+J   | Line Feed         |\n\nDepending on the terminal or application, these keys may not be distinguished and can behave identically.\n\n*Added in v0.50.0*\n\nHowever, in terminals that support the Kitty keyboard protocol (see [Kitty Keyboard Protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/)), these keys can be distinguished and sent separately.\n\n##  8. \u003ca name='customize'\u003e\u003c/a\u003eCustomize\n\n###  8.1. \u003ca name='style-customization'\u003e\u003c/a\u003eStyle customization\n\nYou can customize the following items.\n\n*Changed in v0.40.0* The new style must be written in General:, Style:.\n\nIt is now also possible to write it in the Mode: item.\n\n```yaml\nGeneral:\n  Style:\n```\n\n```yaml\nMode:\n  markdown:\n    SectionDelimiter: \"^#\"\n    WrapMode: true\n    Style:\n      SectionLine:\n        Background: \"blue\"\n```\n\n\u003e [!NOTE]\n\u003e `StyleOverStrike` and `StyleOverLine` must be set at the top level and cannot be specified in the `Mode` section.\n\u003e\n\u003e```config.yaml\n\u003eStyleOverStrike:\n\u003e  Bold: true\n\u003eStyleOverLine:\n\u003e  Underline: true\n\u003e```\n\n* Header\n* HeaderBorder\n* LineNumber\n* SearchHighlight\n* ColumnHighlight\n* MarkLine\n* SectionLine\n* SectionBorder\n* MultiColorHighlight\n* ColumnRainbow\n* JumpTargetLine\n* VerticalHeader\n* VerticalHeaderBorder\n* Ruler\n* HeaderBorder\n* SectionBorder\n* VerticalHeader\n* VerticalHeaderBorder\n* Ruler\n* LeftStatus\n* RightStatus\n* SelectActive\n* SelectCopied\n* PauseLine\n\nFrom `v0.40.0`, it is recommended to use the `Style:` format for configuration. For example:\n\n```yaml\nGeneral:\n  Style:\n    Header:\n      Foreground: \"blue\"\n      Background: \"white\"\n      Bold: true\n    HeaderBorder:\n      Foreground: \"gray\"\n      Underline: true\n```\n\nFor backward compatibility, the `Style*` format is still supported but will be deprecated in the future. For example:\n\n```yaml\nStyleHeader:\n  Foreground: \"blue\"\n  Background: \"white\"\n  Bold: true\nStyleHeaderBorder:\n  Foreground: \"gray\"\n  Underline: true\n```\n\nSpecifies the color name for the foreground and background [colors](https://pkg.go.dev/github.com/gdamore/tcell/v2#pkg-constants).\nSpecify bool values for Reverse, Bold, Blink, Dim, Italic, Underline, UnderLineStyle, and UnderlineColor.\n\n[Example]\n\n```yaml\nGeneral:\n  Style:\n    Alternate:\n      Background: \"gray\"\n      Bold: true\n      Underline: true\n```\n\n| item name | value | example |\n|:----------|:------|:--------|\n| Foreground | \"color name\" or \"rgb\" | \"red\" |\n| Background | \"color name\" or \"rgb\" | \"#2a2a2a\" |\n| Reverse | true/false | true |\n| Bold | true/false | true |\n| Blink | true/false | true |\n| Dim | true/false | false |\n| Italic | true/false | false |\n| Underline | true/false | false |\n| UnderLineStyle | 0-5 | 2 |\n| UnderlineColor | \"color name\" or \"rgb\" | \"red\" |\n\nSpecify `MultiColorHighlight` and `ColumnRainbow` in an array.\n\n```yaml\nStyle:\n  MultiColorHighlight:\n    - Foreground: \"red\"\n      Reverse: true\n    - Foreground: \"aqua\"\n      Underline: true\n  ColumnRainbow:\n    - Foreground: \"white\"\n      Background: \"black\"\n    - Foreground: \"aqua\"\n      Background: \"black\"\n      Underline: true\n    - Background: \"lightsalmon\"\n      UnderlineStyle: 2\n```\n\n####  8.1.1. \u003ca name='underlinestyle'\u003e\u003c/a\u003eUnderlineStyle\n\nUnderlineStyle is specified by a number from 0 to 5. This corresponds to the escape sequence values.\n\n| value | description |\n|:------|:------------|\n| 0     | No underline|\n| 1     | Single underline|\n| 2     | Double underline|\n| 3     | Curly underline|\n| 4     | Dotted underline|\n| 5     | Dashed underline|\n\n###  8.2. \u003ca name='customizing-the-bottom-status-line'\u003e\u003c/a\u003eCustomizing the bottom status line\n\n*Added in v0.42.0*\n\nYou can customize the bottom status line.\n\nThe status line is displayed at the bottom of the screen and shows information such as the current file name, cursor position, and other details.\nYou can enable or disable the status line with the `StatusLine` option in the configuration file.\n\n**You can also toggle the status line using the command-line option `--status-line=false` or by pressing the shortcut key (default `ctrl+F10`) during runtime.**\n\n```yaml\nGeneral:\n  StatusLine: false\n```\n\nFor example, to start ov with the status line disabled:\n\n```sh\nov --status-line=false README.md\n```\n\nIf you set `StatusLine` to false, the status line will not be displayed except when necessary (such as during search input).\n\nYou can also customize the appearance and behavior of the status line by modifying the Prompt section in the configuration file.\n\n```yaml\nGeneral:\n  StatusLine: true\n  Prompt:\n    Normal:\n      ShowFilename: true\n      InvertColor: true\n      ProcessOfCount: true\n      CursorType: 0\n    Input:\n      CursorType: 1\n```\n\n| item name | description | default |\n|:----------|:------------|:--------|\n| ShowFilename| Display file name | true |\n| InvertColor| Display file name inverted and changed color| true |\n| ProcessOfCount| Update the progress while counting the number of lines | true |\n| CursorType | Cursor type (see below) | 0 |\n\nCurrently, set CursorType as a number (not all devices support this).\n\n| CursorType | Description |\n|:-----------|:------------|\n| 0 | default |\n| 1 | blinking block(▮) |\n| 2 | steady block(▮) |\n| 3 | blinking underline(_) |\n| 4 | steady underline(_) |\n| 5 | blinking bar(❙) |\n| 6 | steady bar(❙) |\n\n####  8.2.1. \u003ca name='customizing-leftstatus-and-rightstatus-styles'\u003e\u003c/a\u003eCustomizing LeftStatus and RightStatus styles\n\nYou can customize the style of the left and right areas of the status line using `LeftStatus` and `RightStatus` under the `Style` section.\n\n```yaml\nGeneral:\n  Style:\n    LeftStatus:\n      Foreground: \"yellow\"\n      Background: \"blue\"\n      Bold: true\n    RightStatus:\n      Foreground: \"white\"\n      Background: \"gray\"\n      Italic: true\n  Prompt:\n    Normal:\n      InvertColor: false  # Important: Set this to false to enable LeftStatus styles\n```\n\n\u003e [!NOTE]\n\u003e If `InvertColor` is set to `true`, the file name and related areas will be displayed with inverted colors, and the `LeftStatus`/`RightStatus` styles will not be applied.\n\u003e To enable your custom styles, set `InvertColor: false`.\n\n###  8.3. \u003ca name='terminal-title'\u003e\u003c/a\u003eTerminal Title\n\n*Added in v0.45.0*\n\nYou can configure `ov` to set the terminal title to show the currently viewed file name or a custom title. This feature is useful for keeping track of what file you're viewing when using multiple terminal windows or tabs.\n\nThe terminal title can be customized using the `--set-terminal-title` command line option or by configuring it in the `config.yaml` file.\n\n####  8.3.1. \u003ca name='command-line-usage'\u003e\u003c/a\u003eCommand line usage\n\n```console\nov --set-terminal-title README.md\n```\n\n####  8.3.2. \u003ca name='configuration-file'\u003e\u003c/a\u003eConfiguration file\n\n```yaml\nSetTerminalTitle: true\n```\n\n####  8.3.3. \u003ca name='custom-terminal-title'\u003e\u003c/a\u003eCustom terminal title\n\nYou can set a custom title using the `--caption` option (see [Caption](#caption) for more details):\n\n```console\nov --set-terminal-title --caption \"My Custom Title\" README.md\n```\n\nThis will display \"My Custom Title\" in the terminal title instead of the file name.\n\n\u003e [!NOTE]\n\u003e The terminal title will be restored to its original value when `ov` exits.\n\u003e This feature only works with terminal emulators that support ANSI escape sequences for title setting.\n\n###  8.4. \u003ca name='help-and-log-documentation-customization'\u003e\u003c/a\u003eHelp and Log Documentation customization\n\n*Added in v0.42.0*\n\nYou can also customize the Help and Log documentation screens.\nBy adding `HelpDoc` and `LogDoc` entries at the same level as `General` in your configuration file, you can apply the same types of customizations as for `General`.\nThis allows you to individually style and configure the Help and Log screens.\n\n```yaml\nGeneral:\n  Style:\n    Header:\n      Background: \"blue\"\n      Bold: true\n\nHelpDoc:\n  Style:\n    Header:\n      Background: \"green\"\n      Bold: true\n\nLogDoc:\n  Style:\n    Header:\n      Background: \"aqua\"\n      Bold: true\n```\n\nFor example, you can set different colors or styles for the Help and Log screens as shown above.\n\n###  8.5. \u003ca name='key-binding-customization'\u003e\u003c/a\u003eKey binding customization\n\nYou can customize key bindings.\n\n[Example]\n\n```yaml\n    down:\n        - \"Enter\"\n        - \"Down\"\n        - \"ctrl+n\"\n    up:\n        - \"Up\"\n        - \"ctrl+p\"\n```\n\nSee [ov.yaml](https://github.com/noborus/ov/blob/master/ov.yaml) for more information.\n\n\u003e [!NOTE]\n\u003e Some keys may not work depending on the terminal.\n\u003e See also [Ctrl key and corresponding key pairs (commonly treated as the same in terminals)](#ctrl-key-and-corresponding-key-pairs-(commonly-treated-as-the-same-in-terminals)).\n\n###  8.6. \u003ca name='general-configuration'\u003e\u003c/a\u003eGeneral configuration\n\nYou can also customize the `General` configuration in the `config.yaml` file.\n\n\u003e [!NOTE]\n\u003e All `General` configuration items can also be set for each view mode under the `Mode` section.\n\u003e For example, you can specify `MultiColorWords` only for markdown mode as follows:\n\n```yaml\nMode:\n  markdown:\n    MultiColorWords:\n      - \"ERROR\"\n      - \"WARN\"\n      - \"TODO\"\n      - \"FIXME\"\n      - \"NOTE\"\n```\n\n| Name                | Description                                               | Example                         |\n|---------------------|----------------------------------------------------------|---------------------------------|\n| Converter           | Converter name                                            | `Converter: \"es\"`               |\n| Align               | Enable column alignment                                   | `Align: true`                   |\n| Raw                 | Display raw escape sequences without interpretation       | `Raw: true`                     |\n| Caption             | The string to display instead of the file name            | `Caption: \"My Caption\"`         |\n| ColumnDelimiter     | Column delimiter character or regex                       | `ColumnDelimiter: \",\"`          |\n| SectionDelimiter    | Section delimiter (can use regex)                         | `SectionDelimiter: \"^#\"`        |\n| JumpTarget          | Specify jump target line or position                      | `JumpTarget: \"10\"`              |\n| MultiColorWords     | Words to highlight (array)                                | `MultiColorWords: [\"ERROR\", \"WARN\"]` |\n| TabWidth            | Tab stop width                                            | `TabWidth: 4`                   |\n| Header              | Number of header lines to fix                             | `Header: 1`                     |\n| VerticalHeader      | Number of characters to fix as vertical header            | `VerticalHeader: 4`             |\n| HeaderColumn        | Number of columns to fix from the left                    | `HeaderColumn: 2`               |\n| SkipLines           | Number of lines to skip                                   | `SkipLines: 1`                  |\n| WatchInterval       | Watch interval (seconds)                                  | `WatchInterval: 2`              |\n| MarkStyleWidth      | Width to apply the style of the marked line               | `MarkStyleWidth: 1`             |\n| SectionStartPosition| Section start position                                    | `SectionStartPosition: 0`       |\n| SectionHeaderNum    | Number of lines in the section header                     | `SectionHeaderNum: 3`           |\n| HScrollWidth        | Horizontal scroll width (number, percent, or .int)        | `HScrollWidth: \"10%\"`           |\n| HScrollWidthNum     | Horizontal scroll width (number)                          | `HScrollWidthNum: 10`           |\n| VScrollLines        | Vertical scroll lines                                     | `VScrollLines: 2`               |\n| RulerType           | Ruler type (0: none, 1: relative, 2: absolute)            | `RulerType: 1`                  |\n| AlternateRows       | Alternate row styling                                     | `AlternateRows: true`           |\n| ColumnMode          | Enable column mode                                        | `ColumnMode: true`              |\n| ColumnWidth         | Enable column width detection mode                        | `ColumnWidth: true`             |\n| ColumnRainbow       | Enable rainbow coloring for columns                       | `ColumnRainbow: true`           |\n| LineNumMode         | Display line numbers                                      | `LineNumMode: true`             |\n| WrapMode            | Enable line wrapping                                      | `WrapMode: true`                |\n| FollowMode          | Enable follow mode                                        | `FollowMode: true`              |\n| FollowAll           | Enable follow mode for all documents                      | `FollowAll: true`               |\n| FollowSection       | Enable section-based follow mode                          | `FollowSection: true`           |\n| FollowName          | Follow files by name                                      | `FollowName: true`              |\n| PlainMode           | Enable plain (no decoration) mode                         | `PlainMode: true`               |\n| SectionHeader       | Display section header                                    | `SectionHeader: true`           |\n| HideOtherSection    | Hide other sections                                       | `HideOtherSection: true`        |\n| StatusLine          | Display status line at the bottom                         | `StatusLine: true`              |\n| Prompt              | Customize the bottom prompt                               | see [Customizing the bottom status line](#customizing-the-bottom-status-line) |\n\n##  9. \u003ca name='vs'\u003e\u003c/a\u003eVS\n\nThe following software can be used instead. If you are not satisfied with `ov`, you should try it.\n\n* [less](https://github.com/gwsw/less)\n  * `less` is versatile, feature-rich, and the de facto standard for pagers.\n* [most](https://www.jedsoft.org/most/)\n  * `most` is a general-purpose pager with split-window capabilities.\n* [pspg](https://github.com/okbob/pspg)\n  * `pspg` is a pager suitable for output of psql etc.\n* [moor](https://github.com/walles/moor)\n  * `Moor` is a pager. It's designed to just do the right thing without any configuration.\n* [slit](https://github.com/tigrawap/slit)\n  * `slit` is a pager suitable for viewing logs.\n* [lnav](https://lnav.org/)\n  * `lnav` analyzes logs and can be used as a viewer.\n* [peep](https://github.com/ryochack/peep)\n  * `peep` is a pager that can work in a small pane.\n\n##  10. \u003ca name='work-together'\u003e\u003c/a\u003eWork together\n\nThe following are not actually pagers and do not conflict. can work together.\n\n* [bat](https://github.com/sharkdp/bat)\n  * `bat` is an alternative to cat. It supports a lot of highlighting and automatically calls the pager.\n* [delta](https://github.com/dandavison/delta)\n  * `delta` processes the diff for easy viewing and displays it. Call the pager automatically.\n\nPlease look at the [documentation portal](https://noborus.github.io/ov/index.html) to configure them.\n\n##  11. \u003ca name='contributing'\u003e\u003c/a\u003eContributing\n\nWe welcome contributions to this project! Here are some ways you can contribute:\n\n1. Submit bugs and feature requests in the issue tracker.\n2. Review and test open pull requests.\n3. Improve or translate the documentation.\n4. Write code to fix bugs or add new features.\n\nBefore contributing, please read our [Code of Conduct](CODE_OF_CONDUCT.md). We expect all contributors to follow these guidelines to ensure a welcoming and friendly environment for everyone.\n\nTo start contributing:\n\n1. Fork the repository.\n2. Create a new branch for your changes.\n3. Make your changes in your branch.\n4. Submit a pull request with your changes.\n\nWe will review your pull request as soon as possible. Thank you for your contribution!\n","funding_links":["https://github.com/sponsors/noborus"],"categories":["开源类库","Go","\u003ca name=\"viewers\"\u003e\u003c/a\u003eViewers"],"sub_categories":["终端工具"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoborus%2Fov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoborus%2Fov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoborus%2Fov/lists"}