xref: /vim-8.2.3635/runtime/ftplugin/python.vim (revision 7f2e9d7c)
1071d4279SBram Moolenaar" Vim filetype plugin file
2071d4279SBram Moolenaar" Language:	python
301164a65SBram Moolenaar" Maintainer:	Tom Picton <[email protected]>
401164a65SBram Moolenaar" Previous Maintainer: James Sully <[email protected]>
5c95a302aSBram Moolenaar" Previous Maintainer: Johannes Zellner <[email protected]>
6*7f2e9d7cSBram Moolenaar" Last Change:	Thur, 09 November 2017
701164a65SBram Moolenaar" https://github.com/tpict/vim-ftplugin-python
8071d4279SBram Moolenaar
9071d4279SBram Moolenaarif exists("b:did_ftplugin") | finish | endif
10071d4279SBram Moolenaarlet b:did_ftplugin = 1
119a7224b5SBram Moolenaarlet s:keepcpo= &cpo
129a7224b5SBram Moolenaarset cpo&vim
13071d4279SBram Moolenaar
14071d4279SBram Moolenaarsetlocal cinkeys-=0#
15071d4279SBram Moolenaarsetlocal indentkeys-=0#
1692dff182SBram Moolenaarsetlocal include=^\\s*\\(from\\\|import\\)
17071d4279SBram Moolenaarsetlocal includeexpr=substitute(v:fname,'\\.','/','g')
18071d4279SBram Moolenaarsetlocal suffixesadd=.py
1936782084SBram Moolenaarsetlocal comments=b:#,fb:-
2036782084SBram Moolenaarsetlocal commentstring=#\ %s
21071d4279SBram Moolenaar
2218144c84SBram Moolenaarsetlocal omnifunc=pythoncomplete#Complete
23a40ceaf8SBram Moolenaar
24071d4279SBram Moolenaarset wildignore+=*.pyc
25071d4279SBram Moolenaar
26dc083288SBram Moolenaarlet b:next_toplevel='\v%$\|^(class\|def\|async def)>'
27dc083288SBram Moolenaarlet b:prev_toplevel='\v^(class\|def\|async def)>'
2801164a65SBram Moolenaarlet b:next_endtoplevel='\v%$\|\S.*\n+(def\|class)'
2901164a65SBram Moolenaarlet b:prev_endtoplevel='\v\S.*\n+(def\|class)'
30dc083288SBram Moolenaarlet b:next='\v%$\|^\s*(class\|def\|async def)>'
31dc083288SBram Moolenaarlet b:prev='\v^\s*(class\|def\|async def)>'
32*7f2e9d7cSBram Moolenaarlet b:next_end='\v\S\n*(%$\|^(\s*\n*)*(class\|def\|async def)\|^\S)'
33*7f2e9d7cSBram Moolenaarlet b:prev_end='\v\S\n*(^(\s*\n*)*(class\|def\|async def)\|^\S)'
34e18dbe86SBram Moolenaar
35abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W')<cr>"
36abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb')<cr>"
3701164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', 0)<cr>"
3801164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". b:prev_endtoplevel."', 'Wb', 0)<cr>"
39abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]m :call <SID>Python_jump('n', '". b:next."', 'W')<cr>"
40abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [m :call <SID>Python_jump('n', '". b:prev."', 'Wb')<cr>"
4101164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ]M :call <SID>Python_jump('n', '". b:next_end."', 'W', 0)<cr>"
4201164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> [M :call <SID>Python_jump('n', '". b:prev_end."', 'Wb', 0)<cr>"
43abd468edSBram Moolenaar
44abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]] :call <SID>Python_jump('o', '". b:next_toplevel."', 'W')<cr>"
45abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [[ :call <SID>Python_jump('o', '". b:prev_toplevel."', 'Wb')<cr>"
46*7f2e9d7cSBram Moolenaarexecute "onoremap <silent> <buffer> ][ :call <SID>Python_jump('o', '". b:next_endtoplevel."', 'W', 0)<cr>"
47*7f2e9d7cSBram Moolenaarexecute "onoremap <silent> <buffer> [] :call <SID>Python_jump('o', '". b:prev_endtoplevel."', 'Wb', 0)<cr>"
48abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]m :call <SID>Python_jump('o', '". b:next."', 'W')<cr>"
49abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [m :call <SID>Python_jump('o', '". b:prev."', 'Wb')<cr>"
5001164a65SBram Moolenaarexecute "onoremap <silent> <buffer> ]M :call <SID>Python_jump('o', '". b:next_end."', 'W', 0)<cr>"
5101164a65SBram Moolenaarexecute "onoremap <silent> <buffer> [M :call <SID>Python_jump('o', '". b:prev_end."', 'Wb', 0)<cr>"
52abd468edSBram Moolenaar
53abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]] :call <SID>Python_jump('x', '". b:next_toplevel."', 'W')<cr>"
54abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [[ :call <SID>Python_jump('x', '". b:prev_toplevel."', 'Wb')<cr>"
55*7f2e9d7cSBram Moolenaarexecute "xnoremap <silent> <buffer> ][ :call <SID>Python_jump('x', '". b:next_endtoplevel."', 'W', 0)<cr>"
56*7f2e9d7cSBram Moolenaarexecute "xnoremap <silent> <buffer> [] :call <SID>Python_jump('x', '". b:prev_endtoplevel."', 'Wb', 0)<cr>"
57abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]m :call <SID>Python_jump('x', '". b:next."', 'W')<cr>"
58abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [m :call <SID>Python_jump('x', '". b:prev."', 'Wb')<cr>"
5901164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> ]M :call <SID>Python_jump('x', '". b:next_end."', 'W', 0)<cr>"
6001164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> [M :call <SID>Python_jump('x', '". b:prev_end."', 'Wb', 0)<cr>"
61071d4279SBram Moolenaar
6236782084SBram Moolenaarif !exists('*<SID>Python_jump')
6301164a65SBram Moolenaar  fun! <SID>Python_jump(mode, motion, flags, ...) range
6401164a65SBram Moolenaar      let l:startofline = (a:0 >= 1) ? a:1 : 1
6501164a65SBram Moolenaar
66e18dbe86SBram Moolenaar      if a:mode == 'x'
67e18dbe86SBram Moolenaar          normal! gv
68e18dbe86SBram Moolenaar      endif
69e18dbe86SBram Moolenaar
7001164a65SBram Moolenaar      if l:startofline == 1
71e18dbe86SBram Moolenaar          normal! 0
7201164a65SBram Moolenaar      endif
73e18dbe86SBram Moolenaar
74071d4279SBram Moolenaar      let cnt = v:count1
75071d4279SBram Moolenaar      mark '
76071d4279SBram Moolenaar      while cnt > 0
77e18dbe86SBram Moolenaar          call search(a:motion, a:flags)
78071d4279SBram Moolenaar          let cnt = cnt - 1
79071d4279SBram Moolenaar      endwhile
80e18dbe86SBram Moolenaar
8101164a65SBram Moolenaar      if l:startofline == 1
82e18dbe86SBram Moolenaar          normal! ^
8301164a65SBram Moolenaar      endif
84071d4279SBram Moolenaar  endfun
8536782084SBram Moolenaarendif
86071d4279SBram Moolenaar
8736782084SBram Moolenaarif has("browsefilter") && !exists("b:browsefilter")
88071d4279SBram Moolenaar    let b:browsefilter = "Python Files (*.py)\t*.py\n" .
89071d4279SBram Moolenaar                \ "All Files (*.*)\t*.*\n"
90071d4279SBram Moolenaarendif
919a7224b5SBram Moolenaar
92abd468edSBram Moolenaarif !exists("g:python_recommended_style") || g:python_recommended_style != 0
93b1332080SBram Moolenaar    " As suggested by PEP8.
94b1332080SBram Moolenaar    setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
95abd468edSBram Moolenaarendif
96b1332080SBram Moolenaar
97b1332080SBram Moolenaar" First time: try finding "pydoc".
98b1332080SBram Moolenaarif !exists('g:pydoc_executable')
99b1332080SBram Moolenaar    if executable('pydoc')
100b1332080SBram Moolenaar        let g:pydoc_executable = 1
101b1332080SBram Moolenaar    else
102b1332080SBram Moolenaar        let g:pydoc_executable = 0
103b1332080SBram Moolenaar    endif
104b1332080SBram Moolenaarendif
105b1332080SBram Moolenaar" If "pydoc" was found use it for keywordprg.
106b1332080SBram Moolenaarif g:pydoc_executable
107b1332080SBram Moolenaar    setlocal keywordprg=pydoc
108b1332080SBram Moolenaarendif
109b1332080SBram Moolenaar
1109a7224b5SBram Moolenaarlet &cpo = s:keepcpo
1119a7224b5SBram Moolenaarunlet s:keepcpo
112