<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="/static/feed.xsl" type="text/xsl" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:quartz="https://quartz.jzhao.xyz/ns">
  <script xmlns="http://www.w3.org/1999/xhtml" src="/static/scripts/xslt-polyfill-214fd525.js"></script>
  <title>/wiki / learn-vim-progressively</title>
  <subtitle>Recent notes in /wiki / learn-vim-progressively on Animesh Mishra</subtitle>
  <link href="https://animishraa05.github.io/wiki/learn-vim-progressively" />
  <link rel="alternate" type="text/html" href="https://animishraa05.github.io/wiki/learn-vim-progressively" />
  <category term="wiki/learn-vim-progressively" />
  <id>https://animishraa05.github.io/wiki/learn-vim-progressively</id>
  <updated>2026-09-02T00:00:00.000Z</updated>
  <contributor>
    <name>Animesh Mishra</name>
    <email>animesh.mishra818@gmail.com</email>
  </contributor>
  <logo>https://animishraa05.github.io/icon.png</logo>
  <icon>https://animishraa05.github.io/icon.png</icon>
  <generator>Quartz v4.6.0 -- quartz.jzhao.xyz</generator>
  <rights type="html">&amp;amp;copy; 2026 Animesh Mishra</rights>
  
  <entry>
    <title>Learn Vim Progressively — Map of Content</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/learn-vim-progressively-moc" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/learn-vim-progressively-moc.md" />
    <summary> Map of Content for Learn Vim Progressively — 11 concepts. Start here to navigate learn-vim-progressively.</summary>
    <published>2026-09-02T00:00:00.000Z</published>
    <updated>2026-09-02T00:00:00.000Z</updated>
    <publishedTime>Sep 02, 2026</publishedTime>
    <updatedTime>Sep 02, 2026</updatedTime>
    <category term="meta" label="meta" />
