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