PageRenderTime 60ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/Plugins/Syntastic/Plugin/README.markdown

https://bitbucket.org/WscriChy/vim-configuration
Markdown | 334 lines | 255 code | 79 blank | 0 comment | 0 complexity | ac7b1fef54ef59a6bff62f7bedf15e6a MD5 | raw file
  1. ,
  2. / \,,_ .'|
  3. ,{{| /}}}}/_.' _____________________________________________
  4. }}}}` '{{' '. / \
  5. {{{{{ _ ;, \ / Ladies and Gentlemen, \
  6. ,}}}}}} /o`\ ` ;) | |
  7. {{{{{{ / ( | this is ... |
  8. }}}}}} | \ | |
  9. {{{{{{{{ \ \ | |
  10. }}}}}}}}} '.__ _ | | _____ __ __ _ |
  11. {{{{{{{{ /`._ (_\ / | / ___/__ ______ / /_____ ______/ /_(_)____ |
  12. }}}}}}' | //___/ --=: \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ |
  13. jgs `{{{{` | '--' | ___/ / /_/ / / / / /_/ /_/ (__ ) /_/ / /__ |
  14. }}}` | /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/ |
  15. | /____/ |
  16. | /
  17. \_____________________________________________/
  18. - - -
  19. 1\. [Introduction](#introduction)
  20. 2\. [Installation](#installation)
  21. 3\. [FAQ](#faq)
  22. 4\. [Other resources](#otherresources)
  23. - - -
  24. <a name="introduction"></a>
  25. ## 1\. Introduction
  26. Syntastic is a syntax checking plugin for Vim that runs files through external
  27. syntax checkers and displays any resulting errors to the user. This can be done
  28. on demand, or automatically as files are saved. If syntax errors are detected,
  29. the user is notified and is happy because they didn't have to compile their
  30. code or execute their script to find them.
  31. At the time of this writing, syntax checking plugins exist for ActionScript,
  32. Ada, AppleScript, Arduino, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C,
  33. C++, C#, Cabal, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
  34. DocBook, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go,
  35. Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS,
  36. Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown, MATLAB, NASM,
  37. Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable
  38. Object, OS X and iOS property lists, Puppet, Python, R, Racket, Relax NG,
  39. reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo,
  40. Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML,
  41. z80, Zope page templates, and zsh. See the [wiki][3] for details about the
  42. corresponding supported checkers.
  43. Below is a screenshot showing the methods that Syntastic uses to display syntax
  44. errors. Note that, in practise, you will only have a subset of these methods
  45. enabled.
  46. ![Screenshot 1][0]
  47. 1. Errors are loaded into the location list for the corresponding window.
  48. 2. When the cursor is on a line containing an error, the error message is echoed in the command window.
  49. 3. Signs are placed beside lines with errors - note that warnings are displayed in a different color.
  50. 4. There is a configurable statusline flag you can include in your statusline config.
  51. 5. Hover the mouse over a line containing an error and the error message is displayed as a balloon.
  52. 6. (not shown) Highlighting errors with syntax highlighting. Erroneous parts of lines can be highlighted.
  53. <a name="installation"></a>
  54. ## 2\. Installation
  55. Installing syntastic is easy but first you need to have the [pathogen][1]
  56. plugin installed. If you already have [pathogen][1] working then skip
  57. [Step 1](#step1) and go to [Step 2](#step2).
  58. <a name="step1"></a>
  59. ### 2.1\. Step 1: Install pathogen.vim
  60. First I'll show you how to install Tim Pope's [pathogen][1] so that it's easy to
  61. install syntastic. Do this in your terminal so that you get the `pathogen.vim`
  62. file and the directories it needs:
  63. ```sh
  64. mkdir -p ~/.vim/autoload ~/.vim/bundle && \
  65. curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
  66. ```
  67. Next you *need* to add this to your `~/.vimrc`:
  68. ```vim
  69. execute pathogen#infect()
  70. ```
  71. <a name="step2"></a>
  72. ### 2.2\. Step 2: Install syntastic as a pathogen bundle
  73. You now have pathogen installed and can put syntastic into `~/.vim/bundle` like
  74. this:
  75. ```sh
  76. cd ~/.vim/bundle && \
  77. git clone https://github.com/scrooloose/syntastic.git
  78. ```
  79. Quit vim and start it back up to reload it, then type:
  80. ```vim
  81. :Helptags
  82. ```
  83. If you get an error when you do this, then you probably didn't install
  84. [pathogen][1] right. Go back to [Step 1](#step1) and make sure you did the following:
  85. 1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories.
  86. 2. Added the `call pathogen#infect()` line to your `~/.vimrc` file
  87. 3. Did the `git clone` of syntastic inside `~/.vim/bundle`
  88. 4. Have permissions to access all of these directories.
  89. <a name="faq"></a>
  90. ## 3\. FAQ
  91. <a name="faqinfo"></a>
  92. __Q. I installed syntastic but it isn't reporting any errors...__
  93. A. The most likely reason is that none of the syntax checkers that it requires
  94. is installed. For example: by default, python requires either `flake8` or
  95. `pylint` to be installed and in your `$PATH`. To see which executables are
  96. supported, look at the [wiki][3]. Note that aliases do not work; the actual
  97. executables must be available in your `$PATH`. Symbolic links are okay though.
  98. You can see syntastic's idea of available checkers by running `:SyntasticInfo`.
  99. Another reason it could fail is that either the command line options or the
  100. error output for a syntax checker may have changed. In this case, make sure you
  101. have the latest version of the syntax checker installed. If it still fails then
  102. create an issue - or better yet, create a pull request.
  103. <a name="faqpython3"></a>
  104. __Q. The `python` checker complains about syntactically valid Python 3 constructs...__
  105. A. Configure the `python` checker to call a Python 3 interpreter rather than
  106. Python 2, e.g:
  107. ```vim
  108. let g:syntastic_python_python_exec = '/path/to/python3'
  109. ```
  110. <a name="faqperl"></a>
  111. __Q. The `perl` checker has stopped working...__
  112. A. The `perl` checker runs `perl -c` against your file, which in turn
  113. __executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use`
  114. statements in your file (cf. [perlrun][10]). This is probably fine if you
  115. wrote the file yourself, but it's a security problem if you're checking third
  116. party files. Since there is currently no way to disable this behaviour while
  117. still producing useful results, the checker is now disabled by default. To
  118. (re-)enable it, make sure the `g:syntastic_perl_checkers` list includes `perl`,
  119. and set `g:syntastic_enable_perl_checker` to 1 in your vimrc:
  120. ```vim
  121. let g:syntastic_enable_perl_checker = 1
  122. ```
  123. <a name="faqrust"></a>
  124. __Q. What happened to the `rustc` checker?__
  125. A. It has been included in the [Rust compiler package][12]. If you have
  126. a recent version of the Rust compiler, the checker should be picked up
  127. automatically by syntastic.
  128. <a name="faqloclist"></a>
  129. __Q. I run a checker and the location list is not updated...__
  130. __Q. I run`:lopen` or `:lwindow` and the error window is empty...__
  131. A. By default the location list is changed only when you run the `:Errors`
  132. command, in order to minimise conflicts with other plugins. If you want the
  133. location list to always be updated when you run the checkers, add this line to
  134. your vimrc:
  135. ```vim
  136. let g:syntastic_always_populate_loc_list = 1
  137. ```
  138. <a name="faqargs"></a>
  139. __Q. How can I pass additional arguments to a checker?__
  140. A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers
  141. that do can be configured using global variables. The general form of the
  142. global `args` variables is `syntastic_<filetype>_<checker>_args`.
  143. So, If you wanted to pass "--my --args --here" to the ruby mri checker you
  144. would add this line to your vimrc:
  145. ```vim
  146. let g:syntastic_ruby_mri_args = "--my --args --here"
  147. ```
  148. See `:help syntastic-checker-options` for more information.
  149. <a name="faqcheckers"></a>
  150. __Q. Syntastic supports several checkers for my filetype - how do I tell it
  151. which one(s) to use?__
  152. A. Stick a line like this in your vimrc:
  153. ```vim
  154. let g:syntastic_<filetype>_checkers = ['<checker-name>']
  155. ```
  156. To see the list of supported checkers for your filetype look at the
  157. [wiki][3].
  158. e.g. Python has the following checkers, among others: `flake8`, `pyflakes`,
  159. `pylint` and a native `python` checker.
  160. To tell syntastic to use `pylint`, you would use this setting:
  161. ```vim
  162. let g:syntastic_python_checkers = ['pylint']
  163. ```
  164. Checkers can be chained together like this:
  165. ```vim
  166. let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
  167. ```
  168. This is telling syntastic to run the `php` checker first, and if no errors are
  169. found, run `phpcs`, and then `phpmd`.
  170. You can also run checkers explicitly by calling `:SyntasticCheck <checker>`.
  171. e.g. to run `phpcs` and `phpmd`:
  172. ```vim
  173. :SyntasticCheck phpcs phpmd
  174. ```
  175. This works for any checkers available for the current filetype, even if they
  176. aren't listed in `g:syntastic_<filetype>_checkers`. You can't run checkers for
  177. "foreign" filetypes though (e.g. you can't run, say, a Python checker if the
  178. filetype of the current file is `php`).
  179. <a name="faqstyle"></a>
  180. __Q. What is the difference between syntax checkers and style checkers?__
  181. A. The errors and warnings they produce are highlighted differently and can
  182. be filtered by different rules, but otherwise the distinction is pretty much
  183. arbitrary. There is an ongoing effort to keep things consistent, so you can
  184. _generally_ expect messages produced by syntax checkers to be _mostly_ related
  185. to syntax, and messages produced by style checkers to be _mostly_ about style.
  186. But there can be no formal guarantee that, say, a style checker that runs into
  187. a syntax error wouldn't die with a fatal message, nor that a syntax checker
  188. wouldn't give you warnings against using some constructs as being bad practice.
  189. There is also no guarantee that messages marked as "style" are less severe than
  190. the ones marked as "syntax" (whatever that might mean). And there are even a
  191. few Frankenstein checkers (for example `flake8` and `pylama`) that, by their
  192. nature, produce both kinds of messages. Syntastic is not smart enough to be
  193. able to sort out these things by itself.
  194. In fact it's more useful to look at this from the perspective of filtering
  195. unwanted messages, rather than as an indicator of severity levels. The
  196. distinction between syntax and style is orthogonal to the distinction between
  197. errors and warnings, and thus you can turn off messages based on level, on
  198. type, or both.
  199. e.g. To disable all style messages:
  200. ```vim
  201. let g:syntastic_quiet_messages = { "type": "style" }
  202. ```
  203. See `:help syntastic_quiet_messages` for details.
  204. <a name="faqaggregate"></a>
  205. __Q. I have enabled multiple checkers for the current filetype. How can I
  206. display all of the errors from all of the checkers together?__
  207. A. Set `g:syntastic_aggregate_errors` to 1 in your vimrc:
  208. ```vim
  209. let g:syntastic_aggregate_errors = 1
  210. ```
  211. See `:help syntastic-aggregating-errors` for more details.
  212. <a name="faqlnext"></a>
  213. __Q. How can I jump between the different errors without using the location
  214. list at the bottom of the window?__
  215. A. Vim provides several built-in commands for this. See `:help :lnext` and
  216. `:help :lprev`.
  217. If you use these commands a lot then you may want to add shortcut mappings to
  218. your vimrc, or install something like [unimpaired][2], which provides such
  219. mappings (among other things).
  220. <a name="faqbdelete"></a>
  221. __Q. The error window is closed automatically when I :quit the current buffer
  222. but not when I :bdelete it?__
  223. A. There is no safe way to handle that situation automatically, but you can
  224. work around it:
  225. ```vim
  226. nnoremap <silent> <C-d> :lclose<CR>:bdelete<CR>
  227. cabbrev <silent> bd lclose\|bdelete
  228. ```
  229. <a name="otherresources"></a>
  230. ## 4\. Other resources
  231. The preferred place for posting suggestions, reporting bugs, and general
  232. discussions related to syntastic is the [issue tracker at GitHub][4].
  233. A guide for writing syntax checkers can be found in the [wiki][11].
  234. There are also a dedicated [google group][5], and a
  235. [syntastic tag at StackOverflow][6].
  236. Syntastic aims to provide a common interface to syntax checkers for as many
  237. languages as possible. For particular languages, there are, of course, other
  238. plugins that provide more functionality than syntastic. You might want to take
  239. a look at [jedi-vim][7], [python-mode][8], or [YouCompleteMe][9].
  240. [0]: https://github.com/scrooloose/syntastic/raw/master/_assets/screenshot_1.png
  241. [1]: https://github.com/tpope/vim-pathogen
  242. [2]: https://github.com/tpope/vim-unimpaired
  243. [3]: https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
  244. [4]: https://github.com/scrooloose/syntastic/issues
  245. [5]: https://groups.google.com/group/vim-syntastic
  246. [6]: http://stackoverflow.com/questions/tagged/syntastic
  247. [7]: https://github.com/davidhalter/jedi-vim
  248. [8]: https://github.com/klen/python-mode
  249. [9]: http://valloric.github.io/YouCompleteMe/
  250. [10]: http://perldoc.perl.org/perlrun.html#*-c*
  251. [11]: https://github.com/scrooloose/syntastic/wiki/Syntax-Checker-Guide
  252. [12]: https://github.com/rust-lang/rust/
  253. <!--
  254. vim:tw=79:sw=4:
  255. -->