2012-08-16 23:41:25 -04:00
|
|
|
This project adds [CoffeeScript] support to the vim editor. It handles syntax,
|
2013-04-13 13:45:21 -04:00
|
|
|
indenting, compiling, and more. Also included is support for CoffeeScript in
|
|
|
|
Haml and HTML.
|
2012-08-16 23:41:25 -04:00
|
|
|
|
|
|
|
![Screenshot](http://i.imgur.com/eUBvm.png)
|
|
|
|
|
|
|
|
[CoffeeScript]: http://jashkenas.github.com/coffee-script/
|
|
|
|
|
|
|
|
### Install from a Zipball
|
|
|
|
|
|
|
|
This is the quickest way to get things running.
|
|
|
|
|
|
|
|
1. Download the latest zipball from [vim.org][zipball-vim] or
|
|
|
|
[github][zipball-github]. The latest version on github is under Download
|
|
|
|
Packages (don't use the Download buttons.)
|
|
|
|
|
|
|
|
2. Extract the archive into `~/.vim/`:
|
|
|
|
|
|
|
|
unzip -od ~/.vim vim-coffee-script-HASH.zip
|
|
|
|
|
|
|
|
These steps are also used to update the plugin.
|
|
|
|
|
|
|
|
[zipball-vim]: http://www.vim.org/scripts/script.php?script_id=3590
|
|
|
|
[zipball-github]: https://github.com/kchmck/vim-coffee-script/downloads
|
|
|
|
|
|
|
|
### Install with Pathogen
|
|
|
|
|
|
|
|
Since this plugin has rolling versions based on git commits, using pathogen and
|
|
|
|
git is the preferred way to install. The plugin ends up contained in its own
|
|
|
|
directory and updates are just a `git pull` away.
|
|
|
|
|
|
|
|
1. Install tpope's [pathogen] into `~/.vim/autoload/` and add this line to your
|
|
|
|
`vimrc`:
|
|
|
|
|
|
|
|
call pathogen#infect()
|
|
|
|
|
|
|
|
To get the all the features of this plugin, make sure you also have a
|
|
|
|
`filetype plugin indent on` line in there.
|
|
|
|
|
|
|
|
[pathogen]: http://www.vim.org/scripts/script.php?script_id=2332
|
|
|
|
|
|
|
|
2. Create and change into `~/.vim/bundle/`:
|
|
|
|
|
|
|
|
$ mkdir ~/.vim/bundle
|
|
|
|
$ cd ~/.vim/bundle
|
|
|
|
|
|
|
|
3. Make a clone of the `vim-coffee-script` repository:
|
|
|
|
|
|
|
|
$ git clone https://github.com/kchmck/vim-coffee-script.git
|
|
|
|
|
|
|
|
#### Updating
|
|
|
|
|
|
|
|
1. Change into `~/.vim/bundle/vim-coffee-script/`:
|
|
|
|
|
|
|
|
$ cd ~/.vim/bundle/vim-coffee-script
|
|
|
|
|
|
|
|
2. Pull in the latest changes:
|
|
|
|
|
|
|
|
$ git pull
|
|
|
|
|
|
|
|
### CoffeeMake: Compile the Current File
|
|
|
|
|
|
|
|
The `CoffeeMake` command compiles the current file and parses any errors:
|
|
|
|
|
|
|
|
![CoffeeMake](http://i.imgur.com/cr9xI.png)
|
|
|
|
|
|
|
|
The full signature of the command is:
|
|
|
|
|
|
|
|
:[silent] CoffeeMake[!] [COFFEE-OPTIONS]...
|
|
|
|
|
|
|
|
By default, `CoffeeMake` shows all compiler output and jumps to the first line
|
|
|
|
reported as an error by `coffee`:
|
|
|
|
|
|
|
|
:CoffeeMake
|
|
|
|
|
|
|
|
Compiler output can be hidden with `silent`:
|
|
|
|
|
|
|
|
:silent CoffeeMake
|
|
|
|
|
|
|
|
Line-jumping can be turned off by adding a bang:
|
|
|
|
|
|
|
|
:CoffeeMake!
|
|
|
|
|
|
|
|
Options given to `CoffeeMake` are passed along to `coffee`:
|
|
|
|
|
|
|
|
:CoffeeMake --bare
|
|
|
|
|
|
|
|
`CoffeeMake` can be manually loaded for a file with:
|
|
|
|
|
|
|
|
:compiler coffee
|
|
|
|
|
|
|
|
#### Recompile on write
|
|
|
|
|
|
|
|
To recompile a file when it's written, add an `autocmd` like this to your
|
|
|
|
`vimrc`:
|
|
|
|
|
|
|
|
au BufWritePost *.coffee silent CoffeeMake!
|
|
|
|
|
|
|
|
All of the customizations above can be used, too. This one compiles silently
|
|
|
|
and with the `-b` option, but shows any errors:
|
|
|
|
|
|
|
|
au BufWritePost *.coffee silent CoffeeMake! -b | cwindow | redraw!
|
|
|
|
|
|
|
|
The `redraw!` command is needed to fix a redrawing quirk in terminal vim, but
|
|
|
|
can removed for gVim.
|
|
|
|
|
|
|
|
#### Default compiler options
|
|
|
|
|
|
|
|
The `CoffeeMake` command passes any options in the `coffee_make_options`
|
|
|
|
variable along to the compiler. You can use this to set default options:
|
|
|
|
|
|
|
|
let coffee_make_options = '--bare'
|
|
|
|
|
|
|
|
#### Path to compiler
|
|
|
|
|
|
|
|
To change the compiler used by `CoffeeMake` and `CoffeeCompile`, set
|
|
|
|
`coffee_compiler` to the full path of an executable or the filename of one
|
|
|
|
in your `$PATH`:
|
|
|
|
|
|
|
|
let coffee_compiler = '/usr/bin/coffee'
|
|
|
|
|
|
|
|
This option is set to `coffee` by default.
|
|
|
|
|
|
|
|
### CoffeeCompile: Compile Snippets of CoffeeScript
|
|
|
|
|
|
|
|
The `CoffeeCompile` command shows how the current file or a snippet of
|
|
|
|
CoffeeScript is compiled to JavaScript. The full signature of the command is:
|
|
|
|
|
|
|
|
:[RANGE] CoffeeCompile [watch|unwatch] [vert[ical]] [WINDOW-SIZE]
|
|
|
|
|
|
|
|
Calling `CoffeeCompile` without a range compiles the whole file:
|
|
|
|
|
|
|
|
![CoffeeCompile](http://i.imgur.com/KJfSZ.png)
|
|
|
|
|
|
|
|
Calling `CoffeeCompile` with a range, like in visual mode, compiles the selected
|
|
|
|
snippet of CoffeeScript:
|
|
|
|
|
|
|
|
![CoffeeCompile Snippet](http://i.imgur.com/mbaUA.png)
|
|
|
|
|
|
|
|
![Compiled Snippet](http://i.imgur.com/Ocjuc.png)
|
|
|
|
|
|
|
|
This scratch buffer can be quickly closed by hitting the `q` key.
|
|
|
|
|
|
|
|
Using `vert` splits the CoffeeCompile buffer vertically instead of horizontally:
|
|
|
|
|
|
|
|
:CoffeeCompile vert
|
|
|
|
|
|
|
|
Set the `coffee_compile_vert` variable to split the buffer vertically by
|
|
|
|
default:
|
|
|
|
|
|
|
|
let coffee_compile_vert = 1
|
|
|
|
|
|
|
|
The initial size of the CoffeeCompile buffer can be given as a number:
|
|
|
|
|
|
|
|
:CoffeeCompile 4
|
|
|
|
|
|
|
|
#### Watch (live preview) mode
|
|
|
|
|
|
|
|
Watch mode is like the Try CoffeeScript preview box on the CoffeeScript
|
|
|
|
homepage:
|
|
|
|
|
|
|
|
![Watch Mode](http://i.imgur.com/M6l1j.png)
|
|
|
|
|
|
|
|
![Watch Mode](http://i.imgur.com/qtNmU.png)
|
|
|
|
|
|
|
|
Writing some code and then exiting insert mode automatically updates the
|
|
|
|
compiled JavaScript buffer.
|
|
|
|
|
|
|
|
Use `watch` to start watching a buffer (`vert` is also recommended):
|
|
|
|
|
|
|
|
:CoffeeCompile watch vert
|
|
|
|
|
|
|
|
After making some changes in insert mode, hit escape and the CoffeeScript will
|
|
|
|
be recompiled. Changes made outside of insert mode don't trigger this recompile,
|
|
|
|
but calling `CoffeeCompile` will compile these changes without any bad effects.
|
|
|
|
|
|
|
|
To get synchronized scrolling of a CoffeeScript and CoffeeCompile buffer, set
|
|
|
|
`scrollbind` on each:
|
|
|
|
|
|
|
|
:setl scrollbind
|
|
|
|
|
|
|
|
Use `unwatch` to stop watching a buffer:
|
|
|
|
|
|
|
|
:CoffeeCompile unwatch
|
|
|
|
|
|
|
|
### CoffeeLint: Lint your CoffeeScript
|
|
|
|
|
|
|
|
The `CoffeeLint` command runs [coffeelint](http://www.coffeelint.org/) (version
|
|
|
|
0.4.0 or later required) on the current file and parses any errors:
|
|
|
|
|
|
|
|
:[RANGE] CoffeeLint[!] [COFFEELINT-OPTIONS]
|
|
|
|
|
|
|
|
Use it like `CoffeeMake`.
|
|
|
|
|
|
|
|
![CoffeeLint](http://i.imgur.com/dlxF7.png)
|
|
|
|
|
|
|
|
#### Default coffeelint options
|
|
|
|
|
|
|
|
Options in `coffee_lint_options` are passed along to `coffeelint`:
|
|
|
|
|
|
|
|
let coffee_lint_options = '-f lint.json'
|
|
|
|
|
|
|
|
#### Path to `coffeelint`
|
|
|
|
|
|
|
|
Use the `coffee_linter` option to set a different path to the `coffeelint`
|
|
|
|
executable:
|
|
|
|
|
|
|
|
let coffee_linter = '/usr/bin/coffeelint'
|
|
|
|
|
|
|
|
This option is set to `coffeelint` by default.
|
|
|
|
|
|
|
|
### CoffeeRun: Run some CoffeeScript
|
|
|
|
|
|
|
|
The `CoffeeRun` command compiles the current file or selected snippet and runs
|
|
|
|
the resulting JavaScript. Output is shown at the bottom of the screen:
|
|
|
|
|
|
|
|
![CoffeeRun](http://i.imgur.com/7hwSy.png)
|
|
|
|
|
|
|
|
![CoffeeRun Output](http://i.imgur.com/WNWvC.png)
|
|
|
|
|
|
|
|
### Configure Syntax Highlighting
|
|
|
|
|
|
|
|
Add these lines to your `vimrc` to disable the relevant syntax group.
|
|
|
|
|
|
|
|
#### Disable trailing whitespace error
|
|
|
|
|
|
|
|
Trailing whitespace is highlighted as an error by default. This can be disabled
|
|
|
|
with:
|
|
|
|
|
|
|
|
hi link coffeeSpaceError NONE
|
|
|
|
|
|
|
|
#### Disable trailing semicolon error
|
|
|
|
|
|
|
|
Trailing semicolons are also considered an error (for help transitioning from
|
|
|
|
JavaScript.) This can be disabled with:
|
|
|
|
|
|
|
|
hi link coffeeSemicolonError NONE
|
|
|
|
|
|
|
|
#### Disable reserved words error
|
|
|
|
|
|
|
|
Reserved words like `function` and `var` are highlighted as an error where
|
|
|
|
they're not allowed in CoffeeScript. This can be disabled with:
|
|
|
|
|
|
|
|
hi link coffeeReservedError NONE
|
|
|
|
|
|
|
|
### Tune Vim for CoffeeScript
|
|
|
|
|
|
|
|
Changing these core settings can make vim more CoffeeScript friendly.
|
|
|
|
|
|
|
|
#### Fold by indentation
|
|
|
|
|
|
|
|
Folding by indentation works well for CoffeeScript functions and classes:
|
|
|
|
|
|
|
|
![Folding](http://i.imgur.com/Y0rDC.png)
|
|
|
|
|
|
|
|
To fold by indentation in CoffeeScript files, add this line to your `vimrc`:
|
|
|
|
|
|
|
|
au BufNewFile,BufReadPost *.coffee setl foldmethod=indent nofoldenable
|
|
|
|
|
|
|
|
With this, folding is disabled by default but can be quickly toggled per-file
|
|
|
|
by hitting `zi`. To enable folding by default, remove `nofoldenable`:
|
|
|
|
|
|
|
|
au BufNewFile,BufReadPost *.coffee setl foldmethod=indent
|
|
|
|
|
|
|
|
#### Two-space indentation
|
|
|
|
|
|
|
|
To get standard two-space indentation in CoffeeScript files, add this line to
|
|
|
|
your `vimrc`:
|
|
|
|
|
|
|
|
au BufNewFile,BufReadPost *.coffee setl shiftwidth=2 expandtab
|