Thanks Gary, this really helps me a lot :)

On Sat, Jul 3, 2010 at 1:23 AM, Gary Johnson <garyj...@spocom.com> wrote:

> On 2010-07-03, X Heruacles wrote:
>
> > On Thu, Jul 1, 2010 at 4:42 AM, Gary Johnson <garyj...@spocom.com>
> wrote:
> >
> >     On 2010-06-30, X Heruacles wrote:
> >
> >     > On Wed, Jun 30, 2010 at 3:42 PM, Gary Johnson <garyj...@spocom.com
> >
> >     wrote:
> >     >
> >     >     On 2010-06-30, X Heruacles wrote:
> >     >     > I'm just learning lua and I use vim to navigate some lua
> projects.
> >     >     > I  use ctags to generate tags using a map:
> >     >     >
> >     >     >     map <F12>  <Esc>:!ctags -R .<CR>
> >     >     >
> >     >     > but it rarely helps. When I want to jump to some
> >     >     > function definition, it always errs. Then I checked
> >     >     > the generated tag and it seems fine. So my question is
> >     >     > just is there a better way to navigate lua
> >     >     > project?(esp. jumping to function definition?)
> >     >
> >     >     I don't know what else might be available for navigating Lua,
> but
> >     >     the ctags web page at SourceForge says that it understands Lua,
> and
> >     >     you write that the tags appear fine, so I would suggest that
> you
> >     >     find out why your Lua tags aren't working as you expect and fix
> that
> >     >     problem.  If you post a short file containing Lua code and
> explain
> >     >     what you do and what happens when you try to jump to a tag in
> that
> >     >     code, we might be able to spot the problem and give you a
> solution.
> >     >
> >     >     Regards,
> >     >     Gary
> >
> >     > thanks Gary. Then I show the code here:
> >     > the generated tag has a line looks like this:
> >     >
> >     >     TaskHandler.prizeTask .\init\taskHandler.lua /^function
> >     >     TaskHandler.prizeTask(plr, task)$/;" f
> >     >
> >     > and I have a function:
> >     >
> >     >     function Task:succeed()
> >     >
> >     >     debug_log("Task:succeed")
> >     >
> >     >     self.isSucceed = true
> >     >
> >     >     TaskHandler.prizeTask(self.owner, self)
> >     >
> >     >     self:eventOnSuccess()
> >     >
> >     >     if self.spanTimerId > 0 then self:clearSpanTimer() end
> >     >
> >     >     self.owner:addFinishedTask(self)
> >     >
> >     >     if self.entry.type == taskType.TASK_TYPE_MAIN then
> >     >
> >     >     self.owner:setSaveRecord("MainTask", self:getId(), 0)
> >     >
> >     >     else
> >     >
> >     >     end
> >     >
> >     >     if self.entry.nexttask ~= nil and self.entry.nexttask ~= 0 then
> >     >
> >     >     debug_log("self.owner:addTask")
> >     >
> >     >     self.owner:addTask(self.entry.nexttask)
> >     >
> >     >     end
> >     >
> >     >     end
> >     >
> >     >
> >     >
> >     > in the file task.lua in the subdirectory of where the tags file
> lies.
> >     > While my cursor on "prizeTask", I press Ctrl-], only to find
> >     > it shows me an error that can't find the tag: prizeTask. So
> >     > it is.
>
> [...]
>
> >     So I think that's the problem:  you need to have . in your
> >     'iskeyword' option for Lua files.
>
> > Sorry for the late reply Gary and thank you very much that it works!!!
> > But there are others that can't work, so I want to know why this helps. I
> tried
> > to read some help file about iskeyword and isfname, but it hardly did
> help. So
> > I ask you do me a favor to describe the keyword and how it works?(maybe
> this
> > won't waste too much of your time)
> > Thank you again:)
>
> I'll try.  Bear in mind that I don't know anything about Lua.
>
> Ctags knows Lua syntax, so it recognizes "TaskHandler.prizeTask" as
> a single entity for which it should create a tag.  It creates a tag
> for "TaskHandler.prizeTask" and writes it to the tags file.
>
> When you type ^], Vim looks at the character under the cursor and
> the characters next to it and tries to identify a sequence of
> characters including the one under the cursor that form a keyword,
> by Vim's definition of a keyword.  Vim then tries to find that
> keyword in its list of tags.
>
> Vim's definition of a keyword is a sequence of characters from the
> set in the 'iskeyword' option.  Vim uses this definition for a lot
> of its commands, not just those related to tags.  For example, it
> uses that definition to recognize words when executing w to move to
> the next word or diw to delete the word the cursor is on.
> Consequently, Vim's default definition of 'iskeyword' is set to
> correspond to a word as commonly used in text or a keyword as used
> in most programming languages:  a sequence of characters from the
> set of alphanumeric characters and underscore.
>
> When you move Vim's cursor to the start of the Lua identifier
> TaskHandler.prizeTask and type ^], Vim will try to find the keyword
> under the cursor, which by its normal definition is "TaskHandler".
> "TaskHandler" is not a tag, though, so the command fails.
> Similarly, Vim recognizes "prizeTask" as a keyword but it is not a
> tag, either.  You can make this work by adding . to the set of
> characters that Vim recognizes as part of a keyword, that is, by
> adding . to 'iskeyword':
>
>    :set iskeyword+=.
>
> Now Vim will recognize "TaskHandler.prizeTask" as a single keyword
> and will successfully find it in its list of tags.
>
> The problem with this solution is that Vim will now include . as
> part of a word any time it does something with a word.  For example,
> if you moved the cursor to the word "tags" at the end of the
> preceding paragraph and typed '*', Vim would search for the next
> occurrence of "tags.", including the period, not just "tags".
>
> I hope that was clear and not too much.
>
> Regards,
> Gary
>
> --
> You received this message from the "vim_use" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>

-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to