aboutsummaryrefslogtreecommitdiff
path: root/files/.vim/doc/rails.txt
diff options
context:
space:
mode:
Diffstat (limited to 'files/.vim/doc/rails.txt')
-rwxr-xr-xfiles/.vim/doc/rails.txt1131
1 files changed, 1131 insertions, 0 deletions
diff --git a/files/.vim/doc/rails.txt b/files/.vim/doc/rails.txt
new file mode 100755
index 0000000..2390100
--- /dev/null
+++ b/files/.vim/doc/rails.txt
@@ -0,0 +1,1131 @@
+*rails.txt* Plugin for working with Ruby on Rails applications
+
+Author: Tim Pope <vimNOSPAM@tpope.info> |rails-plugin-author|
+
+|rails-introduction| Introduction and Feature Summary
+|rails-installation| Installation and Usage
+|rails-install-vim| Installing and Configuring Vim
+|rails-install-plugin| Installing and Using the Plugin
+|rails-commands| General Commands
+|rails-navigation| Navigation
+|rails-gf| File Under Cursor - gf
+|rails-alternate-related| Alternate and Related Files
+|rails-model-navigation| Model Navigation Commands
+|rails-controller-navigation| Controller Navigation Commands
+|rails-misc-navigation| Miscellaneous Navigation Commands
+|rails-custom-navigation| Custom Navigation Commands
+|rails-scripts| Script Wrappers
+|rails-refactoring| Refactoring Helpers
+|rails-partials| Partial Extraction
+|rails-migrations| Migration Inversion
+|rails-integration| Integration
+|rails-vim-integration| Integration with the Vim Universe
+|rails-rails-integration| Integration with the Rails Universe
+|rails-abbreviations| Abbreviations
+|rails-syntax| Syntax Highlighting
+|rails-options| Managed Vim Options
+|rails-configuration| Configuration
+|rails-global-settings| Global Settings
+|rails-about| About rails.vim
+|rails-license| License
+
+This plugin is only available if 'compatible' is not set.
+
+{Vi does not have any of this}
+
+==============================================================================
+INTRODUCTION *rails-introduction* *rails*
+
+TextMate may be the latest craze for developing Ruby on Rails applications,
+but Vim is forever. This plugin offers the following features for Ruby on
+Rails application development.
+
+1. Automatically detects buffers containing files from Rails applications,
+ and applies settings to those buffers (and only those buffers). You can
+ use an autocommand to apply your own custom settings as well.
+ |rails-configuration|
+
+2. Unintrusive. Only files in a Rails application should be affected; regular
+ Ruby scripts are left untouched. Even when enabled, the plugin should keep
+ out of your way if you're not using its features. (If you find a situation
+ where this is not a case, contact the |rails-plugin-author|.)
+
+3. Provides reasonable settings for working with Rails applications. Rake is
+ the 'makeprg' (and it always knows where your Rakefile is), 'shiftwidth'
+ is 2, and 'path' includes an appropriate collection of directories from
+ your application. |rails-options|
+
+4. Easy navigation of the Rails directory structure. |gf| considers context
+ and knows about partials, fixtures, and much more. There are two commands,
+ :A (alternate) and :R (related) for easy jumping between files, including
+ favorites like model to migration, template to helper, and controller to
+ functional test. For more advanced usage, :Rmodel, :Rview, :Rcontroller,
+ and several other commands are provided. |rails-navigation|
+
+5. Enhanced syntax highlighting. From has_and_belongs_to_many to
+ distance_of_time_in_words, it's here. For Vim 7 users, 'completefunc' is
+ set to enable syntax based completion on |i_CTRL-X_CTRL-U|, making it easy
+ to complete such long method names. |rails-syntax|
+
+6. Interface to script/*. Generally, use ":Rscript about" to call
+ "script/about". Most commands have wrappers with additional features:
+ ":Rgenerate controller Blog" generates a blog controller and edits
+ app/controllers/blog_controller.rb. |rails-scripts|
+
+7. Partial extraction and migration inversion. |:Rextract| {file} replaces
+ the desired range (ideally selected in visual line mode) with "render
+ :partial => '{file}'", which is automatically created with your content.
+ The @{file} instance variable is replaced with the {file} local variable.
+ |:Rinvert| takes a self.up migration and writes a self.down.
+ |rails-refactoring|
+
+8. Integration with other plugins. |:Rproject| creates a new project.vim
+ project. |:Rdbext| loads database settings from database.yml for dbext.vim
+ (and this happens by default under most circumstances). Cream users get
+ some additional mappings, and all GUI users get a menu. |rails-integration|
+
+==============================================================================
+INSTALLATION AND USAGE *rails-installation*
+
+If you are familiar Vim and have the latest version installed, you may skip
+directly to |rails-install-plugin| below.
+
+Installing and Configuring Vim ~
+ *rails-install-vim*
+Because it is common for users to utilize an older version of Vim that came
+installed on a system, rails.vim has a design goal of remaining compatible
+with versions of Vim 6.2 and newer. However, if you have a choice in the
+matter, you are strongly encouraged to install the latest version available.
+Older versions of Vim should work, but increasingly, new plugin features will
+require Vim 7 or newer. If possible, install a version of Vim with the |Ruby|
+interface compiled in, as a few features will make use of it when available.
+
+If you are new to Vim, you need to create a vimrc. For Windows, this file
+goes in ~\_vimrc (try :e ~\_vimrc if you don't know where this is). On other
+platforms, use ~/.vimrc. A very minimal example file is shown below.
+>
+ set nocompatible
+ syntax on
+ filetype plugin indent on
+>
+Installing and Using the Plugin ~
+ *rails-install-plugin*
+If you have the zip file, extract it to vimfiles (Windows) or ~/.vim
+(everything else). You should have the following files: >
+ plugin/rails.vim
+ doc/rails.txt
+See |add-local-help| for instructions on enabling the documentation. In a
+nutshell: >
+ :helptags ~/.vim/doc
+
+Whenever you edit a file in a Rails application, this plugin will be
+automatically activated. This sets various options and defines a few
+buffer-specific commands.
+
+If you are in a hurry to get started, with a minimal amount of reading, you
+are encouraged to at least skim through the headings and command names in this
+file, to get a better idea of what is offered. If you only read one thing,
+make sure it is the navigation section: |rails-navigation|.
+
+==============================================================================
+GENERAL COMMANDS *rails-commands*
+
+All commands are buffer local, unless otherwise stated. This means you must
+actually edit a file from a Rails application.
+
+ *rails-:Rails*
+:Rails {directory} The only global command. Creates a new Rails
+ application in {directory}, and loads the README.
+
+ *rails-:Rake*
+:Rake {targets} Like calling |:make| {targets} (with 'makeprg' being
+ rake). However, in some contexts, if {targets} are
+ omitted, :Rake defaults to something sensible (like
+ db:migrate in a migration, or your current test).
+
+ *rails-:Rake!*
+:Rake! {targets} Called with a bang, :Rake will use an alternate
+ 'errorformat' which attempts to parse the full stack
+ backtrace.
+
+ *rails-:Rcd*
+:Rcd [{directory}] |:cd| to /path/to/railsapp/{directory}.
+
+ *rails-:Rlcd*
+:Rlcd [{directory}] |:lcd| to /path/to/railsapp/{directory}.
+
+ *rails-:Rdoc*
+:Rdoc Browse to the Rails API, either in doc/api in the
+ current Rails application, gem_server if it is
+ running, or http://api.rubyonrails.org/ . Requires
+ :OpenURL to be defined (see |rails-:OpenURL|).
+
+ *rails-:Rdoc!*
+:Rdoc! Make the appropriate |:helptags| call and invoke
+ |:help| rails.
+
+ *rails-:Redit*
+:Redit {file} Edit {file}, relative to the application root.
+
+ *rails-:Rlog*
+:Rlog [{logfile}] Split window and open {logfile} ($RAILS_ENV or
+ development by default). The control characters used
+ for highlighting are removed. If you have a :Tail
+ command (provided by |tailminusf|.vim), that is used;
+ otherwise, the file does NOT reload upon change.
+ Use |:checktime| to tell Vim to check for changes.
+ |G| has been mapped to do just that prior to jumping
+ to the end of the file, and q is mapped to close the
+ window. If the delay in loading is too long, you
+ might like :Rake log:clear.
+
+ *rails-:Rpreview*
+:Rpreview [{path}] Creates a URL from http://localhost:3000/ and the
+ {path} given. If {path} is omitted, a sensible
+ default is used (considers the current
+ controller/template, but does not take routing into
+ account). The not too useful default is to then edit
+ this URL using Vim itself, allowing |netrw| to
+ download it. More useful is to define a :OpenURL
+ command, which will be used instead (see
+ |rails-:OpenURL|).
+
+ *rails-:Rpreview!*
+:Rpreview! [{path}] As with :Rpreview, except :OpenURL is never used.
+
+ *rails-:Rtags*
+:Rtags Calls ctags -R on the current application root.
+ Exuberant ctags must be installed.
+
+ *rails-:Rrefresh*
+:Rrefresh Refreshes certain cached settings. Most noticeably,
+ this clears the cached list of classes that are syntax
+ highlighted as railsUserClass.
+
+ *rails-:Rrefresh!*
+:Rrefresh! As above, and also reloads rails.vim.
+
+ *rails-:OpenURL*
+:OpenURL {url} This is not a command provided by the plugin, but
+ rather provided by user and utilized by other plugin
+ features. This command should be defined to open the
+ provided {url} in a web browser. An example command
+ on a Mac might be: >
+ :command -bar -nargs=1 OpenURL :!open <args>
+< The following appears to work on Windows: >
+ :command -bar -nargs=1 OpenURL :!start cmd /cstart /b <args>
+< On Debian compatible distributions, the following is
+ the preferred method: >
+ :command -bar -nargs=1 OpenURL :!sensible-browser <args>
+< If has("mac_gui"), has("win32_gui"), or
+ executable("sensible-browser") is true, the
+ corresponding command above will be automatically
+ defined. Otherwise, you must provide your own (which
+ is recommended, regardless).
+
+==============================================================================
+NAVIGATION *rails-navigation*
+
+Navigation is where the real power of this plugin lies. Efficient use of the
+following features will greatly ease navigating the Rails file structure.
+
+The 'path' has been modified to include all the best places to be.
+>
+ :find blog_controller
+ :find book_test
+<
+ *rails-:Rfind*
+:Rfind [{file}] Find {file}. Very similar to :find, but things like
+ BlogController are properly handled, and if
+ genutils.vim is installed (1.x not 2.x), tab complete
+ works. The default filename is taken from under the
+ cursor in a manner quite similar to gf, described
+ below.
+
+File Under Cursor - gf ~
+ *rails-gf*
+The |gf| command, which normally edits the current file under the cursor, has
+been remapped to take context into account. |CTRL-W_f|(open in new window) and
+|CTRL-W_gf| (open in new tab) are also remapped.
+
+Example uses of |gf|, and where they might lead.
+(* indicates cursor position)
+>
+ Pos*t.find(:first)
+< app/models/post.rb ~
+>
+ has_many :c*omments
+< app/models/comment.rb ~
+>
+ link_to "Home", :controller => :bl*og
+< app/controllers/blog_controller.rb ~
+>
+ <%= render :partial => 'sh*ared/sidebar' %>
+< app/views/shared/_sidebar.rhtml ~
+>
+ <%= stylesheet_link_tag :scaf*fold %>
+< public/stylesheets/scaffold.css ~
+>
+ class BlogController < Applica*tionController
+< app/controllers/application.rb ~
+>
+ class ApplicationController < ActionCont*roller::Base
+< .../action_controller/base.rb ~
+>
+ fixtures :pos*ts
+< test/fixtures/posts.yml ~
+>
+ layout :pri*nt
+< app/views/layouts/print.rhtml ~
+>
+ <%= link_to "New", new_comme*nt_path %>
+< app/controllers/comments_controller.rb (jumps to def new) ~
+
+In the last example, the controller and action for the named route are
+determined by evaluating routes.rb as Ruby and doing some introspection. This
+means code from the application is executed. Keep this in mind when
+navigating unfamiliar applications.
+
+Alternate and Related Files ~
+ *rails-alternate-related*
+Two commands, :A and :R, are used quickly jump to an "alternate" and a
+"related" file, defined below.
+
+ *rails-:A* *rails-:AE* *rails-:AS* *rails-:AV* *rails-:AT*
+:A These commands were picked to mimic Michael Sharpe's
+:AE a.vim. Briefly, they edit the "alternate" file, in
+:AS either the same window (:A and :AE), a new split
+:AV window (:AS), a new vertically split window (:AV), or
+:AT a new tab (:AT). A mapping for :A is [f .
+
+ *rails-:R* *rails-:RE* *rails-:RS* *rails-:RV* *rails-:RT*
+:R These are similar |rails-:A| and friends above, only
+:RE they jump to the "related" file rather than the
+:RS "alternate." A mapping for :R is ]f .
+:RV
+:RT
+
+ *rails-alternate* *rails-related*
+The alternate file is most frequently the test file, though there are
+exceptions. The related file varies, and is sometimes dependent on current
+current location in the file. For example, when editing a controller, the
+related file is template for the method currently being edited.
+
+The easiest way to learn these commands is to experiment. A few examples of
+alternate and related files follow:
+
+Current file Alternate file Related file ~
+model unit test related migration
+controller (in method) functional test template (view)
+template (view) helper controller (jump to method)
+migration previous migration next migration
+config/routes.rb config/database.yml config/environment.rb
+
+Suggestions for further contexts to consider for the alternate file, related
+file, and file under the cursor are welcome. They are subtly tweaked from
+release to release.
+
+For the less common cases, a more deliberate set of commands are provided.
+Each of the following takes an optional argument (with tab completion) but
+defaults to a reasonable guess that follows Rails conventions. For example,
+when editing app/models/employee.rb, :Rcontroller will default to
+app/controllers/employees_controller.rb. The controller and model options,
+ideally set from |rails-modelines|, can override the mapping from model
+related files to controller related files (Rset controller=hiring) and vice
+versa (Rset model=employee). See |rails-:Rset|.
+
+Each of the following commands has variants for splitting, vertical splitting
+and opening in a new tab. For :Rmodel, those variants would be :RSmodel,
+:RVmodel, and :RTmodel. There is also :REmodel which is a synonym for :Rmodel
+(future versions might allow customization of the behavior of :Rmodel).
+
+
+Model Navigation Commands ~
+ *rails-model-navigation*
+The default for model navigation commands is the current model, if it can be
+determined. For example, test/unit/post_test.rb would have a current model
+of post. Otherwise, if a controller name can be determined, said controller
+name will be singularized and used. To override this, use a command or
+modeline like: >
+ Rset model=comment
+
+:Rmodel |rails-:Rmodel|
+:Rmigration |rails-:Rmigration|
+:Robserver |rails-:Robserver|
+:Rfixtures |rails-:Rfixtures|
+:Runittest |rails-:Runittest|
+
+ *rails-:Rmodel*
+:Rmodel [{name}] Edit the specified model.
+
+ *rails-:Rmigration*
+:Rmigration [{pattern}] If {pattern} is a number, find the migration for that
+ particular set of digits, zero-padding if necessary.
+ Otherwise, find the newest migration containing the
+ given pattern. The pattern defaults to the current
+ model name, pluralized. So when editing the Post
+ model, :Rmigration with no arguments might find
+ create_posts.rb, or add_date_to_posts.rb.
+
+ *rails-:Robserver*
+:Robserver [{name}] Find the observer with a name like
+ {model}_observer.rb. When in an observer, most
+ commands (like :Rmodel) will seek based on the
+ observed model ({model}) and not the actual observer
+ ({model}_observer). However, for the command
+ :Runittest, a file of the form
+ {model}_observer_test.rb will be found.
+
+ *rails-:Rfixtures*
+:Rfixtures [{name}] Edit the fixtures for the given model. If an argument
+ is given, it must be pluralized, like the final
+ filename (this may change in the future). If omitted,
+ the current model is pluralized automatically. An
+ optional extension can be given, to distinguish
+ between YAML and CSV fixtures.
+
+ *rails-:Runittest*
+:Runittest [{name}] Edit the unit test for the specified model.
+
+Controller Navigation Commands ~
+ *rails-controller-navigation*
+The default for controller navigation commands is the current controller, if
+it can be determined. For example, test/functional/blog_test.rb would have a
+current controller of blog. Otherwise, if a model name can be determined,
+said model name will be pluralized and used. To override this, use a command
+or modeline like: >
+ Rset controller=blog
+
+:Rcontroller |rails-:Rcontroller|
+:Rhelper |rails-:Rhelper|
+:Rview |rails-:Rview|
+:Rlayout |rails-:Rlayout|
+:Rfunctionaltest |rails-:Rfunctionaltest|
+
+ *rails-:Rcontroller*
+:Rcontroller [{name}] Edit the specified controller.
+
+ *rails-:Rhelper*
+:Rhelper [{name}] Edit the helper for the specified controller.
+
+ *rails-:Rview*
+:Rview [[{controller}/]{view}]
+ Edit the specified view. The controller will default
+ sensibly, and the view name can be omitted when
+ editing a method of a controller. If a view name is
+ given with an extension, a new file will be created.
+ This is a quick way to create a new view.
+
+ *rails-:Rlayout*
+:Rlayout [{name}] Edit the specified layout. Defaults to the layout for
+ the current controller, or the application layout if
+ that cannot be found. A new layout will be created if
+ an extension is given.
+
+ *rails-:Rapi*
+:Rapi [{name}] Edit the API for the specified controller. This
+ command is deprecated; add it yourself with
+ |:Rcommand| if you still desire it.
+
+ *rails-:Rfunctionaltest*
+:Rfunctionaltest [{name}]
+ Edit the functional test for the specified controller.
+
+Miscellaneous Navigation Commands ~
+ *rails-misc-navigation*
+
+The following commands are not clearly associated with models or controllers.
+
+:Rstylesheet |rails-:Rstylesheet|
+:Rjavascript |rails-:Rjavascript|
+:Rplugin |rails-:Rplugin|
+:Rlib |rails-:Rlib|
+:Rtask |rails-:Rtask|
+:Rintegrationtest |rails-:Rintegrationtest|
+
+ *rails-:Rstylesheet*
+:Rstylesheet [{name}] Edit the stylesheet for the specified name, defaulting
+ to the current controller's name.
+
+ *rails-:Rjavascript*
+:Rjavascript [{name}] Edit the javascript for the specified name, defaulting
+ to the current controller's name.
+
+ *rails-:Rplugin*
+:Rplugin {plugin}[/{path}]
+ Edits a file within a plugin. If the path to the file
+ is omitted, it defaults to init.rb.
+
+ *rails-:Rlib*
+:Rlib {name} Edit the library from the lib directory for the
+ specified name. If the current file is part of a
+ plugin, the libraries from that plugin can be
+ specified as well.
+
+ *rails-:Rtask*
+:Rtask [{name}] Edit the .rake file from lib/tasks for the specified
+ name. If the current file is part of a plugin, the
+ tasks for that plugin can be specified as well. If no
+ argument is given, either the current plugin's
+ Rakefile or the application Rakefile will be edited.
+
+ *rails-:Rintegrationtest*
+:Rintegrationtest [{name}]
+ Edit the integration test specified. The default
+ is based on the current controller or model, with no
+ singularization or pluralization done.
+
+Custom Navigation Commands ~
+ *rails-custom-navigation*
+
+It is also possible to create custom navigation commands. This is best done
+in an initialization routine of some sort (e.g., an autocommand); see
+|rails-configuration| for details.
+
+ *rails-:Rcommand*
+:Rcommand [options] {name} [{path} ...]
+ Create a navigation command with the supplied
+ name, looking in the supplied paths, using the
+ supplied options. The -suffix option specifies what
+ suffix to filter on, and strip from the filename, and
+ defaults to -suffix=.rb . The -glob option specifies
+ a file glob to use to find files, _excluding_ the
+ suffix. Useful values include -glob=* and -glob=**/*.
+ The -default option specifies a default argument (not
+ a full path). If it is specified as -default=model(),
+ -default=controller(), or -default=both(), the current
+ model, controller, or both (as with :Rintegrationtest)
+ is used as a default.
+
+:Rcommand is still under development and far from fully documented, but the
+following examples should illustrate the basics:
+>
+ Rcommand api app/apis -glob=**/* -suffix=_api.rb
+ Rcommand config config -glob=*.* -suffix= -default=routes.rb
+ Rcommand environment config/environments -default=../environment
+ Rcommand concern app/concerns -glob=**/*
+
+Finally, one Vim feature that proves helpful in conjunction with all of the
+above is |CTRL-^|. This keystroke edits the previous file, and is helpful to
+back out of any of the above commands.
+
+==============================================================================
+SCRIPT WRAPPERS *rails-scripts*
+
+The following commands are wrappers around the scripts in the script directory
+of the Rails application. Most have extra features beyond calling the script.
+A limited amount of completion with <Tab> is supported.
+
+ *rails-:Rscript*
+:Rscript {script} {options}
+ Call ruby script/{script} {options}.
+
+ *rails-:Rconsole*
+:Rconsole {options} Start script/console. On Windows it will be launched
+ in the background with |!start|. In the terminal
+ version GNU Screen is used if it is running and
+ |g:rails_gnu_screen| is set.
+
+ *rails-:Rrunner*
+:[range]Rrunner {code} Executes {code} with script/runner. Differs from
+ :Rscript runner {code} in that the code is passed as
+ one argument. Also, |system()| is used instead of
+ |:!|. This is to help eliminate annoying "Press
+ ENTER" prompts. If a line number is given in the
+ range slot, the output is pasted into the buffer after
+ that line.
+
+ *rails-:Rp*
+:[range]Rp {code} Like :Rrunner, but call the Ruby p method on the
+ result. Literally "p begin {code} end".
+
+ *rails-:Rpp* *rails-:Ry*
+:[range]Rpp {code} Like :Rp, but with pp (pretty print) or y (YAML
+:[range]Ry {code} output).
+
+ *rails-:Rgenerate*
+:Rgenerate {options} Calls script/generate {options}, and then edits the
+ first file generated. Respects |g:rails_subversion|.
+
+ *rails-:Rdestroy*
+:Rdestroy {options} Calls script/destroy {options}. Respects
+ |g:rails_subversion|.
+
+ *rails-:Rserver*
+:Rserver {options} Launches script/server {options} in the background.
+ On win32, this means |!start|. On other systems, this
+ uses the --daemon option.
+
+ *rails-:Rserver!*
+:Rserver! {options} Same as |:Rserver|, only first attempts to kill any
+ other server using the same port. On non-Windows
+ systems, lsof must be installed for this to work.
+
+==============================================================================
+REFACTORING HELPERS *rails-refactoring*
+
+A few features are dedicated to helping you refactor your code.
+
+Partial Extraction ~
+ *rails-partials*
+
+The :Rextract command can be used to extract a partial to a new file.
+
+ *rails-:Rextract*
+:[range]Rextract [{controller}/]{name}
+ Create a {name} partial from [range] lines (default:
+ current line).
+
+ *rails-:Rpartial*
+:[range]Rpartial [{controller}/]{name}
+ Deprecated alias for :Rextract.
+
+If this is your file, in app/views/blog/show.rhtml: >
+
+ 1 <div>
+ 2 <h2><%= @post.title %></h2>
+ 3 <p><%= @post.body %></p>
+ 4 </div>
+
+And you issue this command: >
+
+ :2,3Rextract post
+
+Your file will change to this: >
+
+ 1 <div>
+ 2 <%= render :partial => 'post' %>
+ 3 </div>
+
+And app/views/blog/_post.rhtml will now contain: >
+
+ 1 <h2><%= post.title %></h2>
+ 2 <p><%= post.body %></p>
+
+As a special case, if the file had looked like this: >
+
+ 1 <% for object in @posts -%>
+ 2 <h2><%= object.title %></h2>
+ 3 <p><%= object.body %></p>
+ 4 <% end -%>
+<
+The end result would have been this: >
+
+ 1 <%= render :partial => 'post', :collection => @posts %>
+<
+The easiest way to choose what to extract is to use |linewise-visual| mode.
+Then, a simple >
+ :'<,'>Rextract blog/post
+will suffice. (Note the use of a controller name in this example.)
+
+Migration Inversion ~
+ *rails-migrations* *rails-:Rinvert*
+:Rinvert In a migration, rewrite the self.up method into a
+ self.down method. If self.up is empty, the process is
+ reversed. This chokes on more complicated
+ instructions, but works reasonably well for simple
+ calls to create_table, add_column, and the like.
+
+==============================================================================
+INTEGRATION *rails-integration*
+
+Having one foot in Rails and one in Vim, rails.vim has two worlds with which
+to interact.
+
+Integration with the Vim Universe ~
+ *rails-vim-integration*
+
+A handful of Vim plugins are enhanced by rails.vim. All plugins mentioned can
+be found at http://www.vim.org/. Cream and GUI menus (for lack of a better
+place) are also covered in this section.
+
+ *rails-:Rproject* *rails-project*
+:Rproject [{file}] This command is only provided when the |project|
+ plugin is installed. Invoke :Project (typically
+ without an argument), and search for the root of the
+ current Rails application. If it is not found, create
+ a new project, with appropriate directories (app,
+ etc., but not vendor).
+
+ *rails-:Rproject!*
+:Rproject! [{file}] Same as :Rproject, only delete existing project if it
+ exists and recreate it. The logic to delete the old
+ project is convoluted and possibly erroneous; report
+ any problems to the |rails-plugin-author|. A handy
+ mapping might look something like: >
+ autocmd User Rails map <buffer> <F6> :Rproject!|silent w<CR>
+< As a bonus, this command organizes views into separate
+ directories for easier navigation. The downside of
+ this is that you will have to regenerate your project
+ each time you add another view directory (which is why
+ this command recreates your project each time!).
+
+ *rails-:Rdbext* *rails-dbext*
+:Rdbext [{environment}] This command is only provided when the |dbext| plugin
+ is installed. Loads the {environment} configuration
+ (defaults to $RAILS_ENV or development) from
+ config/database.yml and uses it to configure dbext.
+ The configuration is cached until a different Rails
+ application is edited. This command is called for you
+ automatically when |g:rails_dbext| is set (default on
+ non-Windows systems).
+
+ *rails-:Rdbext!*
+:Rdbext! [{environment}]
+ Load the database configuration as above, and then
+ attempt a CREATE DATABASE for it. This is primarily
+ useful for demonstrations.
+
+ *rails-surround*
+The |surround| plugin available from vim.org enables adding and removing
+"surroundings" like parentheses, quotes, and HTML tags. Even by itself, it is
+quite useful for Rails development, particularly eRuby editing. When coupled
+with this plugin, a few additional replacement surroundings are available in
+eRuby files. See the |surround| documentation for details on how to use them.
+The table below uses ^ to represent the position of the surrounded text.
+
+Key Surrounding ~
+= <%= ^ %>
+- <% ^ -%>
+# <%# ^ %>
+<C-E> <% ^ -%>\n<% end -%>
+
+The last surrounding is particularly useful in insert mode with the following
+map in one's vimrc. Use Alt+o to open a new line below the current one. This
+works nicely even in a terminal (where most alt/meta maps will fail) because
+most terminals send <M-o> as <Esc>o anyways.
+>
+ imap <M-o> <Esc>o
+<
+One can also use the <C-E> surrounding in a plain Ruby file to append a bare
+"end" on the following line.
+
+ *rails-cream*
+This plugin provides a few additional key bindings if it is running under
+Cream, the user friendly editor which uses Vim as a back-end. Ctrl+Enter
+finds the file under the cursor (as in |rails-gf|), and Alt+[ and Alt+] find
+the alternate (|rails-alternate|) and related (|rails-related|) files.
+
+ *rails-menu*
+If the GUI is running, a menu for several commonly used features is provided.
+Also on this menu is a list of recently accessed projects. This list of
+projects can persist across restarts if a 'viminfo' flag is set to enable
+retaining certain global variables. If this interests you, add something like
+the following to your vimrc: >
+ set viminfo^=!
+<
+Integration with the Rails Universe ~
+ *rails-rails-integration*
+The general policy of rails.vim is to focus exclusively on the Ruby on Rails
+core. Supporting plugins and other add-ons to Rails has the potential to
+rapidly get out of hand. However, a few pragmatic exceptions have been made.
+
+ *rails-template-types*
+Commands like :Rview use a hardwired list of extensions (rhtml, rjs, etc.)
+when searching for files. In order to facilitate working with non-standard
+template types, several popular extensions are featured in this list,
+including haml, liquid, and mab (markaby). These extensions will disappear
+once a related configuration option is added to rails.vim.
+
+ *rails-rspec*
+Support for RSpec is currently experimental and incomplete, with only a
+handful of features being implemented. :A knows about specs and will jump to
+them, but only if no test file is found. The associated controller or model
+of a spec is detected, so all navigation commands should work as expected
+inside a spec file. :Rfixtures will find spec fixtures, but the extension is
+mandatory and tab completion will not work. :Rake will run the currently
+edited spec.
+
+While there are currently no built-in dedicated RSpec navigation commands, you
+can approximate your own with |:Rcommand|.
+>
+ Rcommand specmodel spec/models -glob=**/*
+ \ -suffix=_spec.rb -default=model()
+ Rcommand spechelper spec/helpers -glob=**/*
+ \ -suffix=_helper_spec.rb -default=controller()
+ Rcommand speccontroller spec/controllers -glob=**/*
+ \ -suffix=_controller_spec.rb -default=controller()
+ Rcommand specview spec/views -glob=**/* -suffix=_view_spec.rb
+<
+==============================================================================
+ABBREVIATIONS *rails-abbreviations* *rails-snippets*
+
+Abbreviations are still experimental. They may later be extracted into a
+separate plugin, or removed entirely.
+
+ *rails-:Rabbrev*
+:Rabbrev List all Rails abbreviations.
+
+:Rabbrev {abbr} {expn} [{extra}]
+ Define a new Rails abbreviation. {extra} is permitted
+ if and only if {expn} ends with "(".
+
+ *rails-:Rabbrev!*
+:Rabbrev! {abbr} Remove an abbreviation.
+
+Rails abbreviations differ from regular abbreviations in that they only expand
+after a <C-]> (see |i_CTRL-]|) or a <Tab> (if <Tab> does not work, it is
+likely mapped by another plugin). If the abbreviation ends in certain
+punctuation marks, additional expansions are possible. A few examples will
+hopefully clear this up (all of the following are enabled by default in
+appropriate file types).
+
+Command Sequence typed Resulting text ~
+Rabbrev rp( render :partial\ => rp( render(:partial =>
+Rabbrev rp( render :partial\ => rp<Tab> render :partial =>
+Rabbrev vs( validates_size_of vs( validates_size_of(
+Rabbrev pa[ params pa[:id] params[:id]
+Rabbrev pa[ params pa<C-]> params
+Rabbrev pa[ params pa.inspect params.inspect
+Rabbrev AR:: ActionRecord AR::Base ActiveRecord::Base
+Rabbrev :a :action\ =>\ render :a<Tab> render :action =>
+
+In short, :: expands on :, ( expands on (, and [ expands on both . and [.
+These trailing punctuation marks are NOT part of the final abbreviation, and
+you cannot have two mappings that differ only by punctuation.
+
+You must escape spaces in your expansion, either as "\ " or as "<Space>". For
+an abbreviation ending with "(", you may define where to insert the
+parenthesis by splitting the expansion into two parts (divided by an unescaped
+space).
+
+Many abbreviations abbreviations are provided by default: use :Rabbrev to list
+them. They vary depending on the type of file (models have different
+abbreviations than controllers). There is one "smart" abbreviation, :c, which
+expands to ":controller => ", ":collection => ", or ":conditions => "
+depending on context.
+
+==============================================================================
+SYNTAX HIGHLIGHTING *rails-syntax*
+
+Syntax highlighting is by and large a transparent process. For the full
+effect, however, you need a colorscheme which accentuates rails.vim
+extensions. One such colorscheme is vividchalk, available from vim.org.
+
+The following is a summary of the changes made by rails.vim to the standard
+syntax highlighting.
+
+ *rails-syntax-keywords*
+Rails specific keywords are highlighted in a filetype specific manner. For
+example, in a model, has_many is highlighted, whereas in a controller,
+before_filter is highlighted. A wide variety of syntax groups are used but
+they all link by default to railsMethod.
+
+If you feel a method has been wrongfully omitted, submit it to the
+|rails-plugin-author|.
+
+ *rails-@params* *rails-syntax-deprecated*
+Certain deprecated syntax (like @params and render_text) is highlighted as an
+error. If you trigger this highlighting, generally it means you need to
+update your code.
+
+ *rails-syntax-classes*
+Models, helpers, and controllers are given special highlighting. Depending on
+the version of Vim installed, you may need a rails.vim aware colorscheme in
+order to see this. Said colorscheme needs to provide highlighting for the
+railsUserClass syntax group.
+
+The class names are determined by camelizing filenames from certain
+directories of your application. If app/models/line_item.rb exists, the class
+"LineItem" will be highlighted.
+
+The list of classes is refreshed automatically after certain commands like
+|:Rgenerate|. Use |:Rrefresh| to trigger the process manually.
+
+ *rails-syntax-assertions*
+If you define custom assertions in test_helper.rb, these will be highlighted
+in your tests. These are found by scanning test_helper.rb for lines of the
+form " def assert_..." and extracting the method name. The railsUserMethod
+syntax group is used. The list of assertions can be refreshed with
+|:Rrefresh|.
+
+ *rails-syntax-strings*
+In the following line of code, the "?" in the conditions clause and the "ASC"
+in the order clause will be highlighted: >
+ Post.find(:all, :conditions => ["body like ?","%e%"] :order => "title ASC")
+<
+A string literal using %Q<> delimiters will have its contents highlighted as
+HTML. This is sometimes useful when writing helpers. >
+ link = %Q<<a href="http://www.vim.org">Vim</a>>
+<
+ *rails-syntax-yaml*
+YAML syntax highlighting has been extended to highlight eRuby, which can be
+used in most Rails YAML files (including database.yml and fixtures).
+
+==============================================================================
+MANAGED VIM OPTIONS *rails-options*
+
+The following options are set local to buffers where the plugin is active.
+
+ *rails-'shiftwidth'* *rails-'sw'*
+ *rails-'softtabstop'* *rails-'sts'*
+ *rails-'expandtab'* *rails-'et'*
+A value of 2 is used for 'shiftwidth' (and 'softtabstop'), and 'expandtab' is
+enabled. This is a strong convention in Rails, so the conventional wisdom
+that this is a user preference has been ignored.
+
+ *rails-'path'* *rails-'pa'*
+All the relevant directories from your application are added to your 'path'.
+This makes it easy to access a buried file: >
+ :find blog_controller.rb
+<
+ *rails-'suffixesadd'* *rails-'sua'*
+This is filetype dependent, but typically includes .rb, .rhtml, and several
+others. This allows shortening the above example: >
+ :find blog_controller
+<
+ *rails-'includeexpr'* *rails-'inex'*
+The 'includeexpr' option is set to enable the magic described in |rails-gf|.
+
+ *rails-'statusline'* *rails-'stl'*
+Useful information is added to the 'statusline', when |g:rails_statusline| is
+enabled.
+
+ *rails-'makeprg'* *rails-'mp'*
+ *rails-'errorformat'* *rails-'efm'*
+Rake is used as the 'makeprg', so |:make| will work as expected. Also,
+'errorformat' is set appropriately to handle your tests.
+
+ *rails-'filetype'* *rails-'ft'*
+The 'filetype' is sometimes adjusted for Rails files. Most notably, *.rxml
+and *.rjs are treated as Ruby files, and files that have been falsely
+identified as Mason sources are changed back to eRuby files (but only when
+they are part of a Rails application).
+
+ *rails-'completefunc'* *rails-'cfu'*
+A 'completefunc' is provided (if not already set). It is very simple, as it
+uses syntax highlighting to make its guess. See |i_CTRL-X_CTRL-U|.
+
+==============================================================================
+CONFIGURATION *rails-configuration*
+
+Very little configuration is actually required; this plugin automatically
+detects your Rails application and adjusts Vim sensibly.
+
+ *rails-:autocmd* *rails-autocommands*
+If you would like to set your own custom Vim settings whenever a Rails file is
+loaded, you can use an autocommand like the following in your vimrc: >
+ autocmd User Rails silent! Rlcd
+ autocmd User Rails map <buffer> <F9> :Rake<CR>
+You can also have autocommands that only apply to certain types of files.
+These are based off the information shown in the 'statusline' (see
+|rails-'statusline'|), with hyphens changed to periods. A few examples: >
+ autocmd User Rails.controller* iabbr <buffer> wsn wsdl_service_name
+ autocmd User Rails.model.arb* iabbr <buffer> vfo validates_format_of
+ autocmd User Rails.view.rhtml* imap <buffer> <C-Z> <%= %><C-O>3h
+End all such Rails autocommands with asterisks, even if you have an exact
+specification. There is also a filename matching syntax: >
+ autocmd User Rails/db/schema.rb Rset task=db:schema:dump
+ autocmd User Rails/**/foo_bar.rb Rabbrev FB:: FooBar
+Use the filetype based syntax whenever possible, reserving the filename based
+syntax for more advanced cases.
+
+ *macros/rails.vim*
+If you have several commands to run on initialization for all file types, they
+can be placed in a "macros/rails.vim" file in the 'runtimepath' (for example,
+"~/.vim/macros/rails.vim"). This file is sourced by rails.vim each time a
+Rails file is loaded.
+
+ *config/rails.vim*
+If you have settings particular to a specific project, they can be put in a
+config/rails.vim file in the root directory of the application. The file is
+sourced in the |sandbox| for security reasons. This only works in Vim 7 or
+newer.
+
+ *rails-:Rset*
+:Rset {option}[={value}]
+ Query or set a local option. This command may be
+ called directly, from an autocommand, or from
+ config/rails.vim.
+
+Options may be set set in one of four scopes, which my be indicated by an
+optional prefix. These scopes determine how broadly an option will apply.
+Generally, the default scope is sufficient
+
+Scope Description ~
+a: All files in one Rails application
+b: Buffer (file) specific
+g: Global to all applications
+l: Local to method (same as b: in non-Ruby files)
+
+Options are shown below with their default scope, which should be omitted.
+While you may override the scope with a prefix, this is rarely necessary and
+oftentimes useless. (For example, setting g:task is useless because the
+default rake task will apply before considering this option.)
+
+Option Meaning ~
+b:alternate Custom alternate file for :A, relative to the Rails root
+b:controller Default controller for certain commands (e.g., :Rhelper)
+b:model Default model for certain commands (e.g., :Rfixtures)
+l:preview URL stub for :Rpreview (e.g., blog/show/1)
+b:task Default task used with :Rake
+l:related Custom related file for :R, relative to the Rails root
+a:root_url Root URL for commands like :Rpreview
+a:ruby_fork_port Experimental: use ruby_fork on given port to speed things up
+
+Examples: >
+ :Rset root_url=http://localhost:12345
+ :Rset related=app/views/blog/edit.rhtml preview=blog/edit/1
+ :Rset alternate=app/models/
+ :Rset l:task=preview " Special pseudo-task for :Rake
+
+Note the use of a scope prefix in the last example.
+
+ *rails-modelines*
+If |g:rails_modelines| is enabled, these options can also be set from
+modelines near the beginning or end of the file. These modelines will always
+set buffer-local options; scope should never be specified. Examples: >
+ # Rset task=db:schema:load
+ <%# Rset alternate=app/views/layouts/application.rhtml %>
+Modelines can also be local to a method. Example: >
+ def test_comment
+ # rset alternate=app/models/comment.rb
+These two forms differ only in case.
+
+==============================================================================
+GLOBAL SETTINGS *rails-global-settings*
+
+A few global variables control the behavior of this plugin. In general, they
+can be enabled by setting them to 1 in your vimrc, and disabled by setting
+them to 0. >
+ let g:rails_some_option=1
+ let g:rails_some_option=0
+Most of these should never need to be used. The few that might be interesting
+are |g:rails_expensive|, |g:rails_subversion|, and |g:rails_default_database|.
+
+ *g:loaded_rails* >
+ let g:loaded_rails=1
+Do not load the plugin. For emergency use only.
+
+ *g:rails_abbreviations*
+Enable Rails abbreviations. See |rails-abbreviations|. Enabled by default.
+
+ *g:rails_dbext* >
+ let g:rails_dbext=1
+Enable integration with the dbext plugin, if it is installed. Defaults to the
+value of |g:rails_expensive|. When this option is set, dbext settings are
+automagically extracted from config/database.yml. Then, you can use features
+like table name completion and commands like >
+ :Create database brablog_development
+ :Select * from posts where title like '%Denmark%'
+Note that dbext is a complicated plugin, and may require additional
+configuration. See |dbext| (if installed) and |sql-completion-dynamic| (in
+Vim 7).
+
+ *g:rails_default_file* >
+ let g:rails_default_file='config/database.yml'
+File to load when a new Rails application is created, or when loading an
+existing project from the menu. Defaults to the README.
+
+ *g:rails_default_database* >
+ let g:rails_default_database='sqlite3'
+Database to use for new applications. Defaults to letting Rails decide.
+
+ *rails-slow* *g:rails_expensive* >
+ let g:rails_expensive=1
+Enables or disables expensive (slow) features (typically involving calls to
+the Ruby interpreter). Recommended for moderately fast computers. This
+option used to be disabled by default on Windows, but now it is enabled by
+default everywhere. If the Vim Ruby interface is available, this option is
+mostly ignored, as spawning a new process is generally the bottleneck for most
+expensive operations. Set this option to 0 if you experience painful delays
+when first editing a file from a Rails application.
+
+ *rails-screen* *g:rails_gnu_screen* >
+ let g:rails_gnu_screen=1
+Use GNU Screen (if it is running) to launch |:Rconsole| and |:Rserver| in the
+background. Enabled by default.
+
+ *g:rails_history_size* >
+ let g:rails_history_size=5
+Number of projects to remember. Set to 0 to disable. See |rails-menu| for
+information on retaining these projects across a restart.
+
+ *g:rails_mappings* >
+ let g:rails_mappings=1
+Enables a few mappings (mostly for |rails-navigation|). Enabled by default.
+
+ *g:rails_modelines* >
+ let g:rails_modelines=1
+Enable modelines like the following: >
+ # Rset task=db:schema:load
+Modelines set buffer-local options using the :Rset command.
+Also enables method specific modelines (note the case difference): >
+ def show
+ # rset preview=blog/show/1
+Modelines are extremely useful but may cause security concerns when editing
+projects from an untrusted source. Enabled by default.
+
+ *g:rails_menu* >
+ let g:rails_menu=1
+When 2, a Rails menu is created. When 1, this menu is a submenu under the
+Plugin menu. The default is 1.
+
+ *g:rails_url* >
+ let g:rails_url='http://localhost:3000/'
+Used for the |:Rpreview| command. Default is as shown above. Overridden by
+b:rails_url.
+
+ *g:rails_statusline* >
+ let g:rails_statusline=1
+Give a clue in the statusline when this plugin is enabled. Enabled by
+default.
+
+ *g:rails_subversion* >
+ let g:rails_subversion=1
+Automatically add/remove files to the subversion repository for commands like
+|:Rgenerate| and |:Rdestroy| (but not |:Rscript|). Ignored when the
+application is not part of a subversion repository. Disabled by default.
+
+ *g:rails_syntax* >
+ let g:rails_syntax=1
+When enabled, this tweaks the syntax highlighting to be more Rails friendly.
+Enabled by default. See |rails-syntax|.
+
+ *rails-tabs* *g:rails_tabstop* >
+ let g:rails_tabstop=4
+This option is for people who dislike the default 'shiftwidth' of 2. When
+non-zero, all files will have a |:retab|! done with 'tabstop' set to 2 on
+load, to convert the initial indent from spaces to tabs. Then, 'tabstop' and
+'shiftwidth' will be set to the option's value. The process is reversed on
+write. Thus, one can use a custom indent when editing files, yet conform to
+Rails conventions when saving them. There is also a local buffer version
+of this option, to allow for things like: >
+ autocmd User Rails if &ft == 'ruby' | let b:rails_tabstop = 4 | endif
+This option defaults to 0, which is the recommended value.
+
+If instead of all this magic, you would prefer to just override this plugin's
+settings and use your own custom 'shiftwidth', adjust things manually in an
+autocommand: >
+ autocmd User Rails set sw=4 sts=4 noet
+This is highly discouraged: don't fight Rails.
+
+==============================================================================
+ABOUT *rails-about* *rails-plugin-author*
+
+This plugin was written by Tim Pope. Email him at <vimNOSPAM@tpope.info>. He
+can also be found on Freenode's IRC network, hanging out in #rubyonrails and
+#vim as tpope.
+
+The official homepage is
+ http://rails.vim.tpope.net
+The latest stable version can be found at
+ http://www.vim.org/scripts/script.php?script_id=1567
+In Vim 7, you can keep up to date with |GetLatestVimScripts|.
+
+Development versions can be found at the following URLs:
+ http://tpope.us/rails.vba
+ http://tpope.us/rails.zip
+ http://svn.tpope.net/rails/vim/railsvim
+The first is a |vimball| for Vim 7. The third is a subversion repository
+and contains the very latest features and bugs.
+
+Feedback is highly desired on this plugin. Please send all comments,
+complaints, and compliments to the author. No bug is too small to report.
+
+ *rails-license*
+This plugin is distributable under the same terms as Vim itself. See
+|license|. No warranties, expressed or implied.
+
+==============================================================================
+vim:tw=78:ts=8:ft=help:norl: