xref: /vim-8.2.3635/runtime/ftplugin/python.vim (revision abd468ed)
1071d4279SBram Moolenaar" Vim filetype plugin file
2071d4279SBram Moolenaar" Language:	python
3c95a302aSBram Moolenaar" Maintainer:	James Sully <[email protected]>
4c95a302aSBram Moolenaar" Previous Maintainer: Johannes Zellner <[email protected]>
5*abd468edSBram Moolenaar" Last Change:	Tue, 06 September 2016
6c95a302aSBram Moolenaar" https://github.com/sullyj3/vim-ftplugin-python
7071d4279SBram Moolenaar
8071d4279SBram Moolenaarif exists("b:did_ftplugin") | finish | endif
9071d4279SBram Moolenaarlet b:did_ftplugin = 1
109a7224b5SBram Moolenaarlet s:keepcpo= &cpo
119a7224b5SBram Moolenaarset cpo&vim
12071d4279SBram Moolenaar
13071d4279SBram Moolenaarsetlocal cinkeys-=0#
14071d4279SBram Moolenaarsetlocal indentkeys-=0#
1592dff182SBram Moolenaarsetlocal include=^\\s*\\(from\\\|import\\)
16071d4279SBram Moolenaarsetlocal includeexpr=substitute(v:fname,'\\.','/','g')
17071d4279SBram Moolenaarsetlocal suffixesadd=.py
1836782084SBram Moolenaarsetlocal comments=b:#,fb:-
1936782084SBram Moolenaarsetlocal commentstring=#\ %s
20071d4279SBram Moolenaar
2118144c84SBram Moolenaarsetlocal omnifunc=pythoncomplete#Complete
22a40ceaf8SBram Moolenaar
23071d4279SBram Moolenaarset wildignore+=*.pyc
24071d4279SBram Moolenaar
25*abd468edSBram Moolenaarlet b:next_toplevel='\v%$\|^(class\|def)>'
26*abd468edSBram Moolenaarlet b:prev_toplevel='\v^(class\|def)>'
27*abd468edSBram Moolenaarlet b:next='\v%$\|^\s*(class\|def)>'
28*abd468edSBram Moolenaarlet b:prev='\v^\s*(class\|def)>'
29e18dbe86SBram Moolenaar
30*abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W')<cr>"
31*abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb')<cr>"
32*abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]m :call <SID>Python_jump('n', '". b:next."', 'W')<cr>"
33*abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [m :call <SID>Python_jump('n', '". b:prev."', 'Wb')<cr>"
34*abd468edSBram Moolenaar
35*abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]] :call <SID>Python_jump('o', '". b:next_toplevel."', 'W')<cr>"
36*abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [[ :call <SID>Python_jump('o', '". b:prev_toplevel."', 'Wb')<cr>"
37*abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]m :call <SID>Python_jump('o', '". b:next."', 'W')<cr>"
38*abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [m :call <SID>Python_jump('o', '". b:prev."', 'Wb')<cr>"
39*abd468edSBram Moolenaar
40*abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]] :call <SID>Python_jump('x', '". b:next_toplevel."', 'W')<cr>"
41*abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [[ :call <SID>Python_jump('x', '". b:prev_toplevel."', 'Wb')<cr>"
42*abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]m :call <SID>Python_jump('x', '". b:next."', 'W')<cr>"
43*abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [m :call <SID>Python_jump('x', '". b:prev."', 'Wb')<cr>"
44071d4279SBram Moolenaar
4536782084SBram Moolenaarif !exists('*<SID>Python_jump')
46e18dbe86SBram Moolenaar  fun! <SID>Python_jump(mode, motion, flags) range
47e18dbe86SBram Moolenaar      if a:mode == 'x'
48e18dbe86SBram Moolenaar          normal! gv
49e18dbe86SBram Moolenaar      endif
50e18dbe86SBram Moolenaar
51e18dbe86SBram Moolenaar      normal! 0
52e18dbe86SBram Moolenaar
53071d4279SBram Moolenaar      let cnt = v:count1
54071d4279SBram Moolenaar      mark '
55071d4279SBram Moolenaar      while cnt > 0
56e18dbe86SBram Moolenaar          call search(a:motion, a:flags)
57071d4279SBram Moolenaar          let cnt = cnt - 1
58071d4279SBram Moolenaar      endwhile
59e18dbe86SBram Moolenaar
60e18dbe86SBram Moolenaar      normal! ^
61071d4279SBram Moolenaar  endfun
6236782084SBram Moolenaarendif
63071d4279SBram Moolenaar
6436782084SBram Moolenaarif has("browsefilter") && !exists("b:browsefilter")
65071d4279SBram Moolenaar    let b:browsefilter = "Python Files (*.py)\t*.py\n" .
66071d4279SBram Moolenaar                \ "All Files (*.*)\t*.*\n"
67071d4279SBram Moolenaarendif
689a7224b5SBram Moolenaar
69*abd468edSBram Moolenaarif !exists("g:python_recommended_style") || g:python_recommended_style != 0
70b1332080SBram Moolenaar    " As suggested by PEP8.
71b1332080SBram Moolenaar    setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
72*abd468edSBram Moolenaarendif
73b1332080SBram Moolenaar
74b1332080SBram Moolenaar" First time: try finding "pydoc".
75b1332080SBram Moolenaarif !exists('g:pydoc_executable')
76b1332080SBram Moolenaar    if executable('pydoc')
77b1332080SBram Moolenaar        let g:pydoc_executable = 1
78b1332080SBram Moolenaar    else
79b1332080SBram Moolenaar        let g:pydoc_executable = 0
80b1332080SBram Moolenaar    endif
81b1332080SBram Moolenaarendif
82b1332080SBram Moolenaar" If "pydoc" was found use it for keywordprg.
83b1332080SBram Moolenaarif g:pydoc_executable
84b1332080SBram Moolenaar    setlocal keywordprg=pydoc
85b1332080SBram Moolenaarendif
86b1332080SBram Moolenaar
879a7224b5SBram Moolenaarlet &cpo = s:keepcpo
889a7224b5SBram Moolenaarunlet s:keepcpo
89