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*98ef233eSBram Moolenaar" Last Change: Sun, 18 March 2018 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\\) 17*98ef233eSBram Moolenaar 18*98ef233eSBram Moolenaar" For imports with leading .., append / and replace additional .s with ../ 19*98ef233eSBram Moolenaarlet b:grandparent_match = '^\(.\.\)\(\.*\)' 20*98ef233eSBram Moolenaarlet b:grandparent_sub = '\=submatch(1)."/".repeat("../",strlen(submatch(2)))' 21*98ef233eSBram Moolenaar 22*98ef233eSBram Moolenaar" For imports with a single leading ., replace it with ./ 23*98ef233eSBram Moolenaarlet b:parent_match = '^\.\(\.\)\@!' 24*98ef233eSBram Moolenaarlet b:parent_sub = './' 25*98ef233eSBram Moolenaar 26*98ef233eSBram Moolenaar" Replace any . sandwiched between word characters with / 27*98ef233eSBram Moolenaarlet b:child_match = '\(\w\)\.\(\w\)' 28*98ef233eSBram Moolenaarlet b:child_sub = '\1/\2' 29*98ef233eSBram Moolenaar 30*98ef233eSBram Moolenaarsetlocal includeexpr=substitute(substitute(substitute( 31*98ef233eSBram Moolenaar \v:fname, 32*98ef233eSBram Moolenaar \b:grandparent_match,b:grandparent_sub,''), 33*98ef233eSBram Moolenaar \b:parent_match,b:parent_sub,''), 34*98ef233eSBram Moolenaar \b:child_match,b:child_sub,'g') 35*98ef233eSBram Moolenaar 36071d4279SBram Moolenaarsetlocal suffixesadd=.py 3736782084SBram Moolenaarsetlocal comments=b:#,fb:- 3836782084SBram Moolenaarsetlocal commentstring=#\ %s 39071d4279SBram Moolenaar 4018144c84SBram Moolenaarsetlocal omnifunc=pythoncomplete#Complete 4140962ec9SBram Moolenaarif has('python3') 4240962ec9SBram Moolenaar setlocal omnifunc=python3complete#Complete 4340962ec9SBram Moolenaarendif 44a40ceaf8SBram Moolenaar 45071d4279SBram Moolenaarset wildignore+=*.pyc 46071d4279SBram Moolenaar 47dc083288SBram Moolenaarlet b:next_toplevel='\v%$\|^(class\|def\|async def)>' 48dc083288SBram Moolenaarlet b:prev_toplevel='\v^(class\|def\|async def)>' 4901164a65SBram Moolenaarlet b:next_endtoplevel='\v%$\|\S.*\n+(def\|class)' 5001164a65SBram Moolenaarlet b:prev_endtoplevel='\v\S.*\n+(def\|class)' 51dc083288SBram Moolenaarlet b:next='\v%$\|^\s*(class\|def\|async def)>' 52dc083288SBram Moolenaarlet b:prev='\v^\s*(class\|def\|async def)>' 537f2e9d7cSBram Moolenaarlet b:next_end='\v\S\n*(%$\|^(\s*\n*)*(class\|def\|async def)\|^\S)' 547f2e9d7cSBram Moolenaarlet b:prev_end='\v\S\n*(^(\s*\n*)*(class\|def\|async def)\|^\S)' 55e18dbe86SBram Moolenaar 56abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W')<cr>" 57abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb')<cr>" 5801164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', 0)<cr>" 5901164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". b:prev_endtoplevel."', 'Wb', 0)<cr>" 60abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> ]m :call <SID>Python_jump('n', '". b:next."', 'W')<cr>" 61abd468edSBram Moolenaarexecute "nnoremap <silent> <buffer> [m :call <SID>Python_jump('n', '". b:prev."', 'Wb')<cr>" 6201164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> ]M :call <SID>Python_jump('n', '". b:next_end."', 'W', 0)<cr>" 6301164a65SBram Moolenaarexecute "nnoremap <silent> <buffer> [M :call <SID>Python_jump('n', '". b:prev_end."', 'Wb', 0)<cr>" 64abd468edSBram Moolenaar 65abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]] :call <SID>Python_jump('o', '". b:next_toplevel."', 'W')<cr>" 66abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [[ :call <SID>Python_jump('o', '". b:prev_toplevel."', 'Wb')<cr>" 677f2e9d7cSBram Moolenaarexecute "onoremap <silent> <buffer> ][ :call <SID>Python_jump('o', '". b:next_endtoplevel."', 'W', 0)<cr>" 687f2e9d7cSBram Moolenaarexecute "onoremap <silent> <buffer> [] :call <SID>Python_jump('o', '". b:prev_endtoplevel."', 'Wb', 0)<cr>" 69abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> ]m :call <SID>Python_jump('o', '". b:next."', 'W')<cr>" 70abd468edSBram Moolenaarexecute "onoremap <silent> <buffer> [m :call <SID>Python_jump('o', '". b:prev."', 'Wb')<cr>" 7101164a65SBram Moolenaarexecute "onoremap <silent> <buffer> ]M :call <SID>Python_jump('o', '". b:next_end."', 'W', 0)<cr>" 7201164a65SBram Moolenaarexecute "onoremap <silent> <buffer> [M :call <SID>Python_jump('o', '". b:prev_end."', 'Wb', 0)<cr>" 73abd468edSBram Moolenaar 74abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]] :call <SID>Python_jump('x', '". b:next_toplevel."', 'W')<cr>" 75abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [[ :call <SID>Python_jump('x', '". b:prev_toplevel."', 'Wb')<cr>" 767f2e9d7cSBram Moolenaarexecute "xnoremap <silent> <buffer> ][ :call <SID>Python_jump('x', '". b:next_endtoplevel."', 'W', 0)<cr>" 777f2e9d7cSBram Moolenaarexecute "xnoremap <silent> <buffer> [] :call <SID>Python_jump('x', '". b:prev_endtoplevel."', 'Wb', 0)<cr>" 78abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> ]m :call <SID>Python_jump('x', '". b:next."', 'W')<cr>" 79abd468edSBram Moolenaarexecute "xnoremap <silent> <buffer> [m :call <SID>Python_jump('x', '". b:prev."', 'Wb')<cr>" 8001164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> ]M :call <SID>Python_jump('x', '". b:next_end."', 'W', 0)<cr>" 8101164a65SBram Moolenaarexecute "xnoremap <silent> <buffer> [M :call <SID>Python_jump('x', '". b:prev_end."', 'Wb', 0)<cr>" 82071d4279SBram Moolenaar 8336782084SBram Moolenaarif !exists('*<SID>Python_jump') 8401164a65SBram Moolenaar fun! <SID>Python_jump(mode, motion, flags, ...) range 8501164a65SBram Moolenaar let l:startofline = (a:0 >= 1) ? a:1 : 1 8601164a65SBram Moolenaar 87e18dbe86SBram Moolenaar if a:mode == 'x' 88e18dbe86SBram Moolenaar normal! gv 89e18dbe86SBram Moolenaar endif 90e18dbe86SBram Moolenaar 9101164a65SBram Moolenaar if l:startofline == 1 92e18dbe86SBram Moolenaar normal! 0 9301164a65SBram Moolenaar endif 94e18dbe86SBram Moolenaar 95071d4279SBram Moolenaar let cnt = v:count1 96071d4279SBram Moolenaar mark ' 97071d4279SBram Moolenaar while cnt > 0 98e18dbe86SBram Moolenaar call search(a:motion, a:flags) 99071d4279SBram Moolenaar let cnt = cnt - 1 100071d4279SBram Moolenaar endwhile 101e18dbe86SBram Moolenaar 10201164a65SBram Moolenaar if l:startofline == 1 103e18dbe86SBram Moolenaar normal! ^ 10401164a65SBram Moolenaar endif 105071d4279SBram Moolenaar endfun 10636782084SBram Moolenaarendif 107071d4279SBram Moolenaar 10836782084SBram Moolenaarif has("browsefilter") && !exists("b:browsefilter") 109071d4279SBram Moolenaar let b:browsefilter = "Python Files (*.py)\t*.py\n" . 110071d4279SBram Moolenaar \ "All Files (*.*)\t*.*\n" 111071d4279SBram Moolenaarendif 1129a7224b5SBram Moolenaar 113abd468edSBram Moolenaarif !exists("g:python_recommended_style") || g:python_recommended_style != 0 114b1332080SBram Moolenaar " As suggested by PEP8. 115b1332080SBram Moolenaar setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8 116abd468edSBram Moolenaarendif 117b1332080SBram Moolenaar 118b1332080SBram Moolenaar" First time: try finding "pydoc". 119b1332080SBram Moolenaarif !exists('g:pydoc_executable') 120b1332080SBram Moolenaar if executable('pydoc') 121b1332080SBram Moolenaar let g:pydoc_executable = 1 122b1332080SBram Moolenaar else 123b1332080SBram Moolenaar let g:pydoc_executable = 0 124b1332080SBram Moolenaar endif 125b1332080SBram Moolenaarendif 126b1332080SBram Moolenaar" If "pydoc" was found use it for keywordprg. 127b1332080SBram Moolenaarif g:pydoc_executable 128b1332080SBram Moolenaar setlocal keywordprg=pydoc 129b1332080SBram Moolenaarendif 130b1332080SBram Moolenaar 1319a7224b5SBram Moolenaarlet &cpo = s:keepcpo 1329a7224b5SBram Moolenaarunlet s:keepcpo 133