G0574's Archiver

弯月圆刀 发表于 2008-9-17 21:33

如何用vim来编写ruby代码?

我google了半天,都没有找到一篇完整的介绍文章。我真怀疑这写写文章的是否真的在用vim编辑ruby代码。:)
说实话,vim不适合大多数人,它比较适合经常写代码的人,和记事本的区别是:如果10年没有接触电脑,我还是会使用记事本,但是几个月没有使用vim,就会忘记许多的功能。还有一个区别就是你每天使用记事本,编写代码的速度还是一样,但是如果用vim你会成倍的提高编辑速度。

我希望通过这篇文章,让你知道怎样用vim来完成编写ruby的整个过程,ruby自带了一个SciTE编辑器,我想每一个学习ruby的人都会尝试过这个工具。我们输入代码,然后按F5,然后在右侧看运行结果,如果有错误就更正,然后再F5,不停的重复这样一个过程。当然还会有许多的puts语句用来检查程序逻辑。

下面就用vim来实现这个功能:
1、安装vim-ruby
通过gem
gem install vim-ruby
vim-ruby-install.rb
直接下载:
解压后执行bin/vim-ruby-install.rb

推荐直接下载,因为gem常常很慢。

2、vim-ruby会安装下面的文件:
  autoload/rubycomplete.vim -> E:/Vim/vimfiles/autoload/rubycomplete.vim ~
  compiler/eruby.vim -> E:/Vim/vimfiles/compiler/eruby.vim ~
  compiler/ruby.vim -> E:/Vim/vimfiles/compiler/ruby.vim ~
  compiler/rubyunit.vim -> E:/Vim/vimfiles/compiler/rubyunit.vim ~
  ftdetect/ruby.vim -> E:/Vim/vimfiles/ftdetect/ruby.vim ~
  ftplugin/eruby.vim -> E:/Vim/vimfiles/ftplugin/eruby.vim ~
  ftplugin/ruby.vim -> E:/Vim/vimfiles/ftplugin/ruby.vim ~
  indent/eruby.vim -> E:/Vim/vimfiles/indent/eruby.vim ~
  indent/ruby.vim -> E:/Vim/vimfiles/indent/ruby.vim ~
  syntax/eruby.vim -> E:/Vim/vimfiles/syntax/eruby.vim ~
  syntax/ruby.vim -> E:/Vim/vimfiles/syntax/ruby.vim ~


3、修改imfiles/ftplugin/ruby.vim 加入
map <F5> :!ruby % <CR>
map <F6> :make % <CR>
let $LANG= "en"
setlocal encoding=utf-8
syntax on
filetype on
filetype indent on
filetype plugin on
compiler ruby
4、修改vimfiles/indent/ruby.vim
加入:
setlocal expandtab
setlocal autowrite
setlocal tabstop=2 shiftwidth=2 softtabstop=2
setlocal autoindent


5、如何查找文件?可以在命令行输入文件的名称,在mswindows下面,也可以用快捷菜单选择用vim编辑。但是在vim命令行的输入下面的两个命令,是一个非常不错的方法。
:Explore
:find


6、在vim中每个编辑的文件都是一个buffer,但是在单个窗口的情况下,你看到的只是一个文件而已,用:buffers可以列出所有的buffer,或者用:ball显示所有的buffer,可以用Ctrl-^ (:e #)
在两个buffer之间快速切换。


7、quickfix,用来显示错误copen colder cnewer cc cn cp等等

8、现在你就可以用vim编写ruby代码,然后用:make %执行代码,注意这个make执行的结果是makeef文件,不会再前台显示,所以你的代码中的许多puts都无从知晓。
当然你可以用:!ruby %来执行,这样就会出现一个新的dos窗口,显示运行结果。就像你在SciTE一样。




9、设定一个快捷键比如 :map <F5> :!ruby % <CR>,这样按一下F5就可以了。


范围range 逗号分隔的两个数值,.表示当前行,可以用.-3,.+3表示一个范围。
vimgrep 多文件查找 **/ 整个目录及子目录
尽量用:close 而不是:q
Ctrl-x o 代码自动完成
Completion can be done for:

1. Whole lines |i_CTRL-X_CTRL-L|
2. keywords in the current file |i_CTRL-X_CTRL-N|
3. keywords in 'dictionary' |i_CTRL-X_CTRL-K|
4. keywords in 'thesaurus', thesaurus-style |i_CTRL-X_CTRL-T|
5. keywords in the current and included files |i_CTRL-X_CTRL-I|
6. tags |i_CTRL-X_CTRL-]|
7. file names |i_CTRL-X_CTRL-F|
8. definitions or macros |i_CTRL-X_CTRL-D|
9. Vim command-line |i_CTRL-X_CTRL-V|
10. User defined completion |i_CTRL-X_CTRL-U|
11. omni completion |i_CTRL-X_CTRL-O|
12. Spelling suggestions |i_CTRL-X_s|
13. keywords in 'complete' |i_CTRL-N|

All these (except 2) are done in CTRL-X mode.  This is a sub-mode of Insert
and Replace modes.  You enter CTRL-X mode by typing CTRL-X and one of the
CTRL-X commands.  You exit CTRL-X mode by typing a key that is not a valid
CTRL-X mode command.  Valid keys are the CTRL-X command itself, CTRL-N (next),
and CTRL-P (previous).

其中CTRL-x CTRL-N自动补全变量
CTRL-x CTRL-o 补全关键字

[[i] 本帖最后由 弯月圆刀 于 2008-9-19 17:12 编辑 [/i]]

弯月圆刀 发表于 2008-9-19 11:36

在unix系统上通过aap安装vim之后,记得要讲原来的vim改名一下。比如将/bin/vim 改成其他的名字。

然后再将/usr/local/share/vim/current/vimrc_example.vim复制到~/.vimrc,这样新的vim就会正常工作了。

[[i] 本帖最后由 弯月圆刀 于 2008-9-19 11:40 编辑 [/i]]

弯月圆刀 发表于 2008-9-19 11:59

在安装之后,你会看到有一个vimfiles目录,这个目录在vim主程序之外,对着里面的文件进行修改会更加安全。(不会影响主程序)。如果同时配置文件同时存在于vimfiles目录和主目录,vimfiles优先。[color=Red][size=5]比较好的做法是:你最好不要去改变vim72下面的文件,而是应该将它复制到vimfiles对应的目录下面,然后修改之。[/size][/color]

安装doc文件之后,最好运行一下helptag docdir,这个新安装的帮助文件就会起作用了。

[[i] 本帖最后由 弯月圆刀 于 2008-9-19 17:07 编辑 [/i]]

弯月圆刀 发表于 2008-9-20 19:20

[code]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
imap <S-CR> <ESC>:execute 'normal o' . EndToken()<CR>O
[/code]将上面的代码写到一个文件:ruby_extra.vim,放到vimfiles/ftplugin/下面,就会自动补全do end等等

弯月圆刀 发表于 2008-9-20 19:22

将matchit.vim从vim72/macros复制到vimfiles/plugin就能够在if end do end之间跳转。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.