## Pair mappings Available mappings i( i) ib i{ i} iB i[ i] ir i< i> ia it a( a) ab a{ a} aB a[ a] ar a< a> aa at I( I) Ib I{ I} IB I[ I] Ir I< I> Ia It A( A) Ab A{ A} AB A[ A] Ar A< A> Aa At in( in) inb in{ in} inB in[ in] inr in< in> ina int an( an) anb an{ an} anB an[ an] anr an< an> ana ant In( In) Inb In{ In} InB In[ In] Inr In< In> Ina Int An( An) Anb An{ An} AnB An[ An] Anr An< An> Ana Ant il( il) ilb il{ il} ilB il[ il] ilr il< il> ila ilt al( al) alb al{ al} alB al[ al] alr al< al> ala alt Il( Il) Ilb Il{ Il} IlB Il[ Il] Ilr Il< Il> Ila Ilt Al( Al) Alb Al{ Al} AlB Al[ Al] Alr Al< Al> Ala Alt Chart for a list of pairs ``` .......... a ( bbbbbbbb ) ( ccccccc ) ( dddddd ) ( eeeeeee ) ( ffffffff ) g ││└ 2Il) ┘│││││└ Il) ┘│││││└ I) ┘│││││└ In) ┘│││││└ 2In) ┘│││ │└─ 2il) ─┘│││└─ il) ─┘│││└─ i) ─┘│││└─ in) ─┘│││└─ 2in) ─┘││ ├── 2al) ──┘│├── al) ──┘│├── a) ──┘│├── an) ──┘│├── 2an) ──┘│ └── 2Al) ───┘└── Al) ───┘└── A) ───┘└── An) ───┘└── 2An) ───┘ ``` Chart for nested pairs ``` .......... a ( b ( cccccccc ) d ) ( e ( ffffff ) g ) ( h ( iiiiiiii ) j ) k │││ ││└ 2Il) ┘││││││││││ ││└ I) ┘││││││││││ ││└ 2In) ┘│││││││ │││ │└─ 2il) ─┘│││││││││ │└─ i) ─┘│││││││││ │└─ 2in) ─┘││││││ │││ ├── 2al) ──┘││││││││ ├── a) ──┘││││││││ ├── 2an) ──┘│││││ │││ └── 2Al) ───┘│││││││ └── A) ───┘│││││││ └── 2An) ───┘││││ ││└───── Il) ────┘│││││└─── 2I) ────┘│││││└───── In) ────┘│││ │└────── il) ─────┘│││└──── 2i) ─────┘│││└────── in) ─────┘││ ├─────── al) ──────┘│├───── 2a) ──────┘│├─────── an) ──────┘│ └─────── Al) ───────┘└───── 2A) ───────┘└─────── An) ───────┘ ``` ## Quote mappings Available mappings ``` i' i" i` in' in" in` il' il" il` iL' iL" iL` a' a" a` an' an" an` al' al" al` aL' aL" aL` I' I" I` In' In" In` Il' Il" Il` IL' IL" IL` A' A" A` An' An" An` Al' Al" Al` AL' AL" AL` ``` Chart for a list of quotes ``` ............. a ' bbbbbbb ' c ' dddddd ' e ' fffffff ' g ││└ Il' ┘│││ ││└ I' ┘│││ ││└ In' ┘│││ │└─ il' ─┘││ │└─ i' ─┘││ │└─ in' ─┘││ ├── al' ──┘│ ├── a' ──┘│ ├── an' ──┘│ └── Al' ───┘ └── A' ───┘ └── An' ───┘ ``` ## Separator mappings Available mappings ``` i, i. i; i: i+ i- i= i~ i_ i* i# i/ i| i\ i& i$ a, a. a; a: a+ a- a= a~ a_ a* a# a/ a| a\ a& a$ I, I. I; I: I+ I- I= I~ I_ I* I# I/ I| I\ I& I$ A, A. A; A: A+ A- A= A~ A_ A* A# A/ A| A\ A& A$ in, in. in; in: in+ in- in= in~ in_ in* in# in/ in| in\ in& in$ an, an. an; an: an+ an- an= an~ an_ an* an# an/ an| an\ an& an$ In, In. In; In: In+ In- In= In~ In_ In* In# In/ In| In\ In& In$ An, An. An; An: An+ An- An= An~ An_ An* An# An/ An| An\ An& An$ il, il. il; il: il+ il- il= il~ il_ il* il# il/ il| il\ il& il$ al, al. al; al: al+ al- al= al~ al_ al* al# al/ al| al\ al& al$ Il, Il. Il; Il: Il+ Il- Il= Il~ Il_ Il* Il# Il/ Il| Il\ Il& Il$ Al, Al. Al; Al: Al+ Al- Al= Al~ Al_ Al* Al# Al/ Al| Al\ Al& Al$ iN, iN. iN; iN: iN+ iN- iN= iN~ iN_ iN* iN# iN/ iN| iN\ iN& iN$ aN, aN. aN; aN: aN+ aN- aN= aN~ aN_ aN* aN# aN/ aN| aN\ aN& aN$ IN, IN. IN; IN: IN+ IN- IN= IN~ IN_ IN* IN# IN/ IN| IN\ IN& IN$ AN, AN. AN; AN: AN+ AN- AN= AN~ AN_ AN* AN# AN/ AN| AN\ AN& AN$ iL, iL. iL; iL: iL+ iL- iL= iL~ iL_ iL* iL# iL/ iL| iL\ iL& iL$ aL, aL. aL; aL: aL+ aL- aL= aL~ aL_ aL* aL# aL/ aL| aL\ aL& aL$ IL, IL. IL; IL: IL+ IL- IL= IL~ IL_ IL* IL# IL/ IL| IL\ IL& IL$ AL, AL. AL; AL: AL+ AL- AL= AL~ AL_ AL* AL# AL/ AL| AL\ AL& AL$ ``` Chart for a list of separators ``` ......... a , bbbbbbb , ccccccc , dddddd , eeeeeee , fffffff , g ││└ IL, ┘│││└ Il, ┘│││└ I, ┘│││└ In, ┘│││└ IN, ┘│ │ │└─ iL, ─┤│├─ il, ─┤│├─ i, ─┤│├─ in, ─┤│├─ iN, ─┤ │ ├── aL, ─┘├┼─ al, ─┘├┼─ a, ─┘├┼─ an, ─┘├┼─ aN, ─┘ │ └── AL, ──┼┘ └┼─ A, ──┼┘ └┼─ AN, ───┘ └─ Al, ──┘ └─ An, ──┘ ``` ## Argument mappings Available mappings ``` ia aa Ia Aa ina ana Ina Ana ila ala Ila Ala ``` Chart for arguments ``` ......... a ( bbbbbb , ccccccc , d ( eeeeee , fffffff ) , gggggg ) h ││├2Ila┘│││└─Ila─┘││││ ││├─Ia─┘│││└─Ina─┘│││││└2Ina┘│ │ │└┼2ila─┘│├──ila──┤│││ │└┼─ia──┘│├──ina──┤│││├─2ina─┤ │ │ └2ala──┼┤ ││││ │ └─aa───┼┤ │││├┼─2ana─┘ │ └──2Ala──┼┘ ││││ └───Aa───┼┘ │││└┼─2Ana───┘ ├───ala──┘│││ ├───ana──┘││ │ └───Ala───┼┤│ └───Ana───┼┤ │ ││└─────2Ia────────────┘│ │ │└──────2ia─────────────┤ │ ├───────2aa─────────────┘ │ └───────2Aa───────────────┘ ``` ## Customize seeking Seeking is controlled by the setting `g:targets_seekRanges`. Default value: ```vim let g:targets_seekRanges = 'lr rr ll lb ar ab lB Ar aB Ab AB rb al rB Al bb aa bB Aa BB AA' ``` When using a command like `cib` to change inside a block, targets.vim considers the three targets: - smallest target around cursor - next target after cursor - last target before cursor For each of those that were found, we detect what range type it has. A range type depends on the relative position of the start and end of the target, relative to the current cursor position and the currently visible lines. The possibly relative positions are: - `c`: on cursor position - `l`: left of cursor in current line - `r`: right of cursor in current line - `a`: above cursor on screen - `b`: below cursor on screen - `A`: above cursor off screen - `B`: below cursor off screen All possibly ranges are listed below, denoted by two characters: one for the relative start and one for the relative end position of the target. For example, `lr` means "from left of cursor to right of cursor in cursor line". Next to each range type is a pictogram of an example. They are made of these symbols: - `.`: current cursor position - `(`: start of target - `)`: end of target - `/`: line break before and after cursor line - `|`: screen edge between hidden and visible lines #### Ranges on cursor: ``` cr | / () / | starting on cursor, current line cb | / ( /) | starting on cursor, multiline down, on screen cB | / ( / |) starting on cursor, multiline down, partially off screen lc | / () / | ending on cursor, current line ac | (/ ) / | ending on cursor, multiline up, on screen Ac (| / ) / | ending on cursor, multiline up, partially off screen ``` #### Ranges around cursor: ``` lr | / (.) / | around cursor, current line lb | / (. /) | around cursor, multiline down, on screen ar | (/ .) / | around cursor, multiline up, on screen ab | (/ . /) | around cursor, multiline both, on screen lB | / (. / |) around cursor, multiline down, partially off screen Ar (| / .) / | around cursor, multiline up, partially off screen aB | (/ . / |) around cursor, multiline both, partially off screen bottom Ab (| / . /) | around cursor, multiline both, partially off screen top AB (| / . / |) around cursor, multiline both, partially off screen both ``` #### Ranges after (right of/below) cursor ``` rr | / .()/ | after cursor, current line rb | / .( /) | after cursor, multiline, on screen rB | / .( / |) after cursor, multiline, partially off screen bb | / . /()| after cursor below, on screen bB | / . /( |) after cursor below, partially off screen BB | / . / |() after cursor below, off screen ``` #### Ranges before (left of/above) cursor ``` ll | /(). / | before cursor, current line al | (/ ). / | before cursor, multiline, on screen Al (| / ). / | before cursor, multiline, partially off screen aa |()/ . / | before cursor above, on screen Aa (| )/ . / | before cursor above, partially off screen AA ()| / . / | before cursor above, off screen ``` Pictogram legend: ``` A a l r b B relative positions └───────────┘ visible screen └─────┘ current line ``` Given the range types of our targets, we then pick the one that appears first in `g:targets_seekRanges`. If none is found, the selection fails. The default setting generally prefers targets around the cursor, with one exception: If the target around the cursor is not contained in the current cursor line, but the next or last target are, then prefer those. Targets beginning or ending on the cursor are preferred over everything else. Some other useful example settings: Never seek backwards: ```vim let g:targets_seekRanges = 'cr cb cB lc ac Ac lr rr lb ar ab lB Ar aB Ab AB rb rB bb bB BB' ``` Only seek if next/last targets touch current line: ```vim let g:targets_seekRanges = 'cr cb cB lc ac Ac lr rr ll lb ar ab lB Ar aB Ab AB rb rB al Al' ``` Only consider targets fully visible on screen: ```vim let g:targets_seekRanges = 'cr cb cB lc ac Ac lr lb ar ab rr rb bb ll al aa' ``` Only consider targets around cursor: ```vim let g:targets_seekRanges = 'cr cb cB lc ac Ac lr lb ar ab lB Ar aB Ab AB' ``` Only consider targets fully contained in current line: ```vim let g:targets_seekRanges = 'cr cb cB lc ac Ac lr rr ll' ```