mirror of
https://github.com/gryf/.vim.git
synced 2025-12-17 19:40:29 +01:00
changed the way that indent is attached to python files (fuck you iCard) added convinient snippets for rest files
136 lines
3.6 KiB
VimL
136 lines
3.6 KiB
VimL
" File: pep8_fn.vim
|
|
" Author: Roman 'gryf' Dobosz (gryf73 at gmail.com)
|
|
" Version: 1.0
|
|
" Last Modified: 2010-09-12
|
|
" Description: {{{
|
|
"
|
|
" Overview
|
|
" --------
|
|
" This plugin provides functionality to static checks for python files
|
|
" regarding PEP8 guidance[1] as ":Pep8" command.
|
|
"
|
|
" This function does not use pep8[2] command line utility, but relies on pep8
|
|
" module.
|
|
"
|
|
" This script uses python, therefore VIm should be compiled with python
|
|
" support. You can check it by issuing ":version" command, and search for
|
|
" "+python" inside features list.
|
|
"
|
|
" Couple of ideas was taken from pyflakes.vim[3] plugin.
|
|
"
|
|
" Installation
|
|
" ------------
|
|
" 1. Copy the pep8_fn.vim file to the $HOME/.vim/ftplugin/python or
|
|
" $HOME/vimfiles/ftplugin/python or $VIM/vimfiles/ftplugin/python
|
|
" directory. If python directory doesn't exists, it should be created.
|
|
" Refer to the following Vim help topics for more information about Vim
|
|
" plugins:
|
|
" :help add-plugin
|
|
" :help add-global-plugin
|
|
" :help runtimepath
|
|
" 2. It should be possible to import pep8 from python interpreter (it should
|
|
" report no error):
|
|
" >>> import pep8
|
|
" >>>
|
|
" If there are errors, install pep8 first. Simplest way to do it, is to
|
|
" use easy_install[4] shell command as a root:
|
|
" # easy_install pep8
|
|
" 3. Restart Vim.
|
|
" 4. You can now use the ":Pep8" which will examine current python buffer
|
|
" and open quickfix buffer with errors if any.
|
|
"
|
|
" [1] http://www.python.org/dev/peps/pep-0008/
|
|
" [2] http://pypi.python.org/pypi/pep8
|
|
" [3] http://www.vim.org/scripts/script.php?script_id=2441
|
|
" [4] http://pypi.python.org/pypi/setuptools
|
|
"
|
|
" }}}
|
|
|
|
|
|
if exists("b:did_pep8_plugin")
|
|
finish " only load once
|
|
else
|
|
let b:did_pep8_plugin = 1
|
|
endif
|
|
|
|
if !exists("g:pep8_exclude")
|
|
let g:pep8_exclude = []
|
|
endif
|
|
|
|
if !exists("b:did_pep8_init")
|
|
let b:did_pep8_init = 0
|
|
|
|
if !has('python')
|
|
echoerr "pep8_fn.vim plugin requires Vim to be compiled with +python"
|
|
finish
|
|
endif
|
|
|
|
python << EOF
|
|
import vim
|
|
import sys
|
|
from StringIO import StringIO
|
|
|
|
try:
|
|
import pep8
|
|
except ImportError:
|
|
raise AssertionError('Error: pep8_fn.vim requires module pep8')
|
|
|
|
class VImPep8(object):
|
|
|
|
def __init__(self):
|
|
self.fname = vim.current.buffer.name
|
|
self.bufnr = vim.current.buffer.number
|
|
self.output = []
|
|
self.exclude_list = vim.eval("g:pep8_exclude")
|
|
|
|
def reporter(self, lnum, col, text, check):
|
|
self.output.append([lnum, col, text])
|
|
|
|
def run(self):
|
|
pep8.process_options(['-r', vim.current.buffer.name])
|
|
checker = pep8.Checker(vim.current.buffer.name)
|
|
checker.report_error = self.reporter
|
|
checker.check_all()
|
|
self.process_output()
|
|
|
|
def process_output(self):
|
|
vim.command('call setqflist([])')
|
|
qf_list = []
|
|
qf_dict = {}
|
|
|
|
for line in self.output:
|
|
skip = False
|
|
for exclude_pattern in self.exclude_list:
|
|
if exclude_pattern in line[2]:
|
|
skip = True
|
|
break
|
|
if skip:
|
|
continue
|
|
qf_dict['bufnr'] = self.bufnr
|
|
qf_dict['lnum'] = line[0]
|
|
qf_dict['col'] = line[1]
|
|
qf_dict['text'] = line[2]
|
|
qf_dict['type'] = line[2][0]
|
|
qf_list.append(qf_dict)
|
|
qf_dict = {}
|
|
|
|
self.output = []
|
|
vim.command('call setqflist(%s)' % str(qf_list))
|
|
if qf_list:
|
|
vim.command('copen')
|
|
EOF
|
|
let b:did_pep8_init = 1
|
|
endif
|
|
|
|
if !exists('*s:Pep8')
|
|
function s:Pep8()
|
|
python << EOF
|
|
VImPep8().run()
|
|
EOF
|
|
endfunction
|
|
endif
|
|
|
|
if !exists(":Pep8")
|
|
command Pep8 call s:Pep8()
|
|
endif
|