Reputation: 480
I can't find a solution (here and on the web) for simply selecting/inserting/deleting stuff surrounded by dots (a common case in development) :
someobject.some-property-with-hyphens.otherproperty
How to select the middle property ?
I tried :
vi. (dot is for executing last command)
viw (don't include hyphens)
4viw (still nop)
vis (select full line)
app.object['key'].$object_with_a_dollar_sign.function()
Upvotes: 11
Views: 1866
Reputation: 393114
I suspect the real issue here is that hyphens are not considered a part of an identifier
You should try adding
:se iskeyword+=-
for your file type. That way, viw will do exeactly what you want
To make this setting automatic for, say, strange
files:
:autocmd BufReadPost *.strange se isk+=-
Adding that line to your vimrc (:e $MYVIMRC
) you'll never have to think about adding the iskeyword setting. See also :he modeline
for alternative ways to set this setting per file
Update an even purer solution would to create your own operator-mapping.
A quick draft of this, that seemed to work very nicely for me:
xnoremap <silent>. f.oT.o
xnoremap <silent>a. f.oF.o
xnoremap <silent>i. t.oT.o
onoremap <silent>. :<C-u>exec 'normal v' . v:count1 . '.'<CR>
onoremap <silent>a. :<C-u>exec 'normal v' . v:count1 . 'a.'<CR>
onoremap <silent>i. :<C-u>exec 'normal v' . v:count1 . 'i.'<CR>
Examples for the following buffer contents (cursor on the letter w
):
someobject.some-property-with-hyphens.SUB.otherproperty
some-property-with-hyphens.
in visual mode.some-property-with-hyphens.
in visual modesome-property-with-hyphens
in visual modeMotions can be chained and accept a count
:
some-property-with-hyphens.SUB.
in visual modesome-property-with-hyphens.SUB.
in visual mode.some-property-with-hyphens.SUB.
in visual modesome-property-with-hyphens.SUB
in visual modeYou can use the operators as operators to any editing command:
someobject.SUB.otherproperty
someobject.shortname.SUB.otherproperty
someobject.get("otherproperty
It doesn't matter where in a 'dot-delimited-identifier' the cursor is to start with. Note that for convenience, all visual mode mappings position the cursor at the end of the selection (so you can do continue extending the selection by e.g. %
and other motions).
Upvotes: 19
Reputation: 20724
I'm not absolutely sure (I learn new vim features everyday) but I think you can't select between dots with text-objects. So, if it's a common case for you maybe you can create a mapping like the following:
nnoremap <leader>d t.vT.
Just to avoid typing five characters each time you need to select between dots.
Upvotes: 1
Reputation: 170
You might want to try this although it's not a proper answer:
put you cursor on s (after dot) and type: (which means visual until dot).
vf.
I believe the reason that you can't use vi. is dot is not something that vim could find its another pair like ( or ' ".
Upvotes: 0
Reputation: 650
I dont know any generic solutions. For select/delete/insert I use regular experssions.
:%s/\.some-property-with-hyphens\./.i-like-this-property./g
To just select
/\.some-property-with-hypehns\.
A more generic rule
/\.[\-a-zA-Z0-9]*\.
Hope this is what you are asking.
Upvotes: 0
Reputation: 1646
Maybe this is not what you're looking for, but I used the standard search functionality and typed in
/\..*\.and it selected the .some-property-with-hyphens. value in your example above.
Upvotes: 1