Loading ...
Sorry, an error occurred while loading the content.

RFE: 'wordpat' option

Expand Messages
  • Benji Fisher
    Vim Dev gurus: The mailing list has been slow enough that several of us worried it might be broken (or have unsubscribed us) so maybe this is a good time to
    Message 1 of 1 , Oct 28, 2006
    • 0 Attachment
      Vim Dev gurus:

      The mailing list has been slow enough that several of us worried it
      might be broken (or have unsubscribed us) so maybe this is a good time
      to post a request for a new feature. I already raised this on the vim
      users' list, but maybe starting a new thread will get more attention.

      The motions w, b, e, and others depend on the definition of a word.
      So do the text-object iw and insert-mode completion and <C-]> and
      probably a lot of other things.

      Currently, a word (:help word) consists of a sequence of keyword
      characters (as specified by 'iskeyword'), separated by non-keyword
      characters (or start of line or end of line). In other words, a word is
      specified by the regular expression /\k\@<!\k\+/ .

      I think this definition is too restrictive. I would like to have
      an option, perhaps 'wordpat', that specifies what is considered a
      keyword. The default would be '\k\@<!\k\+' .

      Here are some examples where I am not satisfied with being able to
      change 'iskeyword'. but being able to set 'wordpat' would make me happy.

      Plain text:

      Today (not every day) I want to treat words-with-hyphens as single
      words, so I try

      :setl isk+=-

      The problem--depending on my style manual--is that em-dashes are treated
      as parts of words. This is the problem that came up recently on the vim
      users' list. Given a 'wordpat' option, I could solve this with

      :let &l:wordpat = '\(\k\|-\)\@<!\k\+\(-\k\+\)*'

      For other uses, you might want to do something similar with '_' or '\.'
      instead of '-' .

      (La)TeX:

      Personally, I am in the habit of including optional spaces:

      $$ \alpha \beta \gamma = \alpha + \beta + \gamma . $$

      I do this for readability and also so that word motions are more
      convenient. Many others prefer to omit the optional spaces:

      $$ \alpha\beta\gamma = \alpha+\beta+\gamma . $$

      I like to do

      :setl isk+=\

      so that "\alpha" is considered a single word, but I normally do not want
      to consider "\alpha\beta\gamma" as a single word. (I almost wrote that
      "no one" ever wants this, and I almost accused those who prefer to omit
      the optional spaces of laziness, but then I remembered
      :help design-flexible .) With my new proposal,

      :setl isk-=\
      :let &l:wordpat = '\\\=\k\@<!\k\+'

      would work well with either style.

      Java:

      In this and other languages, someVariablesHaveLongCamelCaseNames
      and users sometimes want their word motions to go up to the next capital
      letter. Details left to the reader.

      C:

      In other languages, a more common style is the
      long_var_name_with_underscores . Again, I leave the details to your
      imagination.

      --Benji Fisher
    Your message has been successfully submitted and would be delivered to recipients shortly.