{"id":35268000,"url":"https://github.com/kyx0r/nextvi","last_synced_at":"2026-06-06T20:00:35.225Z","repository":{"id":38423594,"uuid":"318010167","full_name":"kyx0r/nextvi","owner":"kyx0r","description":"A small vi/ex terminal text editor (neatvi rewrite)","archived":false,"fork":false,"pushed_at":"2026-05-30T17:57:06.000Z","size":5087,"stargazers_count":248,"open_issues_count":2,"forks_count":27,"subscribers_count":10,"default_branch":"master","last_synced_at":"2026-05-30T19:21:18.298Z","etag":null,"topics":["c","editor","suckless","tui","vi","vim"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kyx0r.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2020-12-02T22:38:01.000Z","updated_at":"2026-05-29T02:04:54.000Z","dependencies_parsed_at":"2026-03-01T06:01:52.592Z","dependency_job_id":null,"html_url":"https://github.com/kyx0r/nextvi","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/kyx0r/nextvi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyx0r%2Fnextvi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyx0r%2Fnextvi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyx0r%2Fnextvi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyx0r%2Fnextvi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kyx0r","download_url":"https://codeload.github.com/kyx0r/nextvi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyx0r%2Fnextvi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33997731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["c","editor","suckless","tui","vi","vim"],"created_at":"2025-12-30T11:10:22.320Z","updated_at":"2026-06-06T20:00:35.218Z","avatar_url":"https://github.com/kyx0r.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Nextvi(1)                   General Commands Manual                  Nextvi(1)\n\nNAME\n     Nextvi - A small vi/ex terminal text editor\n\nSYNOPSIS\n     vi [-aemsv] [file ...]\n\nDESCRIPTION\n     Nextvi is a modern clone of the command-line text editor vi(1),\n     initially developed by Bill Joy in 1976 for Unix-based systems.\n     Nextvi builds upon many standard features from vi(1) including\n     a unique modal interface that allows users to switch between normal,\n     insert, and command modes for efficient text manipulation.\n     Additional enhancements include an unrestricted macro system,\n     syntax highlighting, keymaps, bidirectional UTF-8 support, and\n     numerous other features. Nextvi remains highly efficient, portable,\n     and hackable, ensuring its continued relevance and high quality\n     for years to come.\n\nOPTIONS\n     -a      Enable alternate terminal screen\n     -e      Enter ex mode on startup\n     -m      Disable initial file read message\n     -s      Enter raw ex mode on startup\n     -v      Unset all options\n\nMANPAGE NOTATION\n     \u003cx\u003e     A closure where x represents a character literal\n     [x]     A closure where x represents optional argument\n     {x}     A closure where x represents required argument\n     \"x\"     A closure where x represents a string\n     \u003c^X\u003e    Represents a ctrl key X\n     \u003c \u003e     Separates alternatives in a closure\n     x-y     Range from x to y\n\nVI NORMAL\n     [#]j          Move # lines down\n     [#]k          Move # lines up\n     [#]+\n     [#]\u003c^M\u003e\n     [#]\u003cEnter\u003e\n                   Move # lines down, cursor after indent\n     [#]-          Move # lines up, cursor after indent\n     [#]h          Move # columns left\n     [#]l          Move # columns right\n     [#]f{arg}     Move to arg character found forward # times\n     [#]F{arg}     Move to arg character found backward # times\n     [#]t{arg}     Move until arg character found forward # times\n     [#]T{arg}     Move until arg character found backward # times\n     [#],          Repeat last \u003cf F t T\u003e move backward # times\n     [#];          Repeat last \u003cf F t T\u003e move forward # times\n     [#]E          Move to end of word # times, skip punctuation\n     [#]e          Move to end of word # times\n     [#]B          Move to start of word backward # times, skip punctuation\n     [#]b          Move to start of word backward # times\n     [#]W          Move to start of word forward # times, skip punctuation\n     [#]w          Move to start of word forward # times\n     vw            Toggle single-line mode for \u003cE e B b W w Space Backspace\u003e\n                   regions\n     [#](          Move to next sentence boundary down # times\n     [#])          Move to next sentence boundary up # times\n     [#]{          Move to next \u003c{\u003e section down # times\n     [#]}          Move to next \u003c{\u003e section up # times\n     [#][          Move to next \u003cNewline\u003e section down # times\n     [#]]          Move to next \u003cNewline\u003e section up # times\n     ^             Move to start of line after indent\n     0             Move to start of line\n     $             Move to end of line\n     [#]|          Goto # column\n     [#]\u003cSpace\u003e    Move # characters forward\n     [#]\u003c^H\u003e\n     [#]\u003cBackspace\u003e\n                   Move # characters backward\n     %             Move to closest \u003c] ) } [ ( {\u003e pair\n     {#}%          Move to # percent line number\n     '{\u003ca-z ` ' [ ] *\u003e}\n                   Move to a line mark\n     `{\u003ca-z ` ' [ ] *\u003e}\n                   Move to a line mark with cursor position\n     gg            Goto first line in buffer\n     [#]G          Move to last line in buffer or # line\n     H             Move to highest line on a screen\n     L             Move to lowest line on a screen\n     M             Move to middle line on a screen\n     z.            Center screen at cursor\n     z\u003c^M\u003e\n     z\u003cEnter\u003e\n                   Center screen at top row\n     z-            Center screen at bottom row\n     [#]\u003c^E\u003e       Scroll down 1 or # lines, retain # and cursor position\n     [#]\u003c^Y\u003e       Scroll up 1 or # lines, retain # and cursor position\n     [#]\u003c^D\u003e       Scroll down half a screen size. If [#], set scroll to #\n                   lines\n     [#]\u003c^U\u003e       Scroll up half a screen size. If [#], set scroll to # lines\n     \u003c^B\u003e          Scroll up full screen size\n     \u003c^F\u003e          Scroll down full screen size\n     #             Show global and relative line numbers\n     2#            Toggle show global line numbers permanently\n     4#            Toggle show relative line numbers after indent permanently\n     8#            Toggle show relative line numbers permanently\n     V             Toggle show hidden characters:\u003cSpace Tab Newline\u003e\n     \u003c^C\u003e          Toggle show line motion numbers for \u003cl h e b E B w W\u003e\n     {\u003c1-5\u003e}\u003c^C\u003e   Select line motion number mode 1-5\n     \u003c^V\u003e          Loop through line motion number modes\n     [#]\u003c^R\u003e       Redo # times\n     [#]u          Undo # times\n     \u003c^I\u003e\n     \u003cTab\u003e\n                   Open file path from cursor to end of line\n     \u003c^K\u003e          Write current buffer to file. Force write on 2nd attempt\n     [#]\u003c^W\u003e{arg}  Unindent arg region # times\n     [#]\u003c{arg}     Indent left arg region # times\n     [#]\u003e{arg}     Indent right arg region # times\n     [#]\"{\u003carg\u003e}{cmd}\n                   Execute normal cmd using register arg. # applies to cmd\n     R             Print registers and their contents\n     [#]\u0026{\u003carg\u003e}   Execute arg register macro in non-blocking mode # times\n     [#]@{\u003carg\u003e}   Execute arg register macro in blocking mode # times\n     [#]@@         Execute last macro # times, blocking\n     [#]\u0026\u0026         Execute last macro # times, non-blocking\n     [#]@:\n     [#]\u0026:\n                   Execute \u003c:\u003e register as an ex command # times\n     [#].          Repeat last normal command # times. Repeatable commands:\n                   \u003cx X D C s S Y p P r d c ~ gu gU g~ ! \u003e \u003c ^W i I a A o O ci\n                   di J K\u003e\n     [#]v.         Repeat last normal command moving down across # lines\n     [#]Q          Enter ex mode. # retains current horizontal scroll\n     :             Enter ex prompt\n     [#]!{arg}     Enter pipe ex prompt based on # or arg region\n     vv            Enter ex prompt with the last line from history buffer b-1\n     [#]vr         Enter %s/ ex prompt. Insert # words from cursor\n     [#]vt[#arg]   Enter .,.+0s/ ex prompt. Insert # of lines from cursor.\n                   Insert #arg words from cursor\n     [#]v/         Enter re ex prompt to set regex keyword. Insert # words\n                   from cursor\n     v;            Enter ! ex prompt\n     [#]vi         Enter %s/ ex prompt. Contains regex for changing spaces to\n                   tabs. # modifies tab width\n     [#]vI         Enter %s/ ex prompt. Contains regex for changing tabs to\n                   spaces. # modifies tab width\n     vo            Remove trailing white spaces and \u003c\\r\u003e line endings\n     \u003c^G\u003e          Print buffer status info\n     1\u003c^G\u003e         Enable permanent status row\n     2\u003c^G\u003e         Disable permanent status row\n     ga            Print character info\n     1ga           Enable permanent character info row\n     2ga           Disable permanent character info row\n     [#]gw         Hard word wrap a line to # column limit. Default: 80\n     [#]gq         Hard word wrap a buffer to # column limit. Default: 80\n     [#]g~{arg}    Switch character case for arg region # times\n     [#]gu{arg}    Switch arg region to lowercase # times\n     [#]gU{arg}    Switch arg region to uppercase # times\n     [#]~          Switch character case # times forward\n     i             Enter insert mode\n     I             Enter insert mode at start of line after indent\n     A             Enter insert mode at end of line\n     a             Enter insert mode 1 character forward\n     o             Create a new line down and enter insert mode\n     O             Create a new line up and enter insert mode\n     [#]s          Delete # characters and enter insert mode\n     [#]S          Delete all across # lines and enter insert mode\n     [#]c{arg}     Delete arg region # times and enter insert mode\n     C             Delete from cursor to end of line and enter insert mode\n     [#]d{arg}     Delete arg region # times\n     D             Delete from cursor to end of line\n     [#]x          Delete # characters from cursor forward\n     [#]X          Delete # characters from cursor backward\n     di{\u003carg\u003e}     Delete inside arg pairs\n     ci{\u003carg\u003e}     Change inside arg pairs\n     [#]r{arg}     Replace # characters with arg from cursor forward\n     [#]K          Split a line # times\n     [#]J          Join # lines\n     [#]y{arg}     Yank arg region # times\n     [#]Y          Yank # lines\n     [#]p          Paste default register below current line or after cursor\n                   position # times\n     [#]P          Paste default register above current line or before cursor\n                   position # times\n     m{\u003ca-z ` ' [ ] *\u003e}\n                   Set buffer local line mark\n     \u003c^T\u003e          Set global line mark 0. Global marks are always valid\n     {\u003c0 2 4 6 8\u003e}\u003c^T\u003e\n                   Set a global line mark #\n     {\u003c1 3 5 7 9\u003e}\u003c^T\u003e\n                   Switch to a global line mark #\n     [#]\u003c^7\u003e{\u003c0-9\u003e}\n     [#]\u003c^_\u003e{\u003c0-9\u003e}\n     [#]\u003c^/\u003e{\u003c0-9\u003e}\n                   Show buffer list and switch based on # or 0-9 index when\n                   prompted\n     \u003c^^\u003e\n     \u003c^6\u003e\n                   Swap to previous buffer\n     [#]\u003c^N\u003e       Swap to next buffer, # changes direction [forward backward]\n     \\             Swap to /fm/ buffer b-2\n     {#}\\          Refresh secondary directory listing in b-2\n     vb            Recurse into b-1 history buffer. Insert current line into\n                   ex prompt on exit\n     z1            Set alternative keymap to Farsi keymap\n     z2            Set alternative keymap to Russian keymap\n     ze            Switch to English keymap\n     zf            Switch to alternative keymap\n     zL            Set td ex option to 2\n     zl            Set td ex option to 1\n     zr            Set td ex option to -1\n     zR            Set td ex option to -2\n     [#]/          Regex search prompt, move down 1 or # matches\n     [#]?          Regex search prompt, move up 1 or # matches\n     [#]n\n     [#]N\n                   Repeat regex search, move [down up] 1 or # matches\n     \u003c^A\u003e          Regex search 1 word from cursor, no center, wraparound move\n                   [up down]\n     *             Regex search, no center, wraparound move [up down]\n     {#}*\n     {#}\u003c^A\u003e       Regex search, set keyword to # words from cursor\n     \u003c^]\u003e          Filesystem regex search forward based on directory listing\n                   in b-2. Sets global line mark 0 for \u003c^P\u003e fallback\n     {#}\u003c^]\u003e       Filesystem regex search forward, set keyword to # words\n                   from cursor\n     [#]\u003c^P\u003e       Filesystem regex search backward\n     \u003c^Z\u003e          Suspend vi\n     \u003c^L\u003e          Force redraw whole screen and update terminal dimensions\n     Z{\u003cAny\u003e}      Force exit and clean terminal, force quit in an \u0026 macro\n     Zz            Force exit and submit history command, force quit in an \u0026\n                   macro\n     ZZ            Exit and write unsaved changes to a file\n     \u003cESC ^C\u003e      Cancel any pending input or command\n\nVI REGIONS\n     Regions are vi normal commands that define [h v]range for vi motions.\n     Commands described with the word \"move\" define a region.\n\n     j + \u003c^M\u003e \u003cEnter\u003e - k h l f F t T , ; B E b e W w ( ) { } [ ] ^ 0 $\n             \u003cSpace\u003e \u003c^H\u003e \u003cBackspace\u003e % ' ` G H L M / ? n N * \u003c^A\u003e\n\n             All regions\n\nVI MOTIONS\n     Motions are vi normal commands that run in a [h v]range.\n     Commands described with the word \"region\" consume a region.\n     Motions can be prefixed or suffixed by [#].\n\n     \u003c^W\u003e \u003e \u003c ! c d y g~ gu gU\n             All motions\n\n     dd yy cc g~~ guu gUU \u003e\u003e \u003c\u003c \u003c^W\u003e\u003c^W\u003e !!\n             Special motions that can use [#] as number of lines\n\n     Examples:\n     3d/int  Delete text until 3rd instance of \"int\" keyword\n     3dw     Delete 3 words (prefix [#])\n     d3w     Delete 3 words (suffix [#])\n     \"ayl    Yank a character into \u003ca\u003e register\n     \"Ayw    Append a word to \u003ca\u003e register\n\nVI/EX INSERT\n     \u003c^H\u003e\n     \u003cBackspace\u003e\n                   Delete a character, reset ex mode when empty\n     \u003c^U\u003e          Delete until \u003c^X\u003e mark or all\n     \u003c^W\u003e          Delete a word\n     \u003c^T\u003e          Increase indent\n     \u003c^D\u003e          Decrease indent\n     \u003c^]\u003e          Select paste register from 0-9 registers in a loop\n     \u003c^\\\u003e{\u003carg\u003e}   Select paste register arg. \u003c^\\\u003e selects default register\n     \u003c^P\u003e          Paste a register\n     \u003c^X\u003e          Mark autocomplete and \u003c^U\u003e starting position. \u003c^X\u003e resets\n                   the mark\n     \u003c^G\u003e          Index current buffer for autocomplete\n     \u003c^Y\u003e          Reset all indexed autocomplete data\n     \u003c^R\u003e          Loop through autocomplete options backward\n     \u003c^N\u003e          Loop through autocomplete options forward\n     \u003c^B\u003e          Print autocomplete options when in vi insert\n     \u003c^B\u003e          Recurse into b-1 history buffer when in ex prompt. Insert\n                   current line into ex prompt on exit\n     \u003c^A\u003e          Loop through lines in a history buffer b-1\n     \u003c^Z\u003e          Suspend vi/ex\n     \u003c^L\u003e          Redraw screen in vi mode, clean terminal in ex\n     \u003c^O\u003e          Switch between vi and ex modes recursively\n     \u003c^E\u003e          Switch to English keymap\n     \u003c^F\u003e          Switch to alternative keymap\n     \u003c^V\u003e{\u003carg\u003e}   Read a literal character arg\n     \u003c^K\u003e{arg}     Read a digraph sequence arg\n     \u003c^C\u003e\n     \u003cESC\u003e\n                   Exit insert mode in vi, reset in ex\n     \u003c^M\u003e\n     \u003cEnter\u003e\n                   Insert \u003cNewline\u003e in vi, submit command in ex\n\nEX\n     Ex is a powerful line editor for Unix systems, initially developed\n     by Bill Joy in 1976. This essential tool serves as the backbone\n     of vi, enabling it to execute commands, macros and even transform\n     into a purely command-line interface (CLI) when desired.\n\nEX PARSING\n     Parsing follows the structure:\n     [\u003csep\u003e][prefix][cmd][\u003cpad\u003e][args]\n     Ex commands are initiated and separated by \u003csep\u003e. Fields can be\n     padded by \u003cSpace\u003e or \u003cTab\u003e. [prefix] is a field consumed by [cmd],\n     which accepts [range] structure characters. Padding inside [prefix]\n     structure is collapsed, except within nested structures. There\n     can only be one pad in between [cmd] and [args]. To avoid ambiguity\n     in scripts, it is recommended to always use a pad between [cmd]\n     and [args].\n\n     Examples:\n     :evi.c\n             Evaluates to \":e vi.c\"\n     :efbc\n             Evaluates to \":ef bc\" not \":e fbc\"\n     :e  vi.c\n             Edit \" vi.c\". \u003cpad\u003e is required\n\nEX ESCAPES\n     Special characters in [args] will become regular when escaped\n     with \u003c\\\u003e.\n\n     ( ^ ] -\n             Specials in regex \"[]\" expression\n     ( ) { + * ? ^ $ [ ] | \\ . \\\u003c \\\u003e\n             Specials in regex\n     \\ : % !\n             Specials in ex\n\nEX EXPANSION\n     \u003c%\u003e in [args] expands to current buffer pathname or any buffer\n     pathname when followed by a corresponding buffer number.\n     \"%#\" expands to last swapped buffer pathname.\n     \"%@\" expands to register specified.\n\n     Example: make a copy of the current file and edit it\n     :!cp % %_:e %_\n     Example: insert current buffer pathname\n     :\u0026i%\n     Example: echo the value of \u003ca\u003e register\n     :!echo \"%@a\"\n\n     \u003c!\u003e in [args] starts and optionally ends a block containing\n     external commands. This block executes and expands to stdout\n     and stderr produced.\n\n     Example: substitute \"int\" with the value of $RANDOM\n     :%s/int/!printf \"%s\" $RANDOM!\n     Example: insert output of ls shell command\n     :\u0026i!ls\n     Example: insert output of ls more efficiently\n     :;c!ls!\u003c^V\u003e\u003cESC\u003e\n\nEX RANGES\n     Some ex commands can be prefixed with ranges.\n     [range] prefix implements vertical and horizontal ranges.\n     [vrange] prefix implements vertical range and horizontal position.\n     Without [cmd], [vrange] replaces [prefix].\n\n     [% |][, ;][#][. $ ' \u003e \u003c][- + * / %][0-9]\n             All ranges structure\n     {|}{cmd}[|]\n             Ex command structure\n     {\u003e}[regex][\u003e]\n             Search forward structure\n     {\u003c}[regex][\u003c]\n             Search backward structure\n     '{\u003cmark\u003e}\n             Mark structure\n\n     %       Range from first to last line\n     |       Begin ex command structure\n     ,       Vertical range separator\n     ;       Horizontal range separator\n     #       Rebase to previous value in range structure\n     .       Current position\n     $       Last line of a buffer or end of line\n     '       Begin mark structure\n     \u003e       Begin search forward structure\n     \u003c       Begin search backward structure\n     -       Subtract following number\n     +       Add following number\n     *       Multiply by the following number\n     /       Divide by the following number\n     %       Modulo by the following number\n     0-9     Number or position\n\n     Examples:\n     :1,5p   Print lines 1,5\n     :.-5,.+5p\n             Print 5 lines around current position\n     :\u003eint\u003ep\n             Print first occurrence of \"int\"\n     :\u003cint\u003cp\n             Print first occurrence of \"int\" in reverse\n     :.,\u003eint\u003ep\n             Print until \"int\" is found\n     :\u003cint\u003c,.p\n             Print until \"int\" is found in reverse\n     :\u003e      Search using previously set regex keyword\n     :'d,'ap\n             Print lines from mark \u003cd\u003e to mark \u003ca\u003e\n     :%p     Print all lines in a buffer\n     :$p     Print last line in a buffer\n     :$*50/100+1\n             Goto 50% of the file\n     :;50    Goto character offset 50\n     :10;50  Goto line 10 character offset 50\n     :10;.+5\n             Goto line 10 +5 character offset\n     :'a;'a  Goto line mark \u003ca\u003e offset mark \u003ca\u003e\n     :;$     Goto end of line\n     :5;\u003eint\u003e\n             Search for \"int\" on line 5\n     :.;\u003cint\u003c\n             Search for \"int\" in reverse on the current line\n     :;5;+10=\n             +10 is relative to the initial current offset, not 5\n     :;5;#+10=\n             +10 is relative to 5\n     :;\u003eint\u003e+3;#\u003e\u003ep\n             Print text enclosed by \"int\" on the current line\n     :|grp1|;\u003e(a)+\u003e+1|grp|;#\u003e\u003ep\n             Print text enclosed by a non-deterministic pattern \"a+\"\n\nEX COMMANDS\n     [range]f\u003e[regex]\n     [vrange]f\u003c[regex]\n             Ranged search\n\n             Horizontal range performs a scoped multi-line search forward.\n             In multi-line mode, \u003cNewline\u003e is a regular character.\n             Returns error if target not found.\n\n             Example: no range given, current line only\n             :f\u003eint\n             Example: reverse\n             :f\u003cint\n             Example: range given\n             :10,100f\u003eint\n             Example: search for \"int\" followed by \"void\" on next line\n             :%;0f\u003eint.void\n\n     [range]f+[regex]\n     [vrange]f-[regex]\n             Incrementing ranged search\n\n             Equivalent to the :f\u003e and :f\u003c commands, except subsequent commands\n             within range move to the next match just like vi normal [#]n\n             or [#]N commands.\n\n     [vrange]f[regex]\n             Fuzzy search prompt\n\n             Enters a fuzzy search prompt with a list of matches.\n             Matches are prefixed by selection numbers and line numbers.\n             Match can be selected using numbers 0-9 if there are less than\n             10 matches.\n             \u003c^C\u003e or \u003cESC\u003e to abort.\n             \u003c^M\u003e or \u003cEnter\u003e to input a selection number larger than 9.\n\n             No range evaluates to \u003c%\u003e range.\n             No range displays a maximum of xrows * 3 matches.\n\n     [vrange]g[\u003cAny\u003e][regex][\u003cAny\u003e][cmd]\n             Global command\n\n             Execute an ex command on a range of lines that matches an\n             enclosed regex.\n             Returns error if no line matches the pattern.\n\n             No range evaluates to \u003c%\u003e range or \u003c.\u003e range when nested.\n\n             Example: remove all empty lines\n             :g/^$/d\n\n             Example: print lines matching previously set regex\n             :g//p\n\n             Multiple ex commands can be chained in one global command.\n             To chain commands, the ex separator \u003c:\u003e must be escaped once.\n\n             Example: print and append lines matching \"int\" to register \u003ca\u003e\n             :g/int/p\\:ya ax\n\n             It is possible to nest global commands inside of global commands.\n             The first global command will not be executed on lines that\n             were changed by a nested global command.\n\n             Example: nested global command\n             Append \"has a semicolon\" to all lines that contain \"int\" and\n             end with \u003c;\u003e.\n             :g/int/g/;$/\u0026 A has a semicolon\n\n             Example: extract/print data enclosed in \"()\"\n             :grp1:err4:g/./;0\\:;\u003e(\\().+\\)\u003e;#\u003e.+(\\))\u003e+1p:err1:grp\n\n     [vrange]g![\u003cAny\u003e][regex][\u003cAny\u003e][cmd]\n             Inverted global command\n\n     [range]re[regex]\n             Set regex keyword\n\n             Range escapes its text and uses it as the regex.\n\n             Example: set keyword to \"int\"\n             :re int\n             Example: set keyword from lines 1 to 3\n             :1,3re\n\n     [vrange]i[str]\n             Enter ex insert mode before specified position\n\n             [str] specifies initial input into the insertion buffer.\n             [str] in raw ex mode is injected directly and bypasses the\n             interactive mode.\n\n             Example: insert \"hello\" in vi/ex\n             :i hello\u003c^M\u003e\u003cESC\u003e\n             Example: insert \"hello\" in vi/ex trimming \u003cNewline\u003e\n             :i hello\u003c^M\u003e\u003c^M\u003e\u003cBackspace\u003e\n             Example: discard changes in vi/ex\n             :i hello\u003c^M\u003e\u003c^C\u003e\n             Example: immediately insert \"hello\"\n             :i hello\u003c^V\u003e\u003cESC\u003e\n             Example: insert \"hello\" in raw ex mode\n             i hello\n             Example: insert two lines in raw ex mode\n             i hello\u003c^M\u003eworld\n             Example: insert \"hello\" in raw ex mode (interactive)\n             i\u003c^M\u003ehello\u003c^M\u003e.\u003c^M\u003e\n\n     [vrange]a[str]\n             Enter ex insert mode after specified position\n\n     [range]c[str]\n             Enter ex change mode\n\n             In combination with seq and lim ex options, this command is\n             optimal for modifying very long lines.\n             Max insertion buffer is ~1.33GB on a 32 bit build.\n             Max addressable line is 2.0GB on a 32 bit build.\n\n             Example: replace current line with \"hello\"\n             :c hello\u003c^M\u003e\u003cESC\u003e\n             Example: replace lines 1-5 with \"hello\"\n             :1,5c hello\u003c^M\u003e\u003cESC\u003e\n             Example: insert \"hello\" at current character offset\n             :;c hello\u003c^M\u003e\u003cESC\u003e\n             Example: insert \"hello\" at end of line\n             :;$c hello\u003c^M\u003e\u003cESC\u003e\n             Example: insert \"hello\" at line 5 and end of line\n             :5;$c hello\u003c^M\u003e\u003cESC\u003e\n             Example: delete 5 characters from current position\n             :;;+5c\u003c^M\u003e\u003cESC\u003e\n\n     [range]d\n             Delete line(s)\n\n             Example: delete from current position to the start of the buffer\n             :1,.;0;d\n             Example: delete from current position to the end of the buffer\n             :.,$;;$d\n\n     [vrange]j[any]\n             Join line(s)\n\n             Any argument activates padding mode.\n             Returns error if there is nothing to join.\n\n             Example: join all lines\n             :%-1j\n             Example: join all lines with space padding\n             :%-1j x\n\n     [vrange]s[\u003cAny\u003e][regex][\u003cAny\u003e][str][\u003cAny\u003e][\u003cg\u003e]\n             Substitute\n\n             Find and replace text in a range of lines that matches an\n             enclosed regex with an enclosed replacement string.\n             Returns error if no substitution is performed.\n\n             Example: global replacement\n             :%s/term1/term2/g\n\n             Example: replace matching previously set regex\n             :%s//term2/g\n\n             Substitution backreference inserts the text of matched group\n             specified by \\x where x is group number.\n\n             Example: substitution backreference\n             this is an example text for subs and has int or void\n             :%s/(int)|(void)/pre\\0after\n             this is an example text for subs and has preintafter or void\n             :%s/(int)|(void)/pre\\2after/g\n             this is an example text for subs and has prepreafterafter or prevoidafter\n\n     ud      Undo\n\n             Returns error if there is nothing to undo.\n\n     rd      Redo\n\n             Returns error if there is nothing to redo.\n\n     [range]p[str]\n             Print line(s) from a buffer\n\n             No range prints a line based on the value of left ex option.\n             Argument prints the evaluated argument.\n\n             Example: utilize character offset ranges\n             :1,10;5;5p\n             Example: interleaved character offset ranges\n             :1;5,10;5p\n             Example: print current line from offset 5 to 10\n             :.;5;10p\n             Example: print buffer pathname\n             :p %\n\n     [range]=[\u003c0-3 Any\u003e][any]\n             Print range numbers\n\n             Argument 0-3 selects a specific number.\n             Any or any extra argument circumvents buffer range check.\n             No argument prints all range numbers.\n\n             Example: print current character offset only\n             :;= 2\n             Example: print value of mark \u003ca\u003e\n             :'a=\n             Example: calculate 75 - 100\n             :,75-100=1p\n\n     =?[any]\n             Print last error\n\n             Any argument forwards the error status.\n\n     [range]m{marks}\n             Set line mark(s)\n\n             Valid marks: \u003ca-z ` ' [ ] *\u003e\n\n             Example: store ranges in \u003ca\u003e and \u003cs\u003e for later reuse in :f\u003e\n             :\u003etop\u003e,#\u003ebottom\u003em as:'a,'sf\u003emiddle\n\n     [range]ya[\u003creg\u003e][any]\n             Yank into a register\n\n             Argument value range is 0x1-0xff and 0x0 without.\n             Any extra argument appends to the register.\n             Default register cannot be appended to.\n\n             Example: append to register \u003c1\u003e\n             :ya 1x\n             Example: yank into \u003ca\u003e using ranges\n             :1,5;5;5ya a\n\n     ya![\u003creg\u003e]\n             Free a register\n\n     [range]pu[\u003creg\u003e][any][\\!{cmd}]\n             Paste or pipe a register\n\n             Example: paste \u003ca\u003e at line 1 character offset 5\n             :1;5pu a\n             Example: copy default register to X11 clipboard\n             :pu \\!xclip -selection clipboard\n             Example: copy register \u003ca\u003e to X11 clipboard\n             :pu a \\!xclip -selection clipboard\n\n     [0-255]reg[str]\n             Print registers or put into a register\n\n             Prefix selects a register and argument replaces its contents.\n\n             Example: shift the printing position to view offscreen register parts\n             :1left:reg\n             Example: put \"hello\" into register \u003c1\u003e\n             :49reg hello\n\n     [0-255]reg+[str]\n             Print registers or append to a register\n\n     e[path]\n             Open a file at a path\n\n             No argument opens \"unnamed\" buffer.\n             Files larger than 2.0GB are truncated on a 32 bit build.\n             Line breaking happens until the first null terminator or EOF.\n\n     e![path]\n             Force open a file at a path\n\n             No argument re-reads the current buffer from the filesystem.\n\n     [vrange]ef[regex]\n             Open file using fuzzy search prompt\n\n             Requires the b-2 buffer to have a directory listing backfilled.\n\n             Example: backfill b-2 using :fd\n             :fd\n             Example: backfill b-2 using find\n             :b-2:%!find .\n\n             Prompt behavior is equivalent to the :f command.\n\n             Example: enter prompt \u0026 print entire listing\n             :ef\n             Example: search for pathname containing \"v\"\n             :ef v\n\n     [vrange]ef![regex]\n             Forced version of :ef\n\n     [range]r[path]\n     [range]r[\\!{cmd}]\n             Read a file or a pipe\n\n             Range is computed on a target.\n             No range evaluates to \u003c%\u003e range.\n             No argument evaluates to current buffer path.\n\n             Example: read a file\n             :r vi.c\n             Example: pipe in all data\n             :r \\!ls\n             Example: pipe in only lines 3,5\n             :3,5r \\!ls\n\n     [range]w[path]\n     [range]w[\\!{cmd}]\n             Write a file or a pipe\n\n             No range evaluates to \u003c%\u003e range.\n             No argument evaluates to current buffer path.\n\n             Example: write a file\n             :w vi.c\n             Example: pipe out all data into less\n             :w \\!less\n             Example: pipe out only first 10 lines\n             :1,10w \\!less\n\n     [range]w![path]\n             Force write a file\n\n     [range]wq[path]\n     [range]wq[\\!{cmd}]\n             Write a file or a pipe and exit\n\n     [range]wq![path]\n     [range]wq![\\!{cmd}]\n             Force write a file or a pipe and force quit\n\n     [range]x[path]\n             Write unsaved changes and exit\n\n     [range]x![path]\n             Force write unsaved changes and force quit\n\n     [#lvl]q[#code]\n     [#lvl]q![#code]\n             Exit or force quit\n\n             [#code] specifies shell exit code.\n             [#lvl] defines the number of scopes to exit.\n\n             Example: conditionally exit this scope and 1 above\n             :%f\u003emarker:??!p no marker\\:1q:s/old/new/g:w\n\n     b[index]\n             Print buffers or switch to a buffer\n\n             Temporary buffers are separate from the main buffers\n             and are selected by a negative index.\n\n             Example: switch to the 5th buffer\n             :b5\n             Example: switch to the /hist/ ex history buffer\n             :b-1\n             Example: switch to the /fm/ directory listing buffer\n             :b-2\n             Example: switch to the /sc/ scratch buffer\n             :b-3\n\n     bp[path]\n             Set current buffer path\n\n     bs[any]\n             Set current buffer saved\n\n             Argument resets undo/redo history\n\n     bx[#]   Set max number of buffers allowed\n\n             Buffers will be deallocated if the number specified is lower\n             than the number of buffers currently in use.\n             No argument will reset to the default value of 10.\n\n     cd[path]\n             Set a working directory\n\n             No argument relinks the current directory in case it got removed\n             or unmounted.\n\n             Currently open buffers' file paths will be automatically adjusted\n             to reflect a newly set working directory.\n\n     fp[path]\n             Clear or set a secondary directory path\n\n     fd[path]\n             Calculate directory listing in b-2 buffer\n\n             No argument uses secondary or a working directory path.\n\n     inc[regex]\n             Include regex for :fd calculation\n\n             No argument disables the filter.\n\n             Example: include only files in submodule directory that end with .c\n             :inc submodule.*\\.c$\n             Example: exclude .git and submodule folders\n             :inc (^(?\\:(?\\!^\\.git|^submodule).)+[^/]+$)\n\n     [range]![cmd]\n             Run an external program\n\n             When a range is specified, the buffer's data is piped to an external\n             program. The resulting stdout and stderr are then piped back into the\n             buffer, replacing the contents of the original range.\n\n             Example: infamously sort a buffer\n             :%!sort\n             Example: replace \"int\" with \"uint\" using sed\n             :%!sed -e 's/int/uint/g'\n             Example: pipe in result of ls command without line replacement\n             :;$+1!ls\n             Example: capitalize word at current position using tr\n             :;;\u003e\\\\\u003e\u003e!tr '[\\:lower\\:]' '[\\:upper\\:]'\n\n     \u0026{macro}\n             Global non-blocking macro\n\n             Execute raw vi input sequence.\n             A non-blocking macro shall not wait for input when the end of\n             the sequence is reached. A non-blocking macro executing other\n             macros will always reach a terminating point.\n\n             Example: execute vi insert statement\n             :\u0026 ihello\n             Example: execute :hello\n             :\u0026 \\:hello\u003c^V\u003e\u003c^M\u003e\n             Example: execute vi \"ci(int\" macro\n             :\u0026 ci(int\n             Example: nest blocking macro inside non-blocking\n             :\u0026 \\:@ \\\\\\:blocking\u003c^V\u003e\u003c^M\u003ei continue in non-blocking\n             Example: enable permanent vi line numbers\n             :\u0026 2#\n\n     @{macro}\n             Global blocking macro\n\n             Execute raw vi input sequence.\n             A blocking macro shall wait for input when the end of the sequence\n             is reached. A blocking macro executing other macros may cause\n             input congestion.\n\n             Example: execute vi insert statement\n             :@ ihello\n             Example: insert \"hello\" into \u003c:\u003e vi prompt\n             :@ \\:hello\n             Example: execute vi \"ci(int\" macro\n             :@ ci(int\n             Example: execute \"ci(int\" exiting insert mode\n             :@ ci(int\u003c^V\u003e\u003c^C\u003e\n             Example: execute \"ci)INT\" as a follow-up\n             :@ ci(int\u003c^V\u003e\u003c^C\u003eci)INT\n             Example: execute vi \"dw\" command after user exits insert\n             :@i:@dw\n\n     [#count \u003c$\u003e]?[cond][\u003c?\u003e][then][\u003c?\u003e][else]\n             While loop conditional\n\n             Repeat [cond] [#count] times or infinite with [\u003c$\u003e].\n             While loop is broken once [cond] returns an error or count exceeded.\n             Error status of [cond] is forwarded.\n             No prefix creates a conditional with [#count] set to 1.\n\n             Example: attempt to join every line in file using arbitrary count\n             :10000? \u0026 J\n             Example: undo everything\n             :$? ud\n             Example: repeat chain of ex commands 10 times\n             :10? 1p\\:5p\\:10p\n             Example: calculate directory only if :cd succeeded\n             :? cd /blah?fd\n             Example: print a line only if it contains \"int\" at offset 5\n             :? ;5;#\u003e^int\u003e?p\n             Example: edit vi.c only if it exists\n             :? \\![ -f ./vi.c ]?e ./vi.c:mpt1\n\n     [#count \u003c$\u003e]?![cond][\u003c?\u003e][else][\u003c?\u003e][then]\n             Inverted while loop conditional\n\n     [prefix]??[then][\u003c?\u003e][else]\n     {prefix}??\n             Conditional\n\n             Unlike while loop conditional, branching depends on the error\n             status of the last command, reducing the number of escapes required.\n\n             A prefix without arguments captures the current error status\n             at that point in a command chain into id tag specified.\n             Id tags are global across all nested command contexts.\n\n             A prefix with arguments branches based on the boolean expression\n             in DNF over the most recent captures of each referenced id.\n             If any id has no capture, neither branch executes.\n\n             Prefix operators:\n             Numerical id tag\n             , AND (higher precedence)\n             ; OR (lower precedence)\n\n             Example: capture error status at id 5, branch later\n             :\u003eint\u003e:5??:;=:5??p\n             Example: skip if tag was never set\n             :2??.=?.=\n             Example: AND -- branch only if both ids captured success\n             :f\u003eint:1??:f\u003evoid:2??:1,2??p found both\n             Example: OR -- branch if either id captured success\n             :f\u003eint:1??:f\u003evoid:2??:1;2??p found one\n             Example: DNF -- (1 AND 2) OR (3 AND 4)\n             :1,2;3,4??p then?p else\n             Example: inverted capture -- capture NOT of last status\n             :f\u003eint:1??!:1??p int was absent\n\n     [prefix]??![else][\u003c?\u003e][then]\n     {prefix}??!\n             Inverted conditional\n\n     {prefix}???\n             Evaluate prefix tags\n\n             This is a nop command that evaluates a boolean expression\n             at prefix and returns the result.\n\n             Example: control while loop from its [then] argument\n             $?0\\?\\?\\??+1\\:0\\?\\?\\:f\u003eint\\:\\?\\?p\n\n     ft[filetype]\n             Set a filetype\n\n             No argument prints the current file type.\n             Reloads the highlight ft, which makes it possible to reset dynamic\n             highlights created by options like \"hlw\".\n\n     cm[keymap]\n             Set a keymap\n\n             No argument prints the current keymap name.\n\n     cm![keymap]\n             Set an alternative keymap\n\n     ac[regex]\n             Set autocomplete filter regex\n\n             No argument resets to the default word filter regex as defined\n             in led.c.\n\n             Example: autocomplete using whole lines from a buffer\n             :ac .+\n\n     [\u003c0-3\u003e]sc[\u003cesc\u003e][\u003csep\u003e][\u003cexp\u003e][\u003cexe\u003e]\n             Set ex special characters\n\n             Prefix selects a specific character to change.\n             Missing arguments default to \u003c\\ : % !\u003e.\n\n             Example: change \u003c%\u003e to \u003ca\u003e\n             :2sc a\n             Example: utilize newly set separator in a single command chain\n             :|1sc a|: p cmd1 a p cmd2 a|sc|a0?:p cmd3\n\n     [\u003c0-3\u003e]sc![\u003cesc\u003e][\u003csep\u003e][\u003cexp\u003e][\u003cexe\u003e]\n             Set ex special characters\n\n             Missing arguments default to \u003c0x0\u003e.\n\n             Example: disable \u003cexp\u003e and \u003cexe\u003e\n             :sc! \\\\\\:\n\n     uc      Toggle multi-byte utf-8 decoding\n\n             This command is particularly useful when editing files with\n             mixed encodings, binary files, or when the terminal does not\n             support UTF-8 or lacks the necessary fonts to display UTF-8\n             characters. It is often paired with :ph command to achieve\n             hex editor-like functionality.\n\n     uz      Toggle zero-width character placeholders\n\n             Hides zero-width characters rather than rendering them as placeholders.\n\n     ub      Toggle multi-codepoint sequence placeholders\n\n             Passes multi-codepoint sequences such as emojis to the terminal\n             for native rendering rather than substituting placeholders.\n\n     ph[#clow] [#chigh] [#width] [#blen][str]\n             Redefine placeholders\n\n             This command replaces placeholders defined in conf.c\n             and subsequent :ph commands expand the list of placeholders.\n\n             Example: render 8 bit ascii (Extended ASCII) as \u003c~\u003e\n             :ph 128 255 1 1~\n             Example: flawless ISO/IEC 8859-1 (latin-1) support\n             :uc:ph 128 160 1 1~\n             Example: render control byte 03 as \"^C\"\n             :ph 3 3 2 1^C\n             Example: reset to default as in conf.c\n             :ph\n             Example: disable default placeholders in conf.c\n             :ph:ph0\n\nEX OPTIONS\n     Ex options are ex commands designed to alter global variables.\n     Values hold a signed integer. Values may represent a character.\n     Default value is specified in val= as part of an argument notation.\n     No argument inverts the current value, unless stated otherwise.\n\n     ai[val=1]\n             Indent new lines\n\n             This is a max indent length multiplier: val * 128\n\n     ic[val=1]\n             Ignore case in regular expressions\n\n     ish[val=0]\n             Interactive shell\n\n             Run every \u003c!\u003e command through an interactive shell.\n             The shell will source the .rc file before command execution.\n             This makes it possible to use predefined functions, aliases\n             and ENV variables from the .rc file.\n             Precondition 1:\n                     .rc refers to a shell-specific filename, such as .bashrc\n                     in Bash or .zshrc in Zsh.\n             Precondition 2:\n                     The environment variable $SHELL determines the default\n                     shell, otherwise it defaults to /bin/sh.\n             Precondition 3:\n                     There must be no stdout or stderr output created by .rc\n                     file for \u003c!\u003e commands to return expected results.\n\n     grp[val=0]\n             Regex search group\n\n             Defines a target search group for any regex search operation.\n             This becomes necessary when the result of a regex search is to\n             be based on some group rather than the default match group.\n\n             Example: position on a character prefixed by \"int\"\n             :grp 1:%f+int(.):grp\n\n     hl[val=1]\n             Highlight text based on rules defined in conf.c\n     hlr[val=0]\n             Highlight text in reverse direction\n     hll[val=0]\n             Highlight current line based on filetype hl\n     hlp[val=0]\n             Highlight \"[]\" \"()\" \"{}\" pairs based on filetype hl\n     hlw[val=0]\n             Highlight current word based on filetype hl\n     led[val=1]\n             Enable all terminal output\n\n     vis[val=0]\n             Control startup flags\n\n             bit 1: raw ex mode\n             bit 2: ex mode\n             bit 3: disable :e message\n             bit 4: alternate terminal screen\n\n             Example: enable raw ex mode\n             :vis 3\n             Example: disable raw ex mode\n             :vis 2\n\n     mpt[val=0]\n             Control vi prompts\n\n             When set to 0 or 1 after an ex command is called from vi, disables\n             the \"[any key to continue]\" prompt.\n             If mpt is negative, the prompt will remain disabled.\n\n             Example: block the prompt and the last print\n             :p:p:p:mpt 0\n             Example: block the prompt but not the last print\n             :p:p:p:mpt 1\n\n     order[val=1]\n             Reorder characters based on rules defined in conf.c\n     shape[val=1]\n             Perform Arabic script letter shaping\n     pac[val=0]\n             Print autocomplete suggestions on the fly\n     ts[val=8]\n             Number of spaces used to represent a tab\n     td[val=1]\n             Current text direction context\n\n             This option accepts four meaningful values:\n             2       Exclusively left-to-right\n             1       Follow dctxs[] (in conf.c), defaulting to left-to-right\n             -1      Follow dctxs[], defaulting to right-to-left\n             -2      Exclusively right-to-left\n\n     pr[val=0]\n             Print register\n\n             Set a special register using a character or a number.\n             Once the register is set, all data passed into ex_print will\n             be stored in the register.\n\n             If the register is uppercase, \u003cNewline\u003e characters are added\n             to match the exact output that was printed.\n\n             Print register contents cannot be displayed with R or :reg command\n             when register is assigned (self-referential problem).\n\n             Example: paste current buffer list exactly like from :b command\n             :pr A:ya! A: b:pu A\n             Example: store a line printed with :p\n             :pr A:ya! A:p\n\n     lim[val=-1]\n             Line length render limit\n\n             Set render cutoff length for non cursor lines in vi and all\n             lines in ex mode.\n\n             Improves redraw performance when editing a file containing one\n             or many long lines (1MB+ per line).\n\n             Example: reasonable value\n             :lim 5000\n             Example: render only the cursor line\n             :lim 0\n             Example: disable the limit\n             :lim -1\n\n     seq[val=1]\n             Control Undo/Redo\n\n             When seq is 0, multiple distinct operations undo/redo in a\n             single step.\n\n             To optimize memory usage under heavy workloads, undo/redo\n             tracking can be disabled by setting seq to a negative value.\n\n             Example: test undo/redo operations in a single step\n             :\u0026ocontrol test:seq 0:\u0026a step1:\u0026a step2:\u0026a step3:seq\n             Example: completely disable undo/redo\n             :seq -1\n\n     [hscroll]left[val=0]\n             Control horizontal scroll\n\n             No argument calculates the value using current character offset.\n             hscroll computes the value using: xcols / 2 * hscroll\n\n     err[val=1]\n             Control ex errors\n\n             bit 1: print errors\n             bit 2: early return\n             bit 3: ignore errors\n\n             Example: silence and ignore errors\n             :err 4\n             Example: report and return on first error\n             :err 3\n             Example: report and consider only last command for error status\n             :err 1\n\nEXINIT ENV VAR\n     EXINIT defines a chain of ex commands to be performed at startup,\n     executed once after all files are opened. This is the only way\n     for scripting and customizing Nextvi outside of C or Unix pipes.\n     Many standard text processing utils such as grep, awk, sed can\n     be replaced by Nextvi with EXINIT in mind.\n\n     printf with octal escapes is the standard way to embed control\n     characters into EXINIT.\n\n     Examples:\n\n     export EXINIT='td 2:order 0:lim 5000'\n             Set ex options for optimal long line performance\n\n     export EXINIT='b-1:r ./vi.c:b-1'\n             Load vi.c into a history buffer\n\n     export EXINIT=\"$(printf 'e ./vi.c:\u0026 i\\007\\003:bx 1:bx')\"\n             Index vi.c for autocomplete\n\n     export EXINIT=\"$(printf '97reg o{\\n}\\003kA\\n\\t')\"\n             Setup @ macro in register \u003ca\u003e\n\n             @a macro creates \u003c{\u003e and closing \u003c}\u003e below the cursor leaving\n             cursor in insert mode in between the braces.\n\n     export EXINIT='98reg \\:mpt-1\\:;;$w \\\\\\!xclip -selection clipboard\\:mpt'\n             Setup @ macro in register \u003cb\u003e\n\n             @b macro pipes the current line into X11 clipboard.\n\nREGEX\n     Pikevm is a fast non-backtracking NFA simulation regex engine\n     developed for Nextvi. It ensures regular expressions are evaluated\n     in constant space and O(n * k) time complexity where \u003cn\u003e is\n     the input string length and \u003ck\u003e represents the regex's structural\n     complexity (e.g., state transitions or alternations). While\n     this does not guarantee strict O(n) linear runtime performance,\n     it ensures computational and memory resources are distributed\n     linearly and evenly across the input, with \u003ck\u003e directly influencing\n     the constant factor. This principle is similar to the concept\n     utilized in radix sort algorithms.\n\n     Pikevm's syntax is akin to regexp(7) from Plan 9.\n     Disregard manpage notation in this section.\n\n     .       Match any single character\n     [N-M]   Match a set of alternate ranges N to M\n     {N,M}   Match N to M times\n     ()      Capture grouping\n     (?:)    Non capture grouping\n     *       Repeated zero or more times\n     +       Repeated one or more times\n     |       Union, alternative branch\n     ?       One or zero matches greedy\n     ??      One or zero matches lazy\n     ^       Assert start of line\n     $       Assert end of line\n     \\\u003c      Assert start of word\n     \\\u003e      Assert end of word\n     (?=)    Assert positive lookahead\n     (?!)    Assert negative lookahead\n     (?\u003e)    Assert positive lookbehind\n     (?\u003c)    Assert negative lookbehind\n     (?#)    Lookbehind offset in bytes\n\n     Lookaround expressions enable the creation of regular expressions\n     that would be impossible to construct without them. They can\n     be used anywhere within a regex, though some considerations\n     must be taken into account.\n     Aspect 1:\n             Lookarounds contain a full regular expression.\n     Aspect 2:\n             Lookarounds can have nested lookarounds.\n     Aspect 3:\n             Static lookarounds like (?=^word) are optimized, bypassing\n             the regex engine.\n     Aspect 4:\n             Lookarounds are best suited for asserting near the end of a\n             complex pattern, where the engine has already narrowed down\n             potential matches.\n     Aspect 5:\n             Lookbehind without offset or 0 offset begins at previous character.\n             Offset begins scanning from current position minus specified\n             value. Negative offset begins at the start of the string.\n\nSPECIAL MARKS\n     *       Position of previous ex command\n     [       First position of previous change\n     ]       Last position of previous change\n     '       Position of previous line region\n     `       Position of previous line region\n\nSPECIAL REGISTERS\n     /       Previous regex keyword\n     :       Previous ex command\n     \u003c0x0\u003e   Default register\n     \u003c0\u003e     Previous value of default register (atomic)\n             Atomic means the operation did not include a \u003cNewline\u003e.\n     \u003c1-9\u003e   Previous value(s) of default register (nonatomic)\n\nCODE MAP\n     +--------------+----------------------+\n     | 537 kmap.h   |  keymap translation  |\n     | 540 vi.h     |  definitions/aux     |\n     +--------------+----------------------+\n     | 353 term.c   |  low level IO        |\n     | 367 conf.c   |  hl/ft/td config     |\n     | 444 ren.c    |  positioning/syntax  |\n     | 614 uc.c     |  UTF-8 support       |\n     | 646 lbuf.c   |  file/line buffer    |\n     | 725 led.c    |  insert mode/output  |\n     | 766 regex.c  |  pikevm              |\n     | 1758 ex.c    |  ex options/commands |\n     | 1879 vi.c    |  normal mode/general |\n     | 7552 total   |  wc -l *.c|sort      |\n     +--------------+----------------------+\n\nCOMPILING\n     export CC='g++ -x c'\n             Set compiler, g++ example\n     export CFLAGS='-s'\n             Set CFLAGS, strip example\n     ./cbuild.sh\n             Build once\n     ./cbuild.sh build\n             Build\n     ./cbuild.sh debug\n             Build with symbols, static analysis, dynamic analysis, and no\n             optimizations\n     ./cbuild.sh pgobuild\n             PGO build can lead to a significant performance boost on some\n             application specific tasks\n     ./cbuild.sh install\n             Install vi to $DESTDIR$PREFIX/bin\n     ./cbuild.sh fetch\n             Merge commits from upstream repository\n     ./cbuild.sh bench\n             Performance bench test 2000 word deletions on vi.c\n\nPHILOSOPHY\n     Most text editors accumulate significant technical debt. They\n     cannot be quickly mastered, deeply understood, or easily changed.\n     Nextvi is designed around three pillars: fundamental, lean, and\n     flexible. Fundamental means a complete yet minimal command set\n     for unlimited text transformation. Lean means a concise, efficient,\n     coherent implementation with a bus factor of zero. Flexible means\n     deep composability and a versatile, extensible C codebase. By\n     conventional wisdom, these three pillars would be considered\n     oxymoronic. Maintaining all three challenges the notion that\n     a text editor must sacrifice one for another. Nextvi proves that\n     coexistence is not only possible but essential to what a great\n     text editor should be.\n\n     \"All software sucks, but some do more than others.\"\n             - Kyryl Melekhin\n\nSEE ALSO\n     New functionality can be obtained through optional patches provided\n     in the patches branch. If you have a meaningful contribution\n     and would love to make it public, the patch can be submitted\n     via email or GitHub pull request.\n     https://github.com/kyx0r/nextvi/tree/patches\n\n     Patch2vi support utility\n     https://github.com/kyx0r/nextvi/tree/patch2vi\n\n     Unit tests\n     https://github.com/kyx0r/nextvi/tree/test\n\n     Scripts used to generate this manual\n     https://github.com/kyx0r/nextvi/tree/manual\n\n     Unified tagged releases\n     https://github.com/kyx0r/nextvi/tree/release\n\n     Original Neatvi repository\n     https://github.com/aligrudi/neatvi\n\n     Posix vi(1)\n     https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html\n\n     Posix ex(1)\n     https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html\n\n     NFA regular expressions by Russ Cox\n     https://swtch.com/~rsc/regexp/regexp1.html\n\n     Plan 9 regexp(7)\n     https://man.cat-v.org/p9p/7/regexp\n\nAUTHORS\n     Nextvi was written by Kyryl Melekhin \u003ck.melekhin@gmail.com\u003e.  It is based\n     on neatvi(1), which was written by Ali Gholami Rudi \u003cali@rudi.ir\u003e.  This\n     manual page was inspired by nepeta \u003cnepeta@canaglie.net\u003e.\n\nNextvi 5.3                       June 7, 2026                       Nextvi 5.3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyx0r%2Fnextvi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyx0r%2Fnextvi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyx0r%2Fnextvi/lists"}