Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here

vim-abolish

abolish.vim: easily search for, substitute, and abbreviate multiple variants of a word

Subscribe to updates I use vim-abolish


Statistics on vim-abolish

Number of watchers on Github 1213
Number of open issues 25
Average time to close an issue 4 months
Main language VimL
Average time to merge a PR 2 days
Open pull requests 4+
Closed pull requests 7+
Last commit over 2 years ago
Repo Created about 11 years ago
Repo Last Updated over 1 year ago
Size 48 KB
Homepage http://www.vim.or...
Organization / Authortpope
Contributors10
Page Updated
Do you use vim-abolish? Leave a review!
View open issues (25)
View vim-abolish activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating vim-abolish for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

abolish.vim

I sat on this plugin for 3 years before releasing it, primarily because it's so gosh darn hard to explain. It's three superficially unrelated plugins in one that share a common theme: working with variants of a word.

Abbreviation

I know how to spell separate. I know how to spell desperate. My fingers, however, have trouble distinguishing between the two, and I invariably have a 50 percent chance of typing seperate or desparate each time one of these comes up. At first, I tried abbreviations:

:iabbrev  seperate  separate
:iabbrev desparate desperate

But this falls short at the beginning of a sentence.

:iabbrev  Seperate  Separate
:iabbrev Desparate Desperate

To be really thorough, we need uppercase too!

:iabbrev  SEPERATE  SEPARATE
:iabbrev DESPARATE DESPERATE

Oh, but consider the noun form, and the adverb form!

:iabbrev  seperation  separation
:iabbrev desparation desperation
:iabbrev  seperately  separately
:iabbrev desparately desperately
:iabbrev  Seperation  separation
:iabbrev Desparation Desperation
:iabbrev  Seperately  Separately
:iabbrev Desparately Desperately
:iabbrev  SEPERATION  SEPARATION
:iabbrev DESPARATION DESPERATION
:iabbrev  SEPERATELY  SEPARATELY
:iabbrev DESPARATELY DESPERATELY

Wait, there's also separates, separated, separating, separations, separator...

Abolish.vim provides a simpler way. The following one command produces 48 abbreviations including all of the above.

:Abolish {despa,sepe}rat{e,es,ed,ing,ely,ion,ions,or}  {despe,sepa}rat{}

My current configuration has 25 Abolish commands that create hundreds of corrections my fingers refuse to learn.

Substitution

One time I had an application with a domain model called facility that needed to be renamed to building. So, a simple search and replace, right?

:%s/facility/building/g

Oh, but the case variants!

:%s/Facility/Building/g
:%s/FACILITY/BUILDING/g

Wait, the plural is more than s so we need to get that too!

:%s/facilities/buildings/g
:%s/Facilities/Buildings/g
:%s/FACILITIES/BUILDINGS/g

Abolish.vim has your back. One command to do all six, and you can repeat it with & too!

:%Subvert/facilit{y,ies}/building{,s}/g

From a conceptual level, one way to think about how this substitution works is to imagine that in the braces you are declaring the requirements for turning that word from singular to plural. In the facility example, the same base letters in both the singular and plural form of the word are facilit To turn facility to a plural word you must change the y to ies so you specify {y,ies} in the braces.

To convert the word building from singular to plural, again look at the common letters between the singular and plural forms: building. In this case you do not need to remove any letter from building to turn it into plural form and you need to add an s so the braces should be {,s}.

A few more examples:

Address to Reference

:Subvert/address{,es}/reference{,s}/g

Blog to Post (you can just do this with a regular :s also)

:Subvert/blog{,s}/post{,s}/g

Child to Adult

:Subvert/child{,ren}/adult{,s}/g

Be amazed as it correctly turns the word children into the word adults!

Die to Spinner

:Subvert/di{e,ce}/spinner{,s}/g

You can abbreviate it as :S, and it accepts the full range of flags including things like c (confirm).

There's also a variant for searching and a variant for grepping.

Coercion

Want to turn fooBar into foo_bar? Press crs (coerce to snake_case). MixedCase (crm), camelCase (crc), snake_case (crs), UPPER_CASE (cru), dash-case (cr-), dot.case (cr.), space case (cr<space>), and Title Case (crt) are all just 3 keystrokes away. These commands support repeat.vim.

Installation

If you don't have a preferred installation method, I recommend installing pathogen.vim, and then simply copy and paste:

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-abolish.git

Once help tags have been generated, you can view the manual with :help abolish.

Self-Promotion

Like abolish.vim? Follow the repository on GitHub and vote for it on vim.org. And if you're feeling especially charitable, follow tpope on Twitter and GitHub.

License

Copyright (c) Tim Pope. Distributed under the same terms as Vim itself. See :help license.

vim-abolish open issues Ask a question     (View All Issues)
  • almost 3 years Feature Request, Subvert: support restriction to visual selection
  • almost 3 years negative lookahead in subvert
  • almost 3 years [RFC] Coersion for inner and outer textobjects, WORD and visual mode
  • over 3 years Unable to use or escape special characters in expression.
  • over 3 years multiple changes in one line
  • about 4 years Completion when lazy loading with NeoBundleLazy
  • over 4 years Coercion remapping
  • over 4 years Request: text objects for partial words
  • almost 5 years Request: add coercion to words and Upper Case Words
  • almost 5 years Match inside variable names might not be complete.
  • almost 5 years unexpected output if search string is lowercase and file uses snake case
  • about 5 years The Subvert name is fogged
  • about 5 years Dashes of abbreviaton not appearing if abbreviation invoked with upper case letter first
  • over 5 years cursor location seems wonky after coercion
  • about 6 years Allow abbreviating only commands, and only at the beginning of a line
  • about 6 years Uncaught exception when using double quotes in :Subvert
  • over 6 years Coercing too quickly?
  • almost 7 years Feature request: support for %S//sub/ syntax
  • over 7 years loop through camelcase snakecase etc.
vim-abolish open pull requests (View All Pulls)
  • Title Case
  • Adds support for S//sub/ syntax.
  • Update coercion docs with hypen separated case
  • Add "Title Case" coercion method (crt)
vim-abolish questions on Stackoverflow (View All Questions)
  • vim-abolish Echos Extra matches inside of vim
vim-abolish list of languages used
  • Vim script
Other projects in VimL