summaryrefslogtreecommitdiff
path: root/ftplugin/ruby.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin/ruby.vim')
-rw-r--r--ftplugin/ruby.vim62
1 files changed, 62 insertions, 0 deletions
diff --git a/ftplugin/ruby.vim b/ftplugin/ruby.vim
new file mode 100644
index 0000000..78673b7
--- /dev/null
+++ b/ftplugin/ruby.vim
@@ -0,0 +1,62 @@
+function! AddParameter()
+ let name = input("parameter name: ")
+ let cursor_position = getpos(".")
+
+ if empty(matchstr(getline("."), '\<def\>'))
+ exec "?\\<def\\>"
+ endif
+
+ let closing_bracket_index = stridx(getline("."), "(")
+ if closing_bracket_index == -1
+ execute "normal A()\<Esc>"
+ endif
+ exec ':s/)/, ' . name . ')/'
+ exec ':silent! %s/(, /(/'
+
+ call setpos(".", cursor_position)
+endfunction
+
+function! InlineTemp()
+ let cursor_position = getpos(".")
+ normal "ayiw
+ normal $"byiW
+ normal dd
+ exec ":.,/end/ s/\\<" . @a . "\\>/" . @b . "/gI"
+ call setpos(".", cursor_position)
+endfunction
+
+function! ExtractLet()
+ let cursor_position = getpos(".")
+ normal 0
+ normal! dd
+ exec "?^\\s*\\<\\(describe\\|context\\|let\\)\\>"
+ normal! $p
+ exec 's/\v([a-z_][a-zA-Z0-9_]*) \= (.+)/let(:\1) { \2 }'
+ normal V=
+ call setpos(".", cursor_position)
+ normal jw
+endfunction
+
+function! RenameVariable()
+ let cursor_position = getpos(".")
+ let name = input("new name: ")
+ normal "ayiw
+ exec ":.,/end/ s/\\<" . @a . "\\>/" . name . "/gI"
+ call setpos(".", cursor_position)
+endfunction
+
+command! RAddParameter call AddParameter()
+command! RInlineTemp call InlineTemp()
+command! RExtractLet call ExtractLet()
+command! RRenameVariable call RenameVariable()
+
+" run rspec test
+nnoremap <leader>run :!rspec %<cr>
+nnoremap <leader>t :VroomRunNearestTest<cr>
+nnoremap <leader>ta :VroomRunTestFile<cr>
+
+" ruby refactorings
+nnoremap <leader>rap :RAddParameter<cr>
+nnoremap <leader>rit :RInlineTemp<cr>
+nnoremap <leader>rel :RExtractLet<cr>
+nnoremap <leader>rrlv :RRenameVariable<cr>