In your syntax definition you are includeing the : characters as part of the function name. Sublime thinks your function name is now “:Plist:” not “Plist” which is what you are expecting. If you tried the following I think it would work based on your current syntax.
blah blah
What is :Plist:
To get around that I would use “captures” in your syntax. The following is in Plist format so you may need to convert it to match the way you are creating your syntax but this works:
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.language.4gl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>entity.name.function.4gl</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>meta.language.4gl</string>
</dict>
</dict>
<key>match</key>
<string>(:)(.+)(:)</string>
</dict>
</array>
Everything between ( and ) will be a group. I am assigning each group a different name which will tell sublime that in order for your function names to be “Defined” you need to start with a “:” followed by something and end with another “:”. But since each group has its own name, only the part between the : will be treated as the function name which will allow sublime to find the definition using your examples.
I hope that was helpful and clear.
-Nick