<category term="learn-vim-progressively" label="learn-vim-progressively" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p dir=&quot;auto&quot;&gt;Map of Content for &lt;strong&gt;Learn Vim Progressively&lt;/strong&gt; — 11 concepts. Start here to navigate learn-vim-progressively.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-concepts&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Concepts&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-concepts&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-basic-commands&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-buffers&quot; class=&quot;internal&quot; data-slug=&quot;vim-buffers&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-buffers&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-completion&quot; class=&quot;internal&quot; data-slug=&quot;vim-completion&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-completion&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-macros&quot; class=&quot;internal&quot; data-slug=&quot;vim-macros&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-macros&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-modes&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-rectangular-blocks&quot; class=&quot;internal&quot; data-slug=&quot;vim-rectangular-blocks&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-rectangular-blocks&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-repetition&quot; class=&quot;internal&quot; data-slug=&quot;vim-repetition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-repetition&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-search-navigation&quot; class=&quot;internal&quot; data-slug=&quot;vim-search-navigation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-search-navigation&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-splits&quot; class=&quot;internal&quot; data-slug=&quot;vim-splits&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-splits&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-text-objects&quot; class=&quot;internal&quot; data-slug=&quot;vim-text-objects&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-text-objects&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;vim-visual-selection&lt;/a&gt; — concept&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mechanisms--how-things-work&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Mechanisms &amp;#x26; How Things Work&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#mechanisms--how-things-work&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;em&gt;Auto-generated — edit to curate. Pages that explain processes/flows.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;comparisons--tradeoffs&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparisons &amp;#x26; Tradeoffs&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparisons--tradeoffs&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;em&gt;(No synthesis yet — create via ingest or query —save)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;suggested-reading-order&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Suggested Reading Order&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#suggested-reading-order&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;Browse Core Concepts above — start with most-linked page&lt;/li&gt;
&lt;li&gt;Follow Connections sections for dense graph traversal&lt;/li&gt;
&lt;/ol&gt;</content>
  </entry><entry>
    <title>Vim Basic Survival Commands</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-basic-commands" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-basic-commands.md" />
    <summary>The Problem New Vim users are lost without familiarity of any commands.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;New Vim users are lost without familiarity of any commands. Without these five commands, you cannot open a file, save it, or do anything productive.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Five core Normal-mode commands are enough to survive: insert text, delete characters, save, and quit.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Essential commands for Level 1 (Survival):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enter Insert mode (type text)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete character under cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:wq&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save and quit (&lt;code class=&quot;notranslate&quot;&gt;:w&lt;/code&gt; = save, &lt;code class=&quot;notranslate&quot;&gt;:q&lt;/code&gt; = quit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;dd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete (cut) the current line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Paste the last deleted/yanked text&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p dir=&quot;auto&quot;&gt;Recommended additions:&lt;/p&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;hjkl&lt;/code&gt; — cursor movement (←↓↑→), &lt;code class=&quot;notranslate&quot;&gt;j&lt;/code&gt; looks like down arrow&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:help &amp;#x3C;command&gt;&lt;/code&gt; — show help for any command (&lt;code class=&quot;notranslate&quot;&gt;:help&lt;/code&gt; for general help)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;All five commands work in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;dd&lt;/code&gt; both deletes and yanks (stores in default register)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:wq&lt;/code&gt; fails if file is read-only — use &lt;code class=&quot;notranslate&quot;&gt;:wq!&lt;/code&gt; to force&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;p&lt;/code&gt; pastes after cursor, &lt;code class=&quot;notranslate&quot;&gt;P&lt;/code&gt; pastes before cursor&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;x&lt;/code&gt; works on characters, not bytes in multi-byte encodings&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;dd&lt;/code&gt; copies to register, so &lt;code class=&quot;notranslate&quot;&gt;p&lt;/code&gt; can retrieve it&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:wq&lt;/code&gt; saves even without changes — use &lt;code class=&quot;notranslate&quot;&gt;:x&lt;/code&gt; to save only if modified&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — All commands work in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-text-objects&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-text-objects&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Text Objects&lt;/a&gt; — Extend deletion/selection beyond single lines&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-search-navigation&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-search-navigation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Navigation&lt;/a&gt; — Moving efficiently within lines and files&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-repetition&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-repetition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Repetition&lt;/a&gt; — Repeat commands with counts&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Buffers</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-buffers" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-buffers.md" />
    <summary>The Problem Editing multiple files sequentially requires efficiently loading, saving, and switching between file buffers.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Editing multiple files sequentially requires efficiently loading, saving, and switching between file buffers.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A buffer is an in-memory copy of a file. Vim provides commands to load, save, and navigate between open buffers.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Basic buffer commands:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:e &amp;#x3C;path&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open (edit) a file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save current buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:w &amp;#x3C;path&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save to new file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:saveas &amp;#x3C;path&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save buffer as new file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save if modified and quit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quit (fails if unsaved)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:q!&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quit without saving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:qa!&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quit all, ignore changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:bn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Next buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:bp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Previous buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:q!&lt;/code&gt; discards unsaved changes&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:x&lt;/code&gt; only writes if buffer is modified&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;ZZ&lt;/code&gt; = &lt;code class=&quot;notranslate&quot;&gt;:wq&lt;/code&gt; (write and quit)&lt;/li&gt;
&lt;li&gt;Buffer list persists until explicitly cleared&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Unload buffer vs delete buffer are different&lt;/li&gt;
&lt;li&gt;Hidden buffers: &lt;code class=&quot;notranslate&quot;&gt;:bn&lt;/code&gt; fails with unsaved changes — use &lt;code class=&quot;notranslate&quot;&gt;:bn!&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;:set hidden&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:b#&lt;/code&gt; switches to alternate buffer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-splits&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-splits&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Splits&lt;/a&gt; — Each split shows a buffer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — Basic save/quit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — Works in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-macros&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-macros&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Macros&lt;/a&gt; — Can record buffer operations&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Completion</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-completion" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-completion.md" />
    <summary>The Problem Retyping long identifiers or boilerplate text wastes time. Completion suggestions improve speed and reduce typos.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Retyping long identifiers or boilerplate text wastes time. Completion suggestions improve speed and reduce typos.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;In Insert mode, Vim provides keyword completion from the current buffer and loaded files.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Completion commands in Insert mode:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-n&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Next match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-p&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Previous match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-x&gt;&amp;#x3C;C-l&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Line completion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-x&gt;&amp;#x3C;C-f&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filename completion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p dir=&quot;auto&quot;&gt;Workflow:&lt;/p&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;Type the start of a word&lt;/li&gt;
&lt;li&gt;Press &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-n&gt;&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-p&gt;&lt;/code&gt; to cycle through suggestions&lt;/li&gt;
&lt;li&gt;Accept with right arrow or completion key&lt;/li&gt;
&lt;li&gt;Continue typing or press &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-n&gt;&lt;/code&gt; for more options&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Completion is keyword-based from open buffers&lt;/li&gt;
&lt;li&gt;Searches all loaded buffers, not just current&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-n&gt;&lt;/code&gt; / &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-p&gt;&lt;/code&gt; cycle through matches&lt;/li&gt;
&lt;li&gt;Works with dictionaries, thesaurus, and more via plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Need at least one charactertyped before completion works&lt;/li&gt;
&lt;li&gt;Dictionary completion via &lt;code class=&quot;notranslate&quot;&gt;&#039;dictionary&#039;&lt;/code&gt; option&lt;/li&gt;
&lt;li&gt;LSP completion is separate (see LSP wiki for language-aware)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../language-server-protocol&quot; class=&quot;internal alias&quot; data-slug=&quot;language-server-protocol&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Language Server Protocol&lt;/a&gt; — Language-aware completion (vs basic word completion)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — Completion in Insert mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — Insert mode basics&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-repetition&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-repetition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Repetition&lt;/a&gt; — Can repeat insertions&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Macros</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-macros" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-macros.md" />
    <summary>The Problem Repetition with . is limited to the last change. Complex multi-step sequences need more powerful automation.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Repetition with &lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt; is limited to the last change. Complex multi-step sequences need more powerful automation.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Macros record and replay sequences of Normal-mode commands using registers (a-z).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Recording workflow:&lt;/p&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;qa&lt;/code&gt; — start recording to register &lt;code class=&quot;notranslate&quot;&gt;a&lt;/code&gt; (shows &lt;code class=&quot;notranslate&quot;&gt;recording @a&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Perform the sequence of commands&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;q&lt;/code&gt; — stop recording&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;@a&lt;/code&gt; — replay the macro&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;@@&lt;/code&gt; — replay last executed macro&lt;/li&gt;
&lt;/ol&gt;
&lt;p dir=&quot;auto&quot;&gt;Example: Numbered list&lt;/p&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;Place cursor on line with &lt;code class=&quot;notranslate&quot;&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;qaYp&amp;#x3C;C-a&gt;q&lt;/code&gt; — record: yank line, paste, increment number, stop&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;@a&lt;/code&gt; — writes 2 below 1&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;@@&lt;/code&gt; — writes 3 below 2&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;100@@&lt;/code&gt; — creates 1 through 103&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Registers are named a-z (26 total)&lt;/li&gt;
&lt;li&gt;Uppercase registers append: &lt;code class=&quot;notranslate&quot;&gt;qA&lt;/code&gt; appends to register &lt;code class=&quot;notranslate&quot;&gt;a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Macros persist until overwritten&lt;/li&gt;
&lt;li&gt;Works across files if registers are preserved&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Macros execute at Normal mode — recording in Insert mode includes literal keystrokes&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-a&gt;&lt;/code&gt; increments if cursor is on/on after a number&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:reg&lt;/code&gt; shows all register contents&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-repetition&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-repetition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Repetition&lt;/a&gt; — Simpler than macros for single changes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — Recording works in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Visual Selection&lt;/a&gt; — Can record visual selections&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-rectangular-blocks&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-rectangular-blocks&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Block Selection&lt;/a&gt; — Can be combined with macros&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Modes</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-modes" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-modes.md" />
    <summary>The Problem Standard text editors map most keystrokes directly to characters on screen.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Standard text editors map most keystrokes directly to characters on screen. Vim is a modal editor where keystrokes have different meanings depending on the current mode. This design allows efficient keyboard-driven editing without modifier keys, but requires learning mode switching.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Vim uses modal editing — different keystrokes do different things depending on the current mode. The main modes are Normal (for commands), Insert (for typing), and Visual (for selection).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Normal mode&lt;/strong&gt;: Default mode. Keystrokes are commands (move, delete, yank, etc.). Press &lt;code class=&quot;notranslate&quot;&gt;ESC&lt;/code&gt; to return here from other modes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert mode&lt;/strong&gt;: Type characters literally. Press &lt;code class=&quot;notranslate&quot;&gt;i&lt;/code&gt; from Normal to enter, &lt;code class=&quot;notranslate&quot;&gt;ESC&lt;/code&gt; to exit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual mode&lt;/strong&gt;: Select text for operations. Enter with &lt;code class=&quot;notranslate&quot;&gt;v&lt;/code&gt; (character-wise), &lt;code class=&quot;notranslate&quot;&gt;V&lt;/code&gt; (line-wise), or &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; (block-wise).&lt;/li&gt;
&lt;/ul&gt;
&lt;p dir=&quot;auto&quot;&gt;Key mappings:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enter Insert mode before cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enter Insert mode after cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;ESC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Return to Normal mode&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Vim starts in Normal mode by default&lt;/li&gt;
&lt;li&gt;Mode switching is explicit — no hold-to-edit like Ctrl in conventional editors&lt;/li&gt;
&lt;li&gt;Visual mode has three variants: character, line, and block&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:&lt;/code&gt; 进入 Ex 命令行 mode (also considered a mode)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Accidental key presses in Normal mode can cause unintended edits (e.g., &lt;code class=&quot;notranslate&quot;&gt;i&lt;/code&gt; in the middle of a word inserts before it, not split it — use &lt;code class=&quot;notranslate&quot;&gt;s&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;a&lt;/code&gt; instead)&lt;/li&gt;
&lt;li&gt;Caps Lock matters: &lt;code class=&quot;notranslate&quot;&gt;i&lt;/code&gt; is insert, &lt;code class=&quot;notranslate&quot;&gt;I&lt;/code&gt; is different command&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:help mode&lt;/code&gt; shows current mode help&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — Five commands that work in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-text-objects&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-text-objects&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Text Objects&lt;/a&gt; — Selection commands that require Visual mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Visual Selection&lt;/a&gt; — Modes for selecting text blocks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-macros&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-macros&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Macros&lt;/a&gt; — Recording in Normal mode&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Rectangular Blocks</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-rectangular-blocks" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-rectangular-blocks.md" />
    <summary>The Problem Editing multiple lines at the same column is common (indentation, commenting).</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Editing multiple lines at the same column is common (indentation, commenting). Character/line selection can’t handle this — you need column-based selection.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Block-wise visual mode (&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt;) selects rectangular columns across multiple lines. This enables simultaneous edits to many lines at once.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Entry: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; from Normal mode (or &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-q&gt;&lt;/code&gt; on Windows if clipboard interferes)&lt;/p&gt;
&lt;p dir=&quot;auto&quot;&gt;Use cases:&lt;/p&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Comment multiple lines&lt;/strong&gt;:&lt;/p&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;0&lt;/code&gt; — go to first column&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; — start block selection&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-d&gt;&lt;/code&gt; — move down (or &lt;code class=&quot;notranslate&quot;&gt;jjj&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;%&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;I-- [ESC]&lt;/code&gt; — insert comment prefix on each line&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Append to all lines&lt;/strong&gt;:&lt;/p&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; select blocks&lt;/li&gt;
&lt;li&gt;Move to target lines&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;$&lt;/code&gt; — extend to end of lines&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;A&lt;/code&gt;, type text, &lt;code class=&quot;notranslate&quot;&gt;ESC&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p dir=&quot;auto&quot;&gt;Window commands:&lt;/p&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;&amp;#x3C;dir&gt;&lt;/code&gt; — switch split (dir = h,j,k,l or arrows)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;_&lt;/code&gt; — maximize horizontal split&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;|&lt;/code&gt; — maximize vertical split&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;+&lt;/code&gt; / &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w-&gt;&lt;/code&gt; — resize splits&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Block selection persists during operations&lt;/li&gt;
&lt;li&gt;All selected lines get the same edit&lt;/li&gt;
&lt;li&gt;Case matters: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; is block, &lt;code class=&quot;notranslate&quot;&gt;V&lt;/code&gt; is line, &lt;code class=&quot;notranslate&quot;&gt;v&lt;/code&gt; is character&lt;/li&gt;
&lt;li&gt;Works with &lt;code class=&quot;notranslate&quot;&gt;:split&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;:vsplit&lt;/code&gt; for window splits&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Windows: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-q&gt;&lt;/code&gt; if &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; is clipboard paste&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;$&lt;/code&gt; selects to end of longest line, not each line individually&lt;/li&gt;
&lt;li&gt;Block selection combined with &lt;code class=&quot;notranslate&quot;&gt;A&lt;/code&gt; appends at line ends&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Visual Selection&lt;/a&gt; — Block selection is a variant&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-macros&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-macros&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Macros&lt;/a&gt; — Can record block selection operations&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-text-objects&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-text-objects&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Text Objects&lt;/a&gt; — Alternative selection syntax&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-splits&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-splits&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Splits&lt;/a&gt; — Related window functionality&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Repetition</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-repetition" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-repetition.md" />
    <summary>The Problem Repeating the same operation multiple times is inefficient. Manual replication wastes time and introduces inconsistency.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Repeating the same operation multiple times is inefficient. Manual replication wastes time and introduces inconsistency.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Two repetition mechanisms: the dot command (&lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt;) repeats the last change; numeric prefixes repeat commands N times.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;dot-command-&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Dot Command (&lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt;)&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#dot-command-&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Repeats the last Simple change&lt;/li&gt;
&lt;li&gt;Examples:
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;100idesu [ESC]&lt;/code&gt; writes “desu” 100 times&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt; repeats that 100 “desu”&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;3.&lt;/code&gt; repeats 3 times (300 total, not 300!)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A Simple change = one command that makes one change&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;numeric-prefix-ncommand&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Numeric Prefix (&lt;code class=&quot;notranslate&quot;&gt;N&amp;#x3C;command&gt;&lt;/code&gt;)&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#numeric-prefix-ncommand&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Precedes any command with a count&lt;/li&gt;
&lt;li&gt;Examples:
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;2dd&lt;/code&gt; — delete 2 lines&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;3p&lt;/code&gt; — paste 3 times&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;5 dw&lt;/code&gt; — delete 5 words&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;10j&lt;/code&gt; — move down 10 lines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt; only repeats simple changes, not complex sequences&lt;/li&gt;
&lt;li&gt;Numeric counts are multiplied, not added: &lt;code class=&quot;notranslate&quot;&gt;3.&lt;/code&gt; × 3 = 9 not 6&lt;/li&gt;
&lt;li&gt;Operator + motion = repeat-able command: &lt;code class=&quot;notranslate&quot;&gt;d2w&lt;/code&gt; is one command&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;u&lt;/code&gt; undo is itself undo-able&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt; doesn’t repeat Ex commands (&lt;code class=&quot;notranslate&quot;&gt;:s/...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt; after &lt;code class=&quot;notranslate&quot;&gt;.&lt;/code&gt; compounds: &lt;code class=&quot;notranslate&quot;&gt;2.&lt;/code&gt; = 6 total&lt;/li&gt;
&lt;li&gt;Search/replace needs &lt;code class=&quot;notranslate&quot;&gt;:s///&amp;#x26;&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&lt;/code&gt; to repeat&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — &lt;code class=&quot;notranslate&quot;&gt;dd&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;p&lt;/code&gt; are repeatable&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — Repetition works in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-search-navigation&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-search-navigation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Navigation&lt;/a&gt; — &lt;code class=&quot;notranslate&quot;&gt;N&lt;/code&gt; prefix repeats search&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-macros&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-macros&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Macros&lt;/a&gt; — More complex repetition with recording&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Search and Navigation</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-search-navigation" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-search-navigation.md" />
    <summary>The Problem Moving inefficiently kills productivity. Cursor-by-cursor navigation doesn’t scale for large files.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Moving inefficiently kills productivity. Cursor-by-cursor navigation doesn’t scale for large files. Efficient editing requires efficient movement commands.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Vim provides granular movement commands: character, word, line, search, and screen-level navigation.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;line-level-navigation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Line-level navigation:&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#line-level-navigation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Destination&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First column (column 0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;^&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First non-blank character&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;End of line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;g_&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Last non-blank character&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;fa&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Next &lt;code class=&quot;notranslate&quot;&gt;a&lt;/code&gt; on line (repeat with &lt;code class=&quot;notranslate&quot;&gt;;&lt;/code&gt;, back with &lt;code class=&quot;notranslate&quot;&gt;,&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;ta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Just before next &lt;code class=&quot;notranslate&quot;&gt;a&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;Fa&lt;/code&gt; / &lt;code class=&quot;notranslate&quot;&gt;Ta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Same, backward&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;word-moves&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Word moves:&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#word-moves&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;w&lt;/code&gt; — start of next word&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;e&lt;/code&gt; — end of current word&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;b&lt;/code&gt; — start of previous word&lt;/li&gt;
&lt;/ul&gt;
&lt;p dir=&quot;auto&quot;&gt;WORD vs word: word = alphanumeric + underscore; WORD = whitespace-separated&lt;/p&gt;
&lt;h3 id=&quot;file-navigation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;File navigation:&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#file-navigation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;gg&lt;/code&gt; — start of file (shortcut for &lt;code class=&quot;notranslate&quot;&gt;1G&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;G&lt;/code&gt; — last line&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;N G&lt;/code&gt; — line N&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;search&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Search:&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#search&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;/pattern&lt;/code&gt; — search forward, &lt;code class=&quot;notranslate&quot;&gt;?pattern&lt;/code&gt; backward&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;*&lt;/code&gt; — search word under cursor forward&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;#&lt;/code&gt; — search word under cursor backward&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;%&lt;/code&gt; — jump to matching bracket (`, { or [)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;All movement commands can be combined with operators: &lt;code class=&quot;notranslate&quot;&gt;d$&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;yG&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;ce&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;*&lt;/code&gt; is smart: uses word boundaries&lt;/li&gt;
&lt;li&gt;Counts work: &lt;code class=&quot;notranslate&quot;&gt;3w&lt;/code&gt; moves 3 words; &lt;code class=&quot;notranslate&quot;&gt;5j&lt;/code&gt; moves 5 lines down&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;n&lt;/code&gt; repeats last search, &lt;code class=&quot;notranslate&quot;&gt;N&lt;/code&gt; reverses&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;^&lt;/code&gt; visually appears above &lt;code class=&quot;notranslate&quot;&gt;_&lt;/code&gt; but is different&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;f&lt;/code&gt; is line-local — doesn’t wrap by default, use &lt;code class=&quot;notranslate&quot;&gt;;&lt;/code&gt; or search&lt;/li&gt;
&lt;li&gt;Word boundaries differ from TEXT objects boundaries&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — &lt;code class=&quot;notranslate&quot;&gt;hjkl&lt;/code&gt; are basic movements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-repetition&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-repetition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Repetition&lt;/a&gt; — Combine with counts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — All work in Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Visual Selection&lt;/a&gt; — Can use as motions&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Splits</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-splits" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-splits.md" />
    <summary>The Problem Working with multiple files or views requires switching buffers.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Working with multiple files or views requires switching buffers. Split windows provide simultaneous visibility of multiple files or different parts of the same file.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Vim supports horizontal (&lt;code class=&quot;notranslate&quot;&gt;:split&lt;/code&gt;) and vertical (&lt;code class=&quot;notranslate&quot;&gt;:vsplit&lt;/code&gt;) window splits for simultaneous file viewing. Window commands enable navigation and resizing.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Split commands:&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;Action&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:split&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;:sp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Horizontal split (top/bottom)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:vsplit&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;:vsp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Vertical split (left/right)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;:split &amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Split and open file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;&amp;#x3C;dir&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Switch focus (dir = h,j,k,l or arrows)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;_&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Maximize horizontal split&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;`&lt;c-w&gt;&lt;/c-w&gt;&lt;/td&gt;&lt;td&gt;`&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;+&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Grow split by 1 line&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;-&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Shrink split by 1 line&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Each split has its own buffer&lt;/li&gt;
&lt;li&gt;Splits share registers and global settings&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:hide&lt;/code&gt; closes current split&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:only&lt;/code&gt; closes all other splits&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Resize mode: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-w&gt;=&lt;/code&gt; equals all split sizes&lt;/li&gt;
&lt;li&gt;Tab-based workflow is modern alternative to splits&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;:help split&lt;/code&gt; has comprehensive documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-rectangular-blocks&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-rectangular-blocks&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Block Selection&lt;/a&gt; — Shares window commands&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — Buffer commands apply in splits&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Visual Selection&lt;/a&gt; — Works across splits&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — All commands work in split windows&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Text Objects</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-text-objects" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-text-objects.md" />
    <summary>The Problem Single-character/single-line operations are inefficient when editing structured text (quotes, brackets, paragraphs).</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Single-character/single-line operations are inefficient when editing structured text (quotes, brackets, paragraphs). Manually counting or searching to select delimited blocks is error-prone.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Text objects allow selecting delimited content (words, sentences, paragraphs, quoted strings, brackets) with two-character commands: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;action&gt;i&amp;#x3C;object&gt;&lt;/code&gt; (inside) or &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;action&gt;a&amp;#x3C;object&gt;&lt;/code&gt; (around).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Pattern: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;action&gt;a&amp;#x3C;object&gt;&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;action&gt;i&amp;#x3C;object&gt;&lt;/code&gt;&lt;/p&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;action&lt;/strong&gt;: any operator (&lt;code class=&quot;notranslate&quot;&gt;d&lt;/code&gt; delete, &lt;code class=&quot;notranslate&quot;&gt;y&lt;/code&gt; yank, &lt;code class=&quot;notranslate&quot;&gt;v&lt;/code&gt; select)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;i&lt;/strong&gt;: inside (content only)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;a&lt;/strong&gt;: around (including delimiters)&lt;/li&gt;
&lt;/ul&gt;
&lt;p dir=&quot;auto&quot;&gt;Common objects:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Object&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;word&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;W&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WORD (whitespace-separated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;sentence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;paragraph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;double quotes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&#039;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;single quotes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;)&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;parentheses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;brackets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;braces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;t&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;tags (like &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;html&gt;&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;ci&quot;&lt;/code&gt; changes inside quotes without deleting the quotes&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;da&quot;&lt;/code&gt; includes the quotes in the deletion&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;v2i)&lt;/code&gt; selects the inner two parentheses groups&lt;/li&gt;
&lt;li&gt;Count prefixes work: &lt;code class=&quot;notranslate&quot;&gt;d2i(&lt;/code&gt; deletes two nested groups&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Visual mode doesn’t need an action — just &lt;code class=&quot;notranslate&quot;&gt;vi&quot;&lt;/code&gt; works&lt;/li&gt;
&lt;li&gt;Nested quotes: counts work (&lt;code class=&quot;notranslate&quot;&gt;ci&quot;&quot;&lt;/code&gt; — inner pair in &lt;code class=&quot;notranslate&quot;&gt;&quot;foo&quot;bar&quot;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Objects are motion-compatible — &lt;code class=&quot;notranslate&quot;&gt;y&lt;/code&gt; works same as &lt;code class=&quot;notranslate&quot;&gt;d&lt;/code&gt; (yanks)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — Requires Visual or Normal mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-basic-commands&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-basic-commands&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Survival Commands&lt;/a&gt; — Use operators like &lt;code class=&quot;notranslate&quot;&gt;d&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-visual-selection&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-visual-selection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Visual Selection&lt;/a&gt; — Text objects extend selection&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-repetition&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-repetition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Repetition&lt;/a&gt; — Can repeat text object operations&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Vim Visual Selection</title>
    <link href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-visual-selection" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/learn-vim-progressively/vim-visual-selection.md" />
    <summary>The Problem Editing arbitrary regions requires cursor gymnastics or awkward mouse selection.</summary>
    <published>2026-04-12T00:00:00.000Z</published>
    <updated>2026-04-12T00:00:00.000Z</updated>
    <publishedTime>Apr 12, 2026</publishedTime>
    <updatedTime>Apr 12, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="vim" label="vim" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Editing arbitrary regions requires cursor gymnastics or awkward mouse selection. Standard editors let you select text then act on it — Vim needs equivalent functionality.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Visual mode selects text ranges then applies operators. Three variants: character-wise, line-wise, and block-wise.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Entry commands:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Selection Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Character-wise (highlight characters)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;V&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Line-wise (highlight entire lines)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Block-wise (rectangular column selection)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p dir=&quot;auto&quot;&gt;Post-selection operations:&lt;/p&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;J&lt;/code&gt; — join selected lines together&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;&lt;/code&gt; — indent left&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&gt;&lt;/code&gt; — indent right&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;=&lt;/code&gt; — auto-indent&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;~&lt;/code&gt; — toggle case&lt;/li&gt;
&lt;/ul&gt;
&lt;p dir=&quot;auto&quot;&gt;For block selection across lines:&lt;/p&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; start block&lt;/li&gt;
&lt;li&gt;Move (&lt;code class=&quot;notranslate&quot;&gt;jjj&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-d&gt;&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;/pattern&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;%&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;$&lt;/code&gt; go to end of lines&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;A&lt;/code&gt;, type text, &lt;code class=&quot;notranslate&quot;&gt;ESC&lt;/code&gt; to append to all lines&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Selection endpoint is marked at cursor position when entered&lt;/li&gt;
&lt;li&gt;Works with all operators: &lt;code class=&quot;notranslate&quot;&gt;d&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;y&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;c&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;gU&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;gu&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;o&lt;/code&gt; moves cursor to opposite end of selection&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;notranslate&quot;&gt;gv&lt;/code&gt; reselects last visual selection&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Windows: may need &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-q&gt;&lt;/code&gt; instead of &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;C-v&gt;&lt;/code&gt; for block mode&lt;/li&gt;
&lt;li&gt;Block selection with &lt;code class=&quot;notranslate&quot;&gt;$&lt;/code&gt; selects to end of longest line&lt;/li&gt;
&lt;li&gt;Visual mode is temporary — operators exit back to Normal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-modes&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-modes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Vim Modes&lt;/a&gt; — Visual is one of the three main modes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-macros&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-macros&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Macros&lt;/a&gt; — Record actions on visual selection&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-rectangular-blocks&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-rectangular-blocks&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Block Selection&lt;/a&gt; — Special case of visual block mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../vim-text-objects&quot; class=&quot;internal alias&quot; data-slug=&quot;vim-text-objects&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Text Objects&lt;/a&gt; — Alternative selection syntax&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
</feed>