0.1 The Surgeon’s Precision
Imagine you’re a surgeon, and instead of scalpels, you have a magic wand that can precisely select exactly what you need to operate on:
- “Select the entire function”
- “Select everything inside the quotes”
- “Select the whole paragraph”
- “Select the content between brackets”
That’s what text objects give you - surgical precision in text editing. This is the feature that separates Vim beginners from Vim masters.
0.2 What Are Text Objects?
Text objects are Vim’s way of understanding the structure of your text. Instead of thinking character by character, you think in meaningful chunks:
- Words:
word,WORD - Sentences:
sentence - Paragraphs:
paragraph - Quotes:
"hello world" - Brackets:
(content),[content],{content} - Tags:
<div>content</div>
0.3 The Grammar: i vs a
Text objects work with two modifiers:
0.3.1 i = “inner” or “inside”
- Selects the content WITHOUT the boundaries
i"= content inside quotes (without the quotes)i(= content inside parentheses (without the parentheses)
0.3.2 a = “around” or “all”
- Selects the content WITH the boundaries
a"= content including the quotesa(= content including the parentheses
Think of it like this: - i = “I want the filling” - a = “I want the whole sandwich”
0.4 Essential Text Objects
0.4.1 Word Objects 📝
| Command | Selects | Example |
|---|---|---|
iw |
Inner word | hello from “hello world” |
aw |
A word (with space) | hello from “hello world” |
iW |
Inner WORD | hello,world from “hello,world!” |
aW |
A WORD (with space) | hello,world! from “hello,world! next” |
0.4.2 Quote Objects 🔤
| Command | Selects | Example |
|---|---|---|
i" |
Inside double quotes | hello from "hello" |
a" |
Around double quotes | "hello" from "hello" |
i' |
Inside single quotes | world from 'world' |
a' |
Around single quotes | 'world' from 'world' |
i\`` | Inside backticks |codefrom ``code`` | |a`| Around backticks | ``code`` from ``code` `` |
0.4.3 Bracket Objects 🔗
| Command | Selects | Example |
|---|---|---|
i( or i) |
Inside parentheses | x + y from (x + y) |
a( or a) |
Around parentheses | (x + y) from (x + y) |
i[ or i] |
Inside square brackets | 0 from [0] |
a[ or a] |
Around square brackets | [0] from [0] |
i{ or i} |
Inside curly braces | name: "John" from {name: "John"} |
a{ or a} |
Around curly braces | {name: "John"} from {name: "John"} |
0.4.4 Paragraph and Sentence Objects 📄
| Command | Selects | Example |
|---|---|---|
ip |
Inner paragraph | Text block without empty lines |
ap |
Around paragraph | Text block with empty lines |
is |
Inner sentence | Sentence without trailing space |
as |
Around sentence | Sentence with trailing space |
0.5 Text Objects in Action
0.5.1 Example 1: Changing a Function Parameter
Code:
Task: Change tax_rate=0.08 to tax_rate=0.10
Traditional way: Carefully select the characters Vim way: 1. Move cursor anywhere in 0.08 2. ci" - Change inside quotes… wait, no quotes! 3. ciw - Change inner word 4. Type 0.10
Even better: f0 then cw (find 0, change word)
0.5.2 Example 2: Deleting Content in Quotes
Code:
Task: Clear the string but keep the quotes
Traditional way: Select character by character Vim way: 1. Move cursor anywhere inside the quotes 2. di" - Delete inside quotes 3. Result: print("")
0.5.3 Example 3: Selecting a Whole Function
Code:
Task: Select the entire function body
Traditional way: Click and drag carefully Vim way: 1. Move cursor anywhere in the function 2. vip - Visual select inner paragraph 3. Or dip - Delete inner paragraph 4. Or yip - Yank inner paragraph
0.5.4 Example 4: Working with Nested Brackets
Code:
Task: Change (1 + taxRate) to (1.1)
Traditional way: Count parentheses carefully Vim way: 1. Move cursor to anywhere in 1 + taxRate 2. ci( - Change inside parentheses 3. Type 1.1
0.6 Combining Text Objects with Operators
Text objects become powerful when combined with operators:
0.6.1 The Holy Trinity: Delete, Change, Yank
| Operation | Command | Result |
|---|---|---|
| Delete word | daw |
Removes word and space |
| Change word | ciw |
Replace word content |
| Yank word | yiw |
Copy word to clipboard |
| Delete in quotes | di" |
Remove quoted content |
| Change in quotes | ci" |
Replace quoted content |
| Yank in quotes | yi" |
Copy quoted content |
0.6.2 Visual Selection with Text Objects
| Command | Result |
|---|---|
viw |
Select inner word |
vaw |
Select word with space |
vi" |
Select inside quotes |
va" |
Select quotes and content |
vip |
Select paragraph |
vi{ |
Select inside braces |
0.7 Advanced Text Object Techniques
0.7.1 Selecting Multiple Objects
0.7.3 Custom Text Objects with Plugins
Popular plugins add more text objects: - ii - Inner indentation - af - A function - ic - Inner comment - al - A line
0.8 Practice Exercise: Text Object Mastery
Create a file with this content:
def calculate_price(items, discount=0.1):
"""Calculate total price with discount."""
total = 0
for item in items:
if item.category == "electronics":
price = item.price * (1 - discount)
else:
price = item.price
total += price
return {"total": total, "discount": discount}
# Test the function
items = [
{"name": "laptop", "price": 1000, "category": "electronics"},
{"name": "book", "price": 20, "category": "literature"}
]
result = calculate_price(items)
print(f"Total: ${result['total']:.2f}")Practice these text object operations:
- Change function name: Cursor on
calculate_price, thenciw - Delete discount parameter: Cursor on
discount=0.1, thendaw - Change string content: Cursor in
"electronics", thenci" - Select entire function: Cursor in function, then
vip - Delete dictionary content: Cursor in
{"total": total, "discount": discount}, thendi{ - Change list item: Cursor in first dictionary, then
ci{
0.9 Common Text Object Patterns
0.9.1 Pattern 1: Quick String Editing
0.9.2 Pattern 2: Function Parameter Editing
0.9.3 Pattern 3: Block Operations
0.9.4 Pattern 4: Paragraph Manipulation
0.10 The Text Object Mindset
0.10.1 Before Text Objects:
- “I need to select from here to here”
- “Let me carefully position my cursor”
- “I hope I don’t select too much or too little”
0.10.2 After Text Objects:
- “I want to change this word” →
ciw - “I want to delete this string” →
di" - “I want to copy this function” →
yip
0.11 Building Text Object Muscle Memory
0.11.1 Week 1: Basic Objects
- Practice
iw,awfor words - Use
i",a"for quotes - Try
i(,a(for parentheses
0.11.2 Week 2: Advanced Objects
- Master
ip,apfor paragraphs - Use
i{,a{for braces - Practice
is,asfor sentences
0.11.3 Week 3: Combination Mastery
- Combine with operators (
daw,ciw,yip) - Use visual selection (
viw,vip) - Practice with real code
0.11.4 Week 4: Speed and Precision
- Use text objects without thinking
- Combine with movements
- Develop personal patterns
0.12 What’s Next?
You now understand: - What text objects are and why they’re powerful - The difference between i (inner) and a (around) - Essential text objects for words, quotes, brackets, and paragraphs - How to combine text objects with operators - Advanced techniques for complex selections
In the next post, we’ll learn Delete, Change, Copy Like a Wizard and master the core editing operations that make Vim so powerful.
0.13 Key Takeaways
- Text objects are Vim’s superpower - they understand text structure
i= inner,a= around - choose based on what you want- Combine with operators -
daw,ciw,yipare your friends - Think in chunks, not characters - words, sentences, paragraphs
- Practice with real code - muscle memory is everything
Text objects transform Vim from a character editor to a structure editor. Once you master them, you’ll edit text with surgical precision and wonder how you ever lived without them.
Ready to become an editing wizard? Continue with Delete, Change, Copy Like a Wizard to master the core editing operations.
Reuse
Citation
@online{2026,
author = {, Hasan},
title = {Text {Objects:} {The} {Secret} {Weapon} of {Vim} {Masters}},
date = {2026-08-23},
langid = {en}
}