*abolish.txt* Language friendly searches, substitutions, and abbreviations Author: Tim Pope License: Same terms as Vim itself (see |license|) This plugin is only available if 'compatible' is not set. INTRODUCTION *abolish* *:Abolish* *:Subvert* Abolish lets you quickly find, substitute, and abbreviate several variations of a word at once. By default, three case variants (foo, Foo, and FOO) are operated on by every command. Two commands are provided. :Abolish is the most general interface. :Subvert provides an alternative, more concise syntax for searching and substituting. > :Abolish [options] {abbreviation} {replacement} :Abolish -delete [options] {abbreviation} :Abolish -search [options] {pattern} :Subvert/{pattern}[/flags] :Abolish!-search [options] {pattern} :Subvert?{pattern}[?flags] :Abolish -search [options] {pattern} {grep-arguments} :Subvert /{pattern}/[flags] {grep-options} :Abolish!-search [options] {pattern} {grep-arguments} :Subvert!/{pattern}/[flags] {grep-options} :[range]Abolish -substitute [options] {pattern} {replacement} :[range]Subvert/{pattern}/{replacement}[/flags] < *:S* In addition to the :Subvert command, a :S synonym is provided if not already defined. This will be used in examples below. PATTERNS *abolish-patterns* Patterns can include brace pairs that contain comma separated alternatives: box{,es} => box, boxes, Box, Boxes, BOX, BOXES For commands with a replacement, corresponding brace pairs are used in both halves. If the replacement should be identical to the pattern, an empty brace pair may be used. If fewer replacements are given than were given in the pattern, they are looped. That is, {a,b} on the replacement side is the same as {a,b,a,b,a,b,...} repeated indefinitely. The following replaces several different misspellings of "necessary": > :%S/{,un}nec{ce,ces,e}sar{y,ily}/{}nec{es}sar{}/g < ABBREVIATING *abolish-abbrev* By default :Abolish creates abbreviations, which replace words automatically as you type. This is good for words you frequently misspell, or as shortcuts for longer words. Since these are just Vim abbreviations, only whole words will match. > :Abolish anomol{y,ies} anomal{} :Abolish {,in}consistant{,ly} {}consistent{} :Abolish Tqbf The quick, brown fox jumps over the lazy dog < Accepts the following options: -buffer: buffer local -cmdline: work in command line in addition to insert mode A good place to define abbreviations is "after/plugin/abolish.vim", relative to ~\vimfiles on Windows and ~/.vim everywhere else. With a bang (:Abolish!) the abbreviation is also appended to the file in g:abolish_save_file. The default is "after/plugin/abolish.vim", relative to the install directory. Abbreviations can be removed with :Abolish -delete: > Abolish -delete -buffer -cmdline anomol{y,ies} < SEARCHING *abolish-search* The -search command does a search in a manner similar to / key. search. After searching, you can use |n| and |N| as you would with a normal search. The following will search for box, Box, and BOX: > :Abolish -search box < When given a single word to operate on, :Subvert defaults to doing a search as well: > :S/box/ < This one searches for box, boxes, boxed, boxing, Box, Boxes, Boxed, Boxing, BOX, BOXES, BOXED, and BOXING: > :S/box{,es,ed,ing}/ < The following syntaxes search in reverse. > :Abolish! -search box :S?box? < Flags can be given with the -flags= option to :Abolish, or by appending them after the separator to :Subvert. The flags trigger the following behaviors: I: Disable case variations (box, Box, BOX) v: Match inside variable names (match my_box, myBox, but not mybox) w: Match whole words (like surrounding with \< and \>) A |search-offset| may follow the flags. > :Abolish -search -flags=avs+1 box :S?box{,es,ed,ing}?we < GREPPING *abolish-grep* Grepping works similar to searching, and is invoked when additional options are given. These options are passed directly to the :grep command. > :Abolish -search box{,es} :S /box{,es}/ * :S /box/aw *.txt *.html < The slash delimiters must both be present if used with :Subvert. They may both be omitted if no flags are used. Both an external grepprg and vimgrep (via grepprg=internal) are supported. With an external grep, the "v" flag behaves less intelligently, due to the lack of look ahead and look behind support in grep regexps. SUBSTITUTING *abolish-substitute* Giving a range switches :Subvert into substitute mode. This command will change box -> bag, boxes -> bags, Box -> Bag, Boxes -> Bags, BOX -> BAG, BOXES -> BAGS across the entire document: > :%Abolish -substitute -flags=g box{,es} bag{,s} :%S/box{,es}/bag{,s}/g < The "c", "e", "g", and "n" flags can be used from the substitute command |:s_flags|, along with the "a", "I", "v", and "w" flags from searching. COERCION *abolish-coercion* *cr* Abolish's case mutating algorithms can be applied to the word under the cursor using the cr mapping (mnemonic: CoeRce) followed by one of the following characters: c: camelCase m: MixedCase _: snake_case s: snake_case u: SNAKE_UPPERCASE U: SNAKE_UPPERCASE -: dash-case (not usually reversible; see |abolish-coercion-reversible|) k: kebab-case (not usually reversible; see |abolish-coercion-reversible|) .: dot.case (not usually reversible; see |abolish-coercion-reversible|) : space case (not usually reversible; see |abolish-coercion-reversible|) t: Title Case (not usually reversible; see |abolish-coercion-reversible|) For example, cru on a lowercase word is a slightly easier to type equivalent to gUiw. COERCION REVERSIBILITY *abolish-coercion-reversible* Some separators, such as "-" and ".", are listed as "not usually reversible". The reason is that these are not "keyword characters", so vim (and abolish.vim) will treat them as breaking a word. For example: "key_word" is a single keyword. The dash-case version, "key-word", is treated as two keywords, "key" and "word". This behaviour is governed by the 'iskeyword' option. If a separator appears in 'iskeyword', the corresponding coercion will be reversible. For instance, dash-case is reversible in 'lisp' files, and dot-case is reversible in R files. vim:tw=78:ts=8:ft=help:norl: