xref: /vim-8.2.3635/runtime/ftplugin/python.vim (revision 01164a65)
1071d4279SBram Moolenaar" Vim filetype plugin file
2071d4279SBram Moolenaar" Language:	python
3*01164a65SBram Moolenaar" Maintainer:	Tom Picton <[email protected]>
4*01164a65SBram Moolenaar" Previous Maintainer: James Sully <[email protected]>
5c95a302aSBram Moolenaar" Previous Maintainer: Johannes Zellner <[email protected]>
6*01164a65SBram Moolenaar" Last Change:	Fri, 20 October 2017
7*01164a65SBram 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)>'
28*01164a65SBram Moolenaarlet b:next_endtoplevel='\v%$\|\S.*\n+(def\|class)'
29*01164a65SBram 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*01164a65SBram Moolenaarlet b:next_end='\v\S\n*(%$\|^\s*(class\|def\|async def)\|^\S)'
33*01164a65SBram Moolenaarlet b:prev_end='\v\S\n*(^\s*(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>"
37*01164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', 0)<cr>"
38*01164a65SBram 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>"
41*01164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ]M :call <SID>Python_jump('n', '". b:next_end."', 'W', 0)<cr>"
42*01164a65SBram 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*01164a65SBram Moolenaarexecute "onoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', 0)<cr>"
47*01164a65SBram Moolenaarexecute "onoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". 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>"
50*01164a65SBram Moolenaarexecute "onoremap <silent> <buffer> ]M :call <SID>Python_jump('o', '". b:next_end."', 'W', 0)<cr>"
51*01164a65SBram 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*01164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', 0)<cr>"
56*01164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". 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>"
59*01164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> ]M :call <SID>Python_jump('x', '". b:next_end."', 'W', 0)<cr>"
60*01164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> [M :call <SID>Python_jump('x', '". b:prev_end."', 'Wb', 0)<cr>"
61071d4279SBram Moolenaar
6236782084SBram Moolenaarif !exists('*<SID>Python_jump')
63*01164a65SBram Moolenaar  fun! <SID>Python_jump(mode, motion, flags, ...) range
64*01164a65SBram Moolenaar      let l:startofline = (a:0 >= 1) ? a:1 : 1
65*01164a65SBram Moolenaar
66e18dbe86SBram Moolenaar      if a:mode == 'x'
67e18dbe86SBram Moolenaar          normal! gv
68e18dbe86SBram Moolenaar      endif
69e18dbe86SBram Moolenaar
70*01164a65SBram Moolenaar      if l:startofline == 1
71e18dbe86SBram Moolenaar          normal! 0
72*01164a65SBram 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
81*01164a65SBram Moolenaar      if l:startofline == 1
82e18dbe86SBram Moolenaar          normal! ^
83*01164a65SBram 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