On Tue, 12 Feb 2013, Eric Smith wrote:

Eric Smith wrote on Sun-10-Feb 13  1:55PM
This works great for me, thanks Benjamin.

E.

Benjamin R. Haskell wrote on Thu-07-Feb 13  4:39PM
ino <expr> <CR> getline('.') =~ '\w$' ? ".\<CR>" : "\<CR>"

I am trying (and failing) to modify this so that with lines commencing with certain words like;
Dear
Geachte
Foobar
... must not have a full stop inserted.

Tried using \@<!

How should I do this?

Here's how I'd do that. For starters, I'd modify the 'fun! ... endf' version, rather than the one-liner.

fun! LazyFullStop()
  let line = getline('.')
  let firstword = matchstr(line, '\w\+')
  if line =~ '\w$' && -1 == index(['Dear','Geachte','Foobar'], firstword)
    return ".\<CR>"
  end
  return "\<CR>"
endf
ino <expr> <CR> LazyFullStop()

That's case-sensitive (which may be what you want).

If you want to allow leading spaces before the "forbidden" words, you can change:

  let firstword = matchstr(line, '\w\+')

To:

  let firstword = matchstr(line, '\%(^\s*\)\@<=\w\+')

And if you really want the one-liner:

ino <expr> <CR> getline('.') =~ '\%(^\s*\%(Dear\\|Geachte\\|Foobar\)\>.*\)\@<!\w$' ? ".\<CR>" : 
"\<CR>"

--
Best,
Ben

--
--
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 because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to