On 2/16/06, Ezra Z. [email protected] wrote:
What I really need some help with is killer ruby configs for vim,
emacs and jedit. And anything else you would like to see included,
please drop me a note and any pointers you have for configuration
that would be best suited for this.
I am happy with my config:
set nobackup
set nocompatible
set backspace=indent,eol,start
set history=50 " keep 50 lines of command line history
set ruler " show the cursor position all the time
set showcmd " display incomplete commands
set incsearch " do incremental searching
map Q gq
set autoindent " always set autoindenting on
set shiftwidth=2
set tabstop=2
set expandtab
set tw=80
set nohlsearch
map :se invhlsearch
filetype on
filetype indent on
filetype plugin on
syntax on
if !exists( "EndToken" )
function EndToken()
let current_line = getline( ‘.’ )
let braces_at_end = '{\s(|(,|\s|\w)|\s)?$’
if match( current_line, braces_at_end ) >= 0
return ‘}’
else
return ‘end’
endif
endfunction
endif
noremap :set invpaste paste?
imap
set pastetoggle=
map :!ruby %
map :!rake
map :!ri
imap :execute ‘normal o’ . EndToken()O
imap def test_
“{{{ Ruby block delimiter conversion: do end <=> { }
“Copyright (c) 2005 Mauricio F.
“Subject to same licensing terms as Ruby.
" requires matchit and friends
" since it uses the % and = bindings
function! s:String_Strip(str)
let s = substitute(a:str, ‘\v^\s*’, ‘’, ‘’)
return substitute(s, ‘\v\s*$’, ‘’, ‘’)
endfunction
function! s:RubyBlockBraceToDoEnd(lineno)
" { } => do end
let oldz = getreg(“z”)
call setreg(“z”, “”)
execute ‘normal ^f{%l"zd$’
let suffix = s:String_Strip(getreg(“z”))
call setreg(“z”, oldz)
let orig = getline(”.”)
let repl = substitute(orig, ‘\v\s*{\s*(|[^|]|)?.’, ’ do \1’, ‘’)
call setline(”.", repl)
let nextline = substitute(orig, ‘\v[^{]\v\s{\s*(|[^|]|)?', ‘’,
‘’)
let nextline = substitute(nextline, '}[^}]$’, ‘’, ‘’)
let numlines = 0
" uncomment one of the following:
" (1) just insert the body without splitting the lines on ;
"call append(a:lineno, nextline)
"call append(a:lineno+1, ‘end’ . suffix)
"
" (2) try to split on ; …
call append(a:lineno, ‘end’ . suffix)
" this is what we would want to do:
"let nextline = substitute(nextline, ‘;’, “\n”, ‘g’)
while stridx(nextline, “;”) != -1
let eom = stridx(nextline, “;”)
let line = s:String_Strip(strpart(nextline, 0, eom))
call append(a:lineno + numlines, line)
let numlines = numlines + 1
let nextline = strpart(nextline, eom+1, strlen(nextline) - eom -
1)
endwhile
let nextline = s:String_Strip(nextline)
if strlen(nextline) > 0
call append(a:lineno + numlines, nextline)
let numlines = numlines + 1
endif
" this is what it all began with…
"execute 'normal :s/\v\s*{\s*(|.*|)?/ do \1\r/
’
"execute ‘normal g_cw
en
rmal V’ . (1 + numlines) . ‘j=’
"echo “{ } => do end”
endfunction
function! s:RubyBlockDoEndToBrace(_firstline, _lastline)
" do end => { }
let linenum = a:_firstline + 1
let orig = getline(“.”)
while linenum < a:_lastline - 1
let addline = getline(linenum)
if ‘\v^\s*$’ !~ addline
let addline = substitute(addline, ‘\v^\s*’, ‘’, ‘’)
let addline = substitute(addline, ‘\s*$’, '; ', ‘’)
let orig = orig . addline
endif
let linenum = linenum + 1
endwhile
let l = substitute(getline(a:_lastline-1), ‘\v^\s*’, ‘’, ‘’)
let l = substitute(l, ‘\s*$’, ‘’, ‘’)
let orig = orig . l
let l = substitute(getline(a:_lastline), ‘\v^\send(.|\s|$)@=‘, ’
}’, ‘’)
let l = substitute(l, '\s$’, ‘’, ‘’)
let orig = orig . l
"echo orig
"input(orig)
let repl = substitute(orig, ‘\v\sdo\s(|[^|]*|)?’, '{\1 ', ‘’)
"execute ‘normal d’ . (a:_lastline - a:_firstline) . ‘j’
execute ‘:’ . a:_firstline . ‘,’ . a:_lastline . ‘d’
call append(a:_firstline - 1, repl)
execute ‘:’ . a:_firstline
"echo “do end => { }”
endfunction
map xx xx
let s:sid = maparg(“xx”)
unmap xx
let s:sid = substitute(s:sid, ‘xx’, ‘’, ‘’)
function! RubyBlockSwitchDelimiters() range
set nofoldenable
if a:firstline == a:lastline
let braceidx = match(getline(“.”), ‘{’)
let doidx = match(getline(“.”), ‘<do>’)
if braceidx != -1 && (doidx == -1 || braceidx < doidx)
call s:RubyBlockBraceToDoEnd(a:firstline)
elseif doidx != -1
execute ‘normal /<do>’ . “\n” . 'V%:call ’ .
\ s:sid . ‘RubyBlockSwitchDelimiters()’ . “\n”
else
echo “No block found”
end
else
call s:RubyBlockDoEndToBrace(a:firstline, a:lastline)
endif
"execute ‘normal V2k=’
"execute ‘normal v5j’
endfunction
command! -range B ,call RubyBlockSwitchDelimiters()
vmap B :call RubyBlockSwitchDelimiters()