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*40962ec9SBram Moolenaar" Last Change: Wed, 20 December 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 23*40962ec9SBram Moolenaarif has('python3') 24*40962ec9SBram Moolenaar setlocal omnifunc=python3complete#Complete 25*40962ec9SBram Moolenaarendif 26a40ceaf8SBram Moolenaar 27071d4279SBram Moolenaarset wildignore+=*.pyc 28071d4279SBram Moolenaar 29dc083288SBram Moolenaarlet b:next_toplevel='\v%$\|^(class\|def\|async def)>' 30dc083288SBram Moolenaarlet b:prev_toplevel='\v^(class\|def\|async def)>' 3101164a65SBram Moolenaarlet b:next_endtoplevel='\v%$\|\S.*\n+(def\|class)' 3201164a65SBram Moolenaarlet b:prev_endtoplevel='\v\S.*\n+(def\|class)' 33dc083288SBram Moolenaarlet b:next='\v%$\|^\s*(class\|def\|async def)>' 34dc083288SBram Moolenaarlet b:prev='\v^\s*(class\|def\|async def)>' 357f2e9d7cSBram Moolenaarlet b:next_end='\v\S\n*(%$\|^(\s*\n*)*(class\|def\|async def)\|^\S)' 367f2e9d7cSBram Moolenaarlet b:prev_end='\v\S\n*(^(\s*\n*)*(class\|def\|async def)\|^\S)' 37e18dbe86SBram Moolenaar 38abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W')<cr>" 39abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb')<cr>" 4001164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', 0)<cr>" 4101164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". b:prev_endtoplevel."', 'Wb', 0)<cr>" 42abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]m :call <SID>Python_jump('n', '". b:next."', 'W')<cr>" 43abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [m :call <SID>Python_jump('n', '". b:prev."', 'Wb')<cr>" 4401164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ]M :call <SID>Python_jump('n', '". b:next_end."', 'W', 0)<cr>" 4501164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> [M :call <SID>Python_jump('n', '". b:prev_end."', 'Wb', 0)<cr>" 46abd468edSBram Moolenaar 47abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]] :call <SID>Python_jump('o', '". b:next_toplevel."', 'W')<cr>" 48abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [[ :call <SID>Python_jump('o', '". b:prev_toplevel."', 'Wb')<cr>" 497f2e9d7cSBram Moolenaarexecute "onoremap <silent> <buffer> ][ :call <SID>Python_jump('o', '". b:next_endtoplevel."', 'W', 0)<cr>" 507f2e9d7cSBram Moolenaarexecute "onoremap <silent> <buffer> [] :call <SID>Python_jump('o', '". b:prev_endtoplevel."', 'Wb', 0)<cr>" 51abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]m :call <SID>Python_jump('o', '". b:next."', 'W')<cr>" 52abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [m :call <SID>Python_jump('o', '". b:prev."', 'Wb')<cr>" 5301164a65SBram Moolenaarexecute "onoremap <silent> <buffer> ]M :call <SID>Python_jump('o', '". b:next_end."', 'W', 0)<cr>" 5401164a65SBram Moolenaarexecute "onoremap <silent> <buffer> [M :call <SID>Python_jump('o', '". b:prev_end."', 'Wb', 0)<cr>" 55abd468edSBram Moolenaar 56abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]] :call <SID>Python_jump('x', '". b:next_toplevel."', 'W')<cr>" 57abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [[ :call <SID>Python_jump('x', '". b:prev_toplevel."', 'Wb')<cr>" 587f2e9d7cSBram Moolenaarexecute "xnoremap <silent> <buffer> ][ :call <SID>Python_jump('x', '". b:next_endtoplevel."', 'W', 0)<cr>" 597f2e9d7cSBram Moolenaarexecute "xnoremap <silent> <buffer> [] :call <SID>Python_jump('x', '". b:prev_endtoplevel."', 'Wb', 0)<cr>" 60abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]m :call <SID>Python_jump('x', '". b:next."', 'W')<cr>" 61abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [m :call <SID>Python_jump('x', '". b:prev."', 'Wb')<cr>" 6201164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> ]M :call <SID>Python_jump('x', '". b:next_end."', 'W', 0)<cr>" 6301164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> [M :call <SID>Python_jump('x', '". b:prev_end."', 'Wb', 0)<cr>" 64071d4279SBram Moolenaar 6536782084SBram Moolenaarif !exists('*<SID>Python_jump') 6601164a65SBram Moolenaar fun! <SID>Python_jump(mode, motion, flags, ...) range 6701164a65SBram Moolenaar let l:startofline = (a:0 >= 1) ? a:1 : 1 6801164a65SBram Moolenaar 69e18dbe86SBram Moolenaar if a:mode == 'x' 70e18dbe86SBram Moolenaar normal! gv 71e18dbe86SBram Moolenaar endif 72e18dbe86SBram Moolenaar 7301164a65SBram Moolenaar if l:startofline == 1 74e18dbe86SBram Moolenaar normal! 0 7501164a65SBram Moolenaar endif 76e18dbe86SBram Moolenaar 77071d4279SBram Moolenaar let cnt = v:count1 78071d4279SBram Moolenaar mark ' 79071d4279SBram Moolenaar while cnt > 0 80e18dbe86SBram Moolenaar call search(a:motion, a:flags) 81071d4279SBram Moolenaar let cnt = cnt - 1 82071d4279SBram Moolenaar endwhile 83e18dbe86SBram Moolenaar 8401164a65SBram Moolenaar if l:startofline == 1 85e18dbe86SBram Moolenaar normal! ^ 8601164a65SBram Moolenaar endif 87071d4279SBram Moolenaar endfun 8836782084SBram Moolenaarendif 89071d4279SBram Moolenaar 9036782084SBram Moolenaarif has("browsefilter") && !exists("b:browsefilter") 91071d4279SBram Moolenaar let b:browsefilter = "Python Files (*.py)\t*.py\n" . 92071d4279SBram Moolenaar \ "All Files (*.*)\t*.*\n" 93071d4279SBram Moolenaarendif 949a7224b5SBram Moolenaar 95abd468edSBram Moolenaarif !exists("g:python_recommended_style") || g:python_recommended_style != 0 96b1332080SBram Moolenaar " As suggested by PEP8. 97b1332080SBram Moolenaar setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8 98abd468edSBram Moolenaarendif 99b1332080SBram Moolenaar 100b1332080SBram Moolenaar" First time: try finding "pydoc". 101b1332080SBram Moolenaarif !exists('g:pydoc_executable') 102b1332080SBram Moolenaar if executable('pydoc') 103b1332080SBram Moolenaar let g:pydoc_executable = 1 104b1332080SBram Moolenaar else 105b1332080SBram Moolenaar let g:pydoc_executable = 0 106b1332080SBram Moolenaar endif 107b1332080SBram Moolenaarendif 108b1332080SBram Moolenaar" If "pydoc" was found use it for keywordprg. 109b1332080SBram Moolenaarif g:pydoc_executable 110b1332080SBram Moolenaar setlocal keywordprg=pydoc 111b1332080SBram Moolenaarendif 112b1332080SBram Moolenaar 1139a7224b5SBram Moolenaarlet &cpo = s:keepcpo 1149a7224b5SBram Moolenaarunlet s:keepcpo 115