<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Taras Lysyi</title>
    <description>The latest articles on DEV Community by Taras Lysyi (@taras-lysyi).</description>
    <link>https://dev.to/taras-lysyi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F890173%2F099a9230-cff1-490e-812d-183c1e99f60b.jpg</url>
      <title>DEV Community: Taras Lysyi</title>
      <link>https://dev.to/taras-lysyi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taras-lysyi"/>
    <language>en</language>
    <item>
      <title>How I Completed 70+ Jira Tickets Using AI Agents (and Slept Through It)</title>
      <dc:creator>Taras Lysyi</dc:creator>
      <pubDate>Thu, 26 Feb 2026 17:34:35 +0000</pubDate>
      <link>https://dev.to/taras-lysyi/how-i-completed-70-jira-tickets-using-ai-agents-and-slept-through-it-3knb</link>
      <guid>https://dev.to/taras-lysyi/how-i-completed-70-jira-tickets-using-ai-agents-and-slept-through-it-3knb</guid>
      <description>&lt;p&gt;We had ~70 legacy Go API endpoints that needed migrating to a modern framework. Instead of doing it manually ticket by ticket, I built a multi-agent AI system that grouped, delegated, and executed migrations autonomously — including running overnight while I slept.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agents coded all ~70 migrations in just 2 days.&lt;/strong&gt; The remaining weeks were spent on code review, feedback cycles, and merging PRs into the codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results:&lt;/strong&gt; ~30 PRs opened. Most merged or in review. Code quality: 8/10.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This entire article was vibe-coded during a morning walk using voice chat, then lightly edited. That's the world we live in now.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Tools Used
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP Integrations (Model Context Protocol):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jira MCP&lt;/strong&gt; — connects directly to the project board, pulls all migration tickets with descriptions, acceptance criteria, and links to legacy code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git MCP&lt;/strong&gt; — branch creation, commits, pull request management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filesystem&lt;/strong&gt; — direct access to the codebase for reading and writing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Claude Code CLI&lt;/strong&gt; — the runtime that orchestrates everything. Previously I used Claude inside Cursor, but switched entirely to Claude Code CLI — it handles larger changes and runs multi-step workflows autonomously.&lt;/p&gt;




&lt;h2&gt;
  
  
  Skills Hierarchy
&lt;/h2&gt;

&lt;p&gt;Skills are reusable workflow templates. I built a hierarchy where each level calls the next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;migrate-batch              ← INPUT: list of ticket IDs
  └─ for each ticket:
      └─ migrate-fullstack     ← runs FE + BE together
           ├─ migrate-backend      ← backend migration
           └─ migrate-frontend     ← frontend migration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;migrate-batch&lt;/strong&gt; — takes a list of tickets, groups similar ones into logical PRs (e.g. all User endpoints in one PR), then kicks off migration for each group. This turned 70+ tickets into ~20 focused PRs instead of 70 scattered ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;migrate-fullstack&lt;/strong&gt; — splits work into backend and frontend streams running in parallel. Each stream knows its own context and patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;migrate-backend / migrate-frontend&lt;/strong&gt; — the actual migration workers. They're pre-loaded with codebase standards, test patterns, and target framework conventions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Custom Agents (The Team)
&lt;/h2&gt;

&lt;p&gt;Inside each migration, specialized agents handle different layers of the codebase. Think of them as a dev team where everyone is an expert in their area:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Orchestrator&lt;/strong&gt; — the tech lead. Reads the ticket, delegates to specialists, tracks progress, collects results. Never writes code itself — only coordinates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Researcher (read-only)&lt;/strong&gt; — the analyst. Digs into the legacy Go code, traces the full request flow, documents all dependencies, business rules, edge cases, and the request/response contract.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store Agent&lt;/strong&gt; — the database specialist. Writes the data access layer and tests. Knows the project's SQL patterns, handles null checks, parameterized queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service Agent&lt;/strong&gt; — the business logic expert. Wires up store calls and external APIs into endpoint handlers. Implements all business rules identified by the researcher.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External API Agent&lt;/strong&gt; — handles integrations with third-party services. Knows retry patterns, error handling, timeout configs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reviewer Agent (read-only)&lt;/strong&gt; — the senior reviewer. Checks correctness, pattern compliance, test coverage, security. Returns specific feedback with file and line references.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution order:&lt;/strong&gt; Researcher → Store → External API → Service (assembles everything) → Reviewer → fixes if needed → PR ready.&lt;/p&gt;

&lt;p&gt;Each agent has its own context window, its own tools (some are read-only for safety), and its own system prompt with detailed instructions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Principle: Atomicity
&lt;/h2&gt;

&lt;p&gt;The most important insight: &lt;strong&gt;learn the first migration manually, then scale the pattern.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I spent 2–3 days setting up the system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Did the first migration hands-on, understanding every step&lt;/li&gt;
&lt;li&gt;Encoded each step into an agent with specific instructions&lt;/li&gt;
&lt;li&gt;Compiled agents into skills with clear input/output contracts&lt;/li&gt;
&lt;li&gt;Tested on a few more migrations with manual review&lt;/li&gt;
&lt;li&gt;Once confident — launched batch migration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without this upfront investment, the agents would produce inconsistent, low-quality code. The 2–3 days of setup paid for themselves on the first batch run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Running Overnight — 2 Days of Agent Coding
&lt;/h2&gt;

&lt;p&gt;The entire batch of PRs was generated in roughly 2 days of agent runtime. Here's how:&lt;/p&gt;

&lt;p&gt;Claude Max has usage limits — I hit them multiple times during heavy migration runs. The limits reset approximately every 4 hours.&lt;/p&gt;

&lt;p&gt;My solution: when the system hits a rate limit, it automatically pauses and retries after the cooldown period. I launched the batch migration on my laptop, went to sleep, and woke up to completed PRs. Between the active coding sessions and overnight runs, all migrations were coded within ~2 days.&lt;/p&gt;

&lt;p&gt;The weeks that followed? That was the human part — code review, feedback from the team, fixes, and merging. The AI was literally working while I was sleeping.&lt;/p&gt;




&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total tickets migrated&lt;/td&gt;
&lt;td&gt;~70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pull Requests opened&lt;/td&gt;
&lt;td&gt;~30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch-generated PRs&lt;/td&gt;
&lt;td&gt;~25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent coding time (all batch PRs)&lt;/td&gt;
&lt;td&gt;~2 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review &amp;amp; merge period&lt;/td&gt;
&lt;td&gt;~3 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code quality (self-assessed)&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup time&lt;/td&gt;
&lt;td&gt;2–3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The agents wrote all the code in 2 days. The humans spent weeks reviewing, refining, and merging it. That's the real takeaway — AI doesn't eliminate the human, it compresses the mechanical work so you can focus on the parts that actually need your brain.&lt;/p&gt;

&lt;p&gt;Was I satisfied with the code quality? &lt;strong&gt;8 out of 10.&lt;/strong&gt; This was an experiment, but the results are real — PRs have been reviewed, approved, and merged into the codebase.&lt;/p&gt;

&lt;p&gt;Does it still need a human in the loop? &lt;strong&gt;Yes.&lt;/strong&gt; Every PR goes through review. The AI handles the boilerplate and repetitive structure, but a developer still validates the business logic and edge cases.&lt;/p&gt;

&lt;p&gt;Can it get better? &lt;strong&gt;Absolutely.&lt;/strong&gt; With more investment in agent prompts and codebase-specific training, this system can approach near-autonomous migration quality. Each iteration gets more accurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My recommendation:&lt;/strong&gt; start small. Take one ticket. Build one agent. See how it works. Then scale. The tooling is ready — MCP integrations, custom agents, skills, batch processing. The question is not whether AI can help with your migrations. The question is how much time you're willing to invest upfront to make it work.&lt;/p&gt;

&lt;p&gt;Try it. Test it. Iterate.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Vim keybindings for efficient text editing</title>
      <dc:creator>Taras Lysyi</dc:creator>
      <pubDate>Sun, 17 Jul 2022 04:30:54 +0000</pubDate>
      <link>https://dev.to/taras-lysyi/vim-keybindings-for-efficient-text-editing-ke2</link>
      <guid>https://dev.to/taras-lysyi/vim-keybindings-for-efficient-text-editing-ke2</guid>
      <description>&lt;p&gt;Hello, I am Taras. I am working as a backend developer. &lt;/p&gt;

&lt;p&gt;If you’re a software engineer, you probably heard about Vim, a free, open-source, screen-based text editor program.&lt;/p&gt;

&lt;p&gt;In this article, I’ll show you how you can radically speed up your development workflow by leveraging one of the most potent things about Vim — its keybindings — without even having to use Vim.&lt;/p&gt;

&lt;p&gt;You might be thinking, “ugh, keybindings, too nerdy and difficult, I don’t need that”… Hold on! It’s not as difficult as you might think, and you don’t need to memorize all of them. Once you understand the core logic behind keybindings, the following experience should come naturally. Let me show you!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uGkYDRbhHo0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What is so special in Vim keybinding?
&lt;/h2&gt;

&lt;p&gt;Vim has different editing modes and it lets you use easy-to-remember keybinding without needing to add a couple of key modifications (ctrl+shift+…, alt+shift+…). It has it's language for editing text. And once you get the basics you can combine them to do different actions. Everything you can think about editing text there is probably a keybinding for it, if not you can easily create it. Let's start with Vim modes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Normal Mode
&lt;/h3&gt;

&lt;p&gt;You can’t write text in this mode. By default, Vim starts in this mode. In Normal mode, key presses don’t work as one would expect. This mode is responsible for editing and moving around. Remember, this is what makes Vim different.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic movements that I use on a daily basis
&lt;/h3&gt;

&lt;p&gt;Cursor movement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;h&lt;/code&gt;&lt;/strong&gt; move one character left&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;j&lt;/code&gt;&lt;/strong&gt; move one row down&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;k&lt;/code&gt;&lt;/strong&gt; move one row up&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;l&lt;/code&gt;&lt;/strong&gt; move one character right&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are a touch typist like me you will like these movements because you don’t have to leave a ‘home row’. Keys ‘h’ and ‘l’ were easy to remember for me but ‘jk’ took me some time to used to.&lt;/p&gt;

&lt;p&gt;Word movements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;w&lt;/code&gt;&lt;/strong&gt; move to the beginning of the next word&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;b&lt;/code&gt;&lt;/strong&gt; move to the previous beginning of the word&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;e&lt;/code&gt;&lt;/strong&gt; move to the end of the word&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;ge&lt;/code&gt;&lt;/strong&gt; move to the end of the previous word&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;W&lt;/code&gt;&lt;/strong&gt; move to the beginning of the next word after a whitespace&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;B&lt;/code&gt;&lt;/strong&gt; move to the beginning of the previous word before a whitespace&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;E&lt;/code&gt;&lt;/strong&gt; move to the end of a word before a whitespace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beginning/End of line movement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;0&lt;/code&gt;&lt;/strong&gt; move to the beginning of the line&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;$&lt;/code&gt;&lt;/strong&gt; move to the end of the line&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  targeted movements:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  move to the next occurrence of the current word under cursor: &lt;strong&gt;``&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move to the previous occurrence of the current word: &lt;strong&gt;&lt;code&gt;#&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move (un)til character: &lt;strong&gt;&lt;code&gt;t&amp;lt;char&amp;gt;&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move back (un)til character: &lt;strong&gt;&lt;code&gt;T&amp;lt;char&amp;gt;&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move to found character: &lt;strong&gt;&lt;code&gt;f&amp;lt;char&amp;gt;&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move back to found character: &lt;strong&gt;&lt;code&gt;F&amp;lt;char&amp;gt;&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move to match: &lt;strong&gt;&lt;code&gt;/&amp;lt;regex&amp;gt;&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move back to match: &lt;strong&gt;&lt;code&gt;?&amp;lt;regex&amp;gt;&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move to the next occurrence of a match: &lt;strong&gt;&lt;code&gt;n&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  move to the previous occurrence of a match: &lt;strong&gt;&lt;code&gt;N&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most keybindings are mnemonic (w - word, e - end) and some of them have regex expression philosophy beyond.&lt;/p&gt;

&lt;h3&gt;
  
  
  Insert Mode
&lt;/h3&gt;

&lt;p&gt;This mode works the way text editing works throughout the OS. Same shortcuts (&lt;code&gt;cmd+c&lt;/code&gt;, &lt;code&gt;cmd+p&lt;/code&gt;, etc), same movements (arrow keys, page up/down, &lt;code&gt;ctrl+a&lt;/code&gt;, &lt;code&gt;ctrl+e&lt;/code&gt;, etc). To exit this mode you need to press escape&lt;/p&gt;

&lt;p&gt;There are many movement commands that can result in switching to Insert Mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  insert before letter under cursor: &lt;strong&gt;&lt;code&gt;i&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  insert after letter under cursor: &lt;strong&gt;&lt;code&gt;a&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  insert at the start of the line: &lt;strong&gt;&lt;code&gt;I&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  insert at the end of the line: &lt;strong&gt;&lt;code&gt;A&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  insert on a new line: &lt;strong&gt;&lt;code&gt;o&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  insert on a new line above: &lt;strong&gt;&lt;code&gt;O&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  substitute: &lt;strong&gt;&lt;code&gt;s&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  change: &lt;strong&gt;&lt;code&gt;c&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Visual Mode
&lt;/h3&gt;

&lt;p&gt;A mode for creating selections.  This mode can be extremely useful for identifying chunks of text to be manipulated (e.g. apply reg expression for selected text).&lt;/p&gt;

&lt;p&gt;To enter Visual Mode (starting from Normal Mode):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;v&lt;/code&gt; to select by character&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;V&lt;/code&gt; to select by line&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Language of Text Editing
&lt;/h2&gt;

&lt;p&gt;I really enjoy mnemonic keybindings, because they are easy to remember. Vim has them! Many keybindings can be conveniently thought of as the "verbs", "nouns" and "prepositions" that make up the "language".&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples of "verbs":
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  change (&lt;strong&gt;&lt;code&gt;c&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  replace (&lt;strong&gt;&lt;code&gt;r&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  substitute (&lt;strong&gt;&lt;code&gt;s&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  delete (&lt;strong&gt;&lt;code&gt;d&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  yank (&lt;strong&gt;&lt;code&gt;y&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  put (&lt;strong&gt;&lt;code&gt;p&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE: 'change', 'replace', AND 'substitute' aren't the same thing!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Change deletes everything in the next movement and puts you in Insert Mode (though with a selection, it behaves like a substitute).&lt;/li&gt;
&lt;li&gt;  Substitute immediately deletes the current character (or selection) and puts you in Insert Mode.&lt;/li&gt;
&lt;li&gt;  Replace never enters Insert Mode at all, but just replaces the current character (or every character in a selection) with the provided character.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Examples of "nouns":
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  word (&lt;strong&gt;&lt;code&gt;w&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  end (&lt;strong&gt;&lt;code&gt;e&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  beginning (&lt;strong&gt;&lt;code&gt;b&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Examples of "prepositions":
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  inside (&lt;strong&gt;&lt;code&gt;i&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  around (&lt;strong&gt;&lt;code&gt;a&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  (un)til (&lt;strong&gt;&lt;code&gt;t&lt;/code&gt;&lt;/strong&gt;) You can combine these parts of the "language" to perform editing tasks:&lt;/li&gt;
&lt;li&gt;  delete to the end of a word: &lt;strong&gt;&lt;code&gt;dw&lt;/code&gt;&lt;/strong&gt; (or &lt;strong&gt;&lt;code&gt;de&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  delete the current word: &lt;strong&gt;&lt;code&gt;diw&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  yank to the end of word: &lt;strong&gt;&lt;code&gt;ye&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  change inside parentheses: &lt;strong&gt;&lt;code&gt;ci)&lt;/code&gt;&lt;/strong&gt; (or &lt;strong&gt;&lt;code&gt;ci(&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;  delete around brackets: &lt;strong&gt;&lt;code&gt;da]&lt;/code&gt;&lt;/strong&gt; (or &lt;strong&gt;&lt;code&gt;da[&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, Vim has more editing and movement commands and I want you to give it a try. I am sure that it can be a life-changer for your workflow!&lt;/p&gt;

&lt;p&gt;Afterword&lt;/p&gt;

&lt;h3&gt;
  
  
  Awesome personal remaps that I think are really helpful
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Remap &lt;strong&gt;&lt;code&gt;CAPSLOCK&lt;/code&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;code&gt;ESC&lt;/code&gt;&lt;/strong&gt; if pressed alone, and to &lt;strong&gt;&lt;code&gt;CTRL/CMD&lt;/code&gt;&lt;/strong&gt; if pressed with the key. For me personally, it's easier to reach out.&lt;/li&gt;
&lt;li&gt; Remap &lt;strong&gt;&lt;code&gt;WIN/OPTION&lt;/code&gt;&lt;/strong&gt; + &lt;strong&gt;&lt;code&gt;hjkl&lt;/code&gt;&lt;/strong&gt; to arrow keys&lt;/li&gt;
&lt;li&gt; Remap &lt;strong&gt;&lt;code&gt;WIN/OPTION + N&lt;/code&gt;&lt;/strong&gt; go to the next word and &lt;strong&gt;&lt;code&gt;WIN/OPTION + P&lt;/code&gt;&lt;/strong&gt; go to the previous word&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where I use vim keybindings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Neovim&lt;/strong&gt; - my main text editor.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Terminal&lt;/strong&gt; I am using zsh-vi-mode plugin for zsh.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Obsidian&lt;/strong&gt; for writing notes&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Google Chrome&lt;/strong&gt; I am using Surfingkeys plugin for browsing&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>neovim</category>
      <category>vim</category>
    </item>
  </channel>
</rss>
