--- Max Dyckhoff <[EMAIL PROTECTED]> wrote: > > --- David Thompson [mailto:[EMAIL PROTECTED] wrote: > > Does vim support a special type of 'iskeyword' setting for > > Ctrl-] searching for tags? > > > > Here is my problem: after adding filenames to my tags file, > > I now want to use the convenience of Ctrl-] to jump to files > > as well as identifiers. > > > > For example, positioning the cursor on defines.h and pressing > > Ctrl-], from inside a line like this, > > > > #include "defines.h" > > > > I get an error, > > > > E426: tag not found: defines > > > > But Ctrl-] finds the tag if I do this, > > > > set iskeyword+=. > > > > I presume Ctrl-] is searching for the keyword under the cursor, > > so the .h portion is not seen unless I add . to iskeyword. > > > > But adding . to iskeyword makes Ctrl-] work incorrectly on > > identifiers in other cases, such as, > > > > bufmgr.refcnt > > > > using Ctrl-] on bufmgr causes vim to search for bufmgr.refcnt, > > which is obviously not correct. > > > > How do I solve this apparent discrepancy? > > > > Regards, > > > > David > > You could just use 'gf' to open the file under the cursor, assuming that it > lies in > your path. ^wgf will open it in a new split, just like ^w^] does for tags. > > If that isn't an acceptable solution, I don't have any other suggestions.
Well, I did solve the problem with a rather ugly function that sets & resets iskeyword for one tag lookup. But I was hoping vim might have a better way to use iskeyword in a contextual manner specific just for tags. Here is my solution: I still use normal Ctrl-] for identifiers, but now use Ctrl-\ to tag on a filename. It works pretty well, especially since the ] and \ keys are next to each other on my QWERTY keyboard. In my ~/.vimrc, I added, " map Ctrl-\ to do Ctrl-] on filenames nnoremap <silent> <C-\> :call TagFilename()<CR> function! TagFilename() let old_iskeyword = &iskeyword setlocal iskeyword+=\.,/ let fname = expand('<cword>') let &l:iskeyword = old_iskeyword let v:errmsg = "" silent! execute ":tag ".fname if v:errmsg != "" echohl ErrorMsg echo v:errmsg echohl None endif endfunc Regards, David __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com