Okay, here's a practical and friendly way I handle Vim's auto-indent when I need it out of the way for a few moments.
If I just want to paste something without Vim reformatting it, I usually toggle paste mode: :set paste to turn it on, paste the text, then :set nopaste to go back. I often map a key for that so it’s painless, for example :set pastetoggle= or put in my config nnoremap :set paste! to flip it. Paste mode stops auto-indent, indentexpr, and other niceties, so your pasted code won't get mangled.
If I need to disable automatic indentation for editing (not just pasting), I prefer buffer-local switches so I don’t mess with other files: :setlocal noautoindent nosmartindent nocindent and, if needed, :setlocal indentexpr= to clear any expression-based indent. To restore, use :setlocal autoindent smartindent cindent or reopen the buffer. Little tip: :set paste? shows whether paste is on. Personally, I use paste for quick fixes and :setlocal for longer edits — keeps things predictable and quiet during a frantic refactor.
Quick and friendly tip: when auto-indent annoys me for a short stretch, I use paste mode. :set paste lets you paste cleanly; :set nopaste puts things back. You can toggle with :set paste! too. For work limited to the current file, I prefer :setlocal noautoindent nosmartindent nocindent — that disables the usual indenting just in this buffer.
If a filetype plugin is still indenting, clear it with :setlocal indentexpr=. To avoid typing, I often set :set pastetoggle= so a single keypress is enough. Try that next time you paste from a browser or terminal; it saves me from fixing a dozen lines of broken indentation.
When I'm in a hurry and Vim keeps reindenting lines I don't want changed, I reach for a few quick commands.
The fastest trick: :set paste then paste, and :set nopaste afterward. If you want to toggle it, :set paste! flips that boolean. For buffer-only behaviour use :setlocal noautoindent nosmartindent nocindent; that stops standard auto-indenting and C-like indents for the current buffer only. If an indent plugin is driving the behaviour, clear the expression with :setlocal indentexpr=. To re-enable, run :setlocal autoindent smartindent cindent or simply reload the buffer.
If you're often pasting, consider :set pastetoggle= or map a key so you don't need to type the whole command. I do that when juggling code snippets from browsers or terminals — it saves a ton of frustration and keeps the file sane without permanent changes.
I've had days where Vim's auto-indent fights every pasted block, so I use a small mental checklist now. First, decide if this is a one-off paste: if yes, use :set paste (or :set paste! to toggle) before pasting and :set nopaste after. That prevents Vim from applying autoindent, smartindent, cindent, or indentexpr during the paste.
If I intend to edit in a buffer without auto-indenting for a while, I switch only that buffer: :setlocal noautoindent nosmartindent nocindent and clear complex rules with :setlocal indentexpr=. That way filetype plugins elsewhere keep working. To restore defaults: :setlocal autoindent smartindent cindent and reset indentexpr if you backed it up. Also, :set paste? or :setlocal paste? shows the current state. I recommend mapping a key like F2 to toggle paste or using :set pastetoggle= so you can stay in flow instead of hunting commands. Small ergonomics but huge payoff when pasting many snippets.
2025-09-09 09:36:42
23
View All Answers
Scan code to download App
Related Books
Dripping Forbidden: 100 Ways to Make Yourself Wet
Flimxy vic
10
23.9K
If you’re a delicate little flower who clutches pearls and believes sex should only happen in the missionary position with the lights off and your spouse’s permission, close this book immediately. Seriously. Put it down before you ruin your boring little life with uncontrollable wetness and questionable morals.
Still here? Good girl.
Welcome to Dripping Forbidden: 100 Ways to Make Yourself Wet — a ruthless, dripping-wet collection of one hundred filthy, plot-driven taboo stories that don’t just flirt with the line… they bend you over it, fuck you senseless, and leave you leaking.😉 💦
“You wear these little skirts… are you trying to seduce me?” His eyes dragged down my body.
“I—I don’t know what you’re talking about”
Before I could finish, his hand slid up my thigh, fingers brushing beneath the edge of my skirt. My breath hitched. He shoved my panties aside and pressed two thick fingers inside me.
“Ahh. . . Kelvin. .” My knees buckled against the sink as he started slow, then thrust rougher, stretching me with every push.
“You like that, baby girl?” he whispered against my lips.
“Yes… oh God, yes.”
His mouth hovered over mine, stealing the sound of my moans before he spun me around to face the mirror. My own reflection stared back at me wide eyes, flushed cheeks while Kelvin loomed behind, his heat swallowing me whole.
“Watch while I fuck you,” he growled, shoving down his zipper.
The heavy length of him slammed into me in one rough stroke, knocking the air from my lungs.
“F-fuck!” I cried out, gripping the sink for dear life.
He yanked my hair back, forcing me to look at myself as he pounded into me. “Be my slut today.”
Dripping Wet is a collection of straight-up filthy stories about raw, no-limits sex.
Bodies crashing together in hard fucks. Holes stretched wide, throats used rough, sheets drenched in cum and sweat.
Each one dives deep into pure hunger, cocks slamming in deep, pussies taking it hard, asses getting claimed with no mercy. All the taboo stuff you crave, laid out in brutal detail.
No romance. No sweet talk. Just hard, wet, pounding sex that leaves you spent. This book isn't about love. It's about need and giving in until you're soaked.
Raw and Ruined: Short Erotic Sins
Step into a world where desire doesn’t ask permission and shame is just foreplay.
Several merciless, sweat-slick stories that don’t seduce—they take.
No slow burns.
No sweet nothings.
Just skin slapping skin, nails carving lines down backs, mouths full, thighs trembling, and the kind of orgasms that make your vision white out and your voice break.
These stories are greedy.
They bruise.
They stain sheets and memories.
They leave teeth marks and handprints and the delicious ache of being used exactly the way you secretly always wanted.
These are not love stories.
These are lust stories.
Short. Sharp. Unapologetic.
And they will leave you throbbing, aching, and reaching for someone—or something—to ruin you next.
Raw and Ruined: Short Erotic Sins
Because sometimes the dirtiest thing you can do… is let yourself be devoured.
“Hold the fucking counter,” he growls.
I grip the edge. He slams into me raw (one brutal thrust that punches the air from my lungs).
“Fuck—Jake—” I choke.
He sets a punishing rhythm, hips snapping so hard the cabinets rattle, cock splitting me open.
“Quiet,” he snarls, spanking my ass hard enough to echo. “Your brother’s ten feet away.”
Another vicious spank. Then another. My skin burns red.
“Yes—Daddy—harder—” I sob, biting my lip bloody.
He spanks me again and again, handprints blooming, fucking me so deep my toes curl.
“You love this, don’t you?” he rasps. “Love getting wrecked while Tyler sleeps.”
“Yes—fuck yes—don’t stop—”
**
Naked Scripts is a compilation of thrilling, heart throbbing erotica short stories that would keep you at the edge in anticipation for more.
It's loaded with forbidden romance, domineering men, naughty and sex female leads that leaves you aching for release.
From forbidden trysts to irresistible strangers.
Every one holds desires, buried deep in the hearts to be treated like a slave or be called daddy! And in this collection, all your nasty fantasies would be unraveled.
It would be an escape to the 9th heavens while you beg and plead for more like a good girl.
She signed a contract with him to become the lady at his beck and call. He claimed, “This is for our mutual benefit. Once the contract expires, we will be nothing but strangers.” However, he broke his promise and refused to let her go. “Liam Ackman, when will you ever let me go?” His thin lips curled up into a smirk as he picked her up bridal style. “Anna Hamilton, you are mine for the rest of your life! Don’t even think about leaving!” Turned out, it had always been a trap, and she fell for it. There was no escaping his grasp!
“You are mine.” Jerald possessed, trailing wet kisses down Jasmine's body while she let out uneven breaths, her body tingling as tiny ripples sneered through her.
Jerald's right hand gripped her heavy tits and he fondled hard, kissing her navel, obsession burning through his every act.
“You are mine. Jasmine… your body..” He paused and kissed her navel.
“Your heart and your soul... Everything belongs to me.” His voice was laced with domination as he moved his head downward, trailing wet kisses down her body till he parted her legs with his head, burying his face between her beautiful thighs.
*
This high and Mighty never took NO for an answer. He is Jerald De Luca. Either business or Women, he would surely always have his slightly illegal way.
When Jasmine crawled into his bed with the intention of saving up for some medical bills, she thought everything would last for a month like the contract spelled out. Everyone has been to his bed, but none has ever won his heart like she did. She was the opposite of him, calm, yet fierce and unyielding. She didn't bend to his will like the air and every other woman did and most differently, her eyes held the light that was missing in this world.
This mare lust grew into a love that pioneered an unshakable obsession. The desire to protect her was like second nature, clogging his every breath like a whispered secret. But when life challenges come crashing in, threatening to rip their relationship apart, Jerald is faced with the harsh reality of life. This angel was not so innocent as he forsee and all along he had been the enemy that he had sworn to protect her away from.
Honestly, getting Python auto-indent working in vim is one of those tiny victories that makes editing a joy. My go-to is to enable vim's filetype detection and then set sensible Python indentation rules in my config. Add these lines to your ~/.vimrc or init.vim for Neovim:
filetype plugin indent on
set autoindent
set expandtab
set shiftwidth=4
set softtabstop=4
set tabstop=4
The first line turns on filetype-specific plugins and indent scripts (this loads vim's python indent file). The rest make tabs into spaces and use four spaces per indent, which is the common Python convention. If you want the setting to apply only to Python buffers, drop the global lines into ~/.vim/ftplugin/python.vim and use setlocal instead of set.
If indentation still feels off, check the buffer's filetype with :set filetype? and inspect loaded scripts with :scriptnames. I sometimes install a plugin like 'vim-python-pep8-indent' or use external formatters like 'black' called via a formatter plugin to normalize whitespace. Try opening a .py and typing an indented block — it should behave. If not, tell me what output :set filetype? and :verbose set shiftwidth? give and we can debug further.
Man, that frustration is so real — I’ve been there. First thing I do is check whether vim even thinks it should indent: open the file and run :set filetype? and :verbose set autoindent. If filetype is empty or wrong, indent scripts won’t run. If :verbose shows autoindent being turned off by some script, that points to the culprit.
Next, consider obvious toggles that silently kill indentation: if you’ve got 'set paste' enabled (or you toggled paste mode earlier with a mapping), indentation won’t behave. Also check whether you disabled 'autoindent', 'smartindent', or 'cindent' by mistake. Use :set paste? and :set autoindent? to inspect current state.
If those look fine, source your vimrc manually (:source ~/.vimrc) and watch :messages for errors — a syntax error early in the file can stop the rest of the config from loading, so later indent settings never get applied. Also run vim -u NONE (or nvim -u NORC) to see if a vanilla session indents correctly; if it does, a plugin or a line in your vimrc is to blame. Useful commands: :scriptnames (shows loaded scripts), :verbose set shiftwidth? tabstop? expandtab? and checking ~/.vim/indent or plugin ftplugin files for overrides. If you want, paste the problematic snippet and I’ll poke at it with you.
Okay — let me walk you through this like we’re debugging a stubborn editor together. In my experience inconsistent Vim indentation across buffers usually comes down to a few culprits: buffer-local options, filetype-specific plugins, modelines in files, or external tools like an .editorconfig plugin.
First, check what each buffer actually has set. Use :setlocal and :verbose set shiftwidth? tabstop? softtabstop? expandtab? and :set filetype? and :verbose set autoindent? — the verbose form tells you where a setting was last changed. If you see different values between buffers, that’s your clue: something is changing options per file. Often a ftplugin or indent script is overriding global settings, or a modeline inside a file is setting tabs/spaces.
To fix it, pick a consistent baseline in your vimrc/init.vim: filetype plugin indent on (or in Neovim, enable filetype and indentation early), then set sensible defaults like set tabstop=4 shiftwidth=4 softtabstop=4 expandtab or use set noexpandtab for projects that prefer tabs. If a project has specific rules, add an .editorconfig file and install the editorconfig plugin or add autocmds to apply per-filetype settings. When you need to find the source of an override, :scriptnames shows loaded scripts and :verbose set
If you're fiddling with Vim's indentation and want precise control, the trio I reach for is :set shiftwidth, :set tabstop, and :set softtabstop.
shiftwidth (sw) controls how many spaces a single indentation level uses for operations like >>, <<, and automatic indentation. I usually do :setlocal shiftwidth=4 for projects that use four-space indents. tabstop (ts) sets how many spaces a literal TAB character displays as; use :set tabstop=4 to make existing tabs line up visually with your intended width. softtabstop (sts) affects insert-mode behavior: :set softtabstop=4 makes pressing Backspace or Tab behave like you're working with 4-space logical tabs even if actual file uses tabs.
A couple of other practical commands I keep in my .vimrc: :set expandtab to insert spaces instead of real tabs (or :set noexpandtab to keep tabs), :set autoindent to keep the previous line's indentation, and :set cindent or :set smartindent for C-like auto-indenting. If you want the changes to apply only to the current buffer, use :setlocal sw=2 ts=2 sts=2. To reformat an entire file after changing settings, I often run gg=G to reindent the whole buffer, or :retab to convert tabs to spaces (or the reverse with :retab!). These little tweaks saved me hours when I was switching between Python, Makefiles, and Go projects.
Okay, this is the hot take I give my friends when they ask how to stop JavaScript files from turning into a jagged mess: treat indentation as a filetype thing, not a global, and use 2 spaces plus an actual JS-aware indent engine. I usually put this in my vimrc (or better, in ftplugin/javascript.vim):
filetype plugin indent on
autocmd FileType javascript,typescript setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType javascript,typescript setlocal autoindent smartindent
Those lines give you consistent 2-space soft tabs (the de facto style for many JS projects) and rely on Vim's smartindent for basic braces. But honestly, for real-world code with ES6/JSX/template literals, install a javascript-indent plugin (like the popular one that provides an indentexpr) and let it set indentexpr for you; it handles arrow functions, template literals and some weird edge cases better than plain smartindent. I also map = to re-indent visually: vmap = = or use gg=G to reformat a whole file.
Finally, I pair this with an on-save formatter — 'prettier' is my go-to — so even when teammates differ, my local formatting is predictable. If you want the exact plugin names or a sample ftplugin that runs Prettier on save, I can paste that too.
Okay, I’ll gush a bit: if you want auto-indent to actually behave instead of randomly guessing, start by combining a detector, a language-aware indenter, and a formatter. I like using vim-sleuth to sniff tabs vs spaces and shiftwidth automatically; it fixes half my headaches before I even open the file.
After sleuth, for Neovim I plug in nvim-treesitter with its indent module turned on — it understands syntax much better than old regex-based indent scripts. Pair that with either null-ls or coc.nvim (or ale if you prefer linters/formatters) to run real formatters like prettier, clang-format, shfmt, or rustfmt on save. That lets the language tools correct structural indentation rather than vim guessing.
Small extras that helped me: editorconfig-vim to respect project settings, indent-o-matic as a fallback detector in weird repos, and indent-blankline.nvim for visual guides so you can spot mistakes. Also don't forget filetype plugin indent on and sensible defaults (autoindent, smartindent/cindent where appropriate). With those layered, indentation accuracy improves dramatically and my diffs stop being a jungle of whitespace edits.
If you've ever opened a file in Vim and wondered why indentation behaves one way in one project and differently in another, the way filetype plugins and indent scripts interact is the usual culprit. In my messy but beloved setup I keep separate snippets in ~/.vim/ftplugin/ and ~/.vim/indent/ and they each have a job: ftplugin files generally set buffer-local editing options (things like shiftwidth, tabstop, expandtab, mappings) while indent scripts (under indent/) provide indentation logic by setting 'indentexpr', 'cindent', 'indentkeys', or related buffer-local options. Because these are buffer-local, whichever script writes a particular option last wins for that buffer.
Practically that means you can get conflicts. An ftplugin might set 'shiftwidth' to 4 for 'python' and an indent script might expect 2; or an indent script will set 'indentexpr' to a custom function that overrides simpler behaviors such as 'autoindent'. The usual fixes I use are: enable both with :filetype plugin indent on, then put overrides in after/ftplugin/ or after/indent/ so they load later; or explicitly set local options with setlocal in a ftplugin; or prevent an indent script with let b:did_indent = 1 if you deliberately want to skip it. For debugging, :scriptnames shows what got sourced, and :verbose setlocal shiftwidth? / :verbose setlocal indentexpr? tell you who last changed a setting. I like keeping ftplugin for styling and small mappings, and leaving indentation math to indent scripts — but I always keep an 'after' copy for those moments when I need the last word.
Vim's expandtab feature is a lifesaver for anyone who prefers spaces over tabs for indentation. I stumbled upon this while working on a collaborative project where mixing tabs and spaces caused chaos in the codebase. To enable it, just type ':set expandtab' in command mode. This ensures every tab press inserts spaces instead of a tab character. You can customize the number of spaces with ':set tabstop=4' (or any number you prefer).
What's cool is that this pairs beautifully with 'autoindent' and 'smartindent' for seamless formatting. I once spent hours debugging an issue only to realize inconsistent indentation was the culprit—expandtab would've saved me the headache. Now it's the first thing I configure in my .vimrc for any new environment.
If you've ever opened a file that looks like a bento box of tabs and spaces, Vim's auto-indent behavior is surprisingly predictable once you know the pieces involved.
Auto-indent (the basic 'autoindent' option) simply copies the leading characters from the previous line — literally. That means if the previous line starts with a tab, then two spaces, Vim will start the new line with that exact sequence. Nothing clever, just a straightforward copy. Where things get interesting is when you press Tab or when you run reindent commands: Tab insertion is governed by 'expandtab' and 'softtabstop'. If 'expandtab' is set, inserting a tab character from Insert mode actually inserts spaces. If it's unset, Vim inserts a real tab character, and 'softtabstop' affects how many spaces the Tab key represents while editing.
Reformatting with commands like '=' or using cindent/smartindent is different: Vim computes the desired indentation in columns based on 'shiftwidth' and the language indent rules, then writes the indentation according to your tab settings (usually honoring 'expandtab' to decide whether to use spaces, or using tabs where possible when it's unset). Practical tips: use ':set list' to reveal hidden whitespace, ':set tabstop=4 shiftwidth=4 softtabstop=4', ':set expandtab' to normalize new indentation to spaces, and ':retab' to convert existing characters if you want to clean the file up.
I'll be blunt: yes, you absolutely can set up Vim to auto-indent differently per project directory, and I've done it a bunch of times across projects with different coding styles.
When I need a project-specific policy I usually pick one of three safe routes: use a repository-level '.editorconfig' with the EditorConfig Vim plugin (works across editors and is a huge life-saver), add per-project autocommands in my global vimrc that match the project path, or—if I must—use a controlled local vimrc mechanism (with security checks). For example, in your main vimrc you can add an autocmd that applies settings only when the buffer lives under a particular path:
augroup proj_indent
autocmd!
autocmd BufRead,BufNewFile /path/to/myproj/* setlocal shiftwidth=4 tabstop=4 expandtab
augroup END
That keeps the rules scoped to files under that directory. I avoid blindly enabling 'exrc' because executing arbitrary project .vimrc files can be risky; instead I either require a checked-in '.editorconfig' or use a trusted plugin like 'localvimrc' that prompts you before sourcing. Also remember to use setlocal so other projects aren’t affected. For Neovim, the same autocmds work, but I often detect the project root via an LSP/root_pattern helper and then apply settings dynamically. Overall, choose EditorConfig if you want a cross-editor approach, or autocommands if you prefer staying purely in Vim land.