I use the following.
1) I agree with @FerranBrosaPlannella that it is a good idea to use prefixes for categories. I also think that the prefix should be separated from the name and : is kind of standard for this. I don't think that categories like Theorem, Proposition, Lemma, Observation,… should have distinct prefixes. They mean essentially the same and I sometimes change my mind whether something should be Proposition or Lemma, so I use thm: prefix for all of them. Similarly I use def: prefix for Definition, Notation, Convention, …
2) I also like when the word are separated and I use _ for this. I sometimes use - in labels for something else. E.g. there is something called “I-space”, and if there was a theorem about decomposition of I-spaces, I would label it thm:I-space_decomposition.
3) I use nested labeling for example when I have a theorem about equivalence between several conditions. The theorem has its label and also the conditions have labels, so they can be referenced individually from outside, but also locally in the proof. I separate the nested parts of the label by ., so such label may look like thm:some_equivalence.condition_1. Such labels are long, which is impractical when used locally, so I define a set of macros to work with these local labels. An example of usage follows.
\begin{theorem} \labelblock{thm:main}
The following are equivatent.
\begin{enumerate}
\item First condition. \loclabel{first}
\item Conjunction of the following: \loclabelblock{second}
\begin{enumerate}
\item First part. \loclabel{part_one}
\item Second part. \loclabel{part_two}
\end{enumerate}
\end{enumerate}
\begin{proof}
We can refer to item \locref{first} or subitem \locref{second.part_one}. To prove \locequiv{first}{second} we start with showing \locimpl{first}{second.part_one}.
\end{proof}
\end{theorem}
Now we refer to Theorem \ref{thm:main} and to and item in a theorem: Theorem \itemref{thm:main}{second.part_two}. Now we refer to the item only: \ref{thm:main.second.part_two}.
The macro \labelblock does the same thing as \label, but additionally stores the label, so \loclabel and \locref can use it. \locref{first} expands to \ref{thm:main.first}. When multiple levels of nesting are needed (which is quite rare), \loclabelblock is used – it is a combination of \loclabel and \labelblock. The \locimple and \locequiv macros are just local versions of my macros for referencing to implications and equivalences between conditions in theorems.
:over;, just make the labels mnemonic. – Johannes_B Mar 10 '16 at 09:20\refat the point where you need the reference, so no scheme is needed really. – David Carlisle Mar 10 '16 at 09:24vim-texbut it seems to offer completion of labels. Otherwise,Ctrl-X_Ctrl-Pin insert mode completes keywords. Usually:and-are not iniskeywordbut can be easily added:set iskeyword+=:. – Christian Lindig Mar 10 '16 at 13:49