1
0
mirror of https://github.com/gryf/python.vim.git synced 2025-12-17 11:30:22 +01:00

4 Commits
1.3 ... 1.7

Author SHA1 Message Date
Mikael Berthe
7a5bb2412f Version 1.7: Use <Down> instead of 'j', so it should work when j is mapped. -
Mikael Berthe
dc9722e464 Version 1.6: Works better with folding... Many thanks to Guy L. Oliver! -
Mikael Berthe
414dc1c5c0 Version 1.5
Same as 1.4, I just fixed a typo in the comments and my e-mail address...
-
Mikael Berthe
5f50c785a7 Version 1.4
Entry for Adam's IM-Python menu update in the main script menu; some other minor changes...
-

View File

@@ -1,12 +1,12 @@
" -*- vim -*-
" FILE: python.vim
" LAST MODIFICATION: 2001/07/07
" (C) Copyright 2001 Mikael Berthe <mikael.berthe@efrei.fr>
" Version: 1.1
" LAST MODIFICATION: 2003/07/25 19:00
" (C) Copyright 2001-2003 Mikael Berthe <mikael.b@netcourrier.com>
" Version: 1.7
" USAGE:
"
" Juste source this script when editing Python files.
" Just source this script when editing Python files.
" Example: au FileType python source ~me/.vim/scripts/python.vim
" You can set the global variable "g:py_select_leading_comments" to 0
" if you don't want to select comments preceding a declaration (these
@@ -20,7 +20,7 @@
" shift commands...
"
" REQUIREMENTS:
" vim (>= 600)
" vim (>= 6)
"
" Shortcuts:
" [[ -- Jump to beginning of block
@@ -55,11 +55,14 @@ map ]<down> :call PythonNextLine(1)<CR>
" Menu entries
nmenu <silent> &Python.Update\ IM-Python\ Menu
\:call UpdateMenu()<CR>
nmenu &Python.-Sep1- :
nmenu <silent> &Python.Beginning\ of\ Block<Tab>[[
\[[
nmenu <silent> &Python.End\ of\ Block<Tab>]]
\]]
nmenu &Python.-Sep1- :
nmenu &Python.-Sep2- :
nmenu <silent> &Python.Shift\ Block\ Left<Tab>]<
\]<
vmenu <silent> &Python.Shift\ Block\ Left<Tab>]<
@@ -68,7 +71,7 @@ nmenu <silent> &Python.Shift\ Block\ Right<Tab>]>
\]>
vmenu <silent> &Python.Shift\ Block\ Right<Tab>]>
\]>
nmenu &Python.-Sep2- :
nmenu &Python.-Sep3- :
vmenu <silent> &Python.Comment\ Selection
\:call PythonCommentSelection()<CR>
nmenu <silent> &Python.Comment\ Selection
@@ -77,7 +80,7 @@ vmenu <silent> &Python.Uncomment\ Selection
\:call PythonUncommentSelection()<CR>
nmenu <silent> &Python.Uncomment\ Selection
\:call PythonUncommentSelection()<CR>
nmenu &Python.-Sep3- :
nmenu &Python.-Sep4- :
nmenu <silent> &Python.Previous\ Class
\:call PythonDec("class", -1)<CR>
nmenu <silent> &Python.Next\ Class
@@ -86,14 +89,14 @@ nmenu <silent> &Python.Previous\ Function
\:call PythonDec("function", -1)<CR>
nmenu <silent> &Python.Next\ Function
\:call PythonDec("function", 1)<CR>
nmenu &Python.-Sep4- :
nmenu &Python.-Sep5- :
nmenu <silent> &Python.Select\ Block<Tab>]v
\]v
nmenu <silent> &Python.Select\ Function<Tab>]f
\]f
nmenu <silent> &Python.Select\ Class<Tab>]c
\]c
nmenu &Python.-Sep5- :
nmenu &Python.-Sep6- :
nmenu <silent> &Python.Previous\ Line\ wrt\ indent<Tab>]<up>
\]<up>
nmenu <silent> &Python.Next\ Line\ wrt\ indent<Tab>]<down>
@@ -102,7 +105,7 @@ nmenu <silent> &Python.Next\ Line\ wrt\ indent<Tab>]<down>
:com! PBoB execute "normal ".PythonBoB(line('.'), -1, 1)."G"
:com! PEoB execute "normal ".PythonBoB(line('.'), 1, 1)."G"
:com! UpdateMenu call UpdateMenu()
" Go to a block boundary (-1: previous, 1: next)
@@ -188,7 +191,7 @@ function! PythonCommentSelection() range
if strlen(getline(cl))
execute "normal ".ind."|i".commentString
endif
execute "normal j"
execute "normal \<Down>"
let cl = cl + 1
endwhile
endfunction
@@ -244,7 +247,7 @@ function! PythonSelectObject(obj)
execute "normal V".cl."G"
else
" Select the whole block
normal j
execute "normal \<Down>"
let cl = line('.')
execute ":".beg
execute "normal V".PythonBoB(cl, 1, 0)."G"
@@ -276,22 +279,27 @@ function! PythonNextLine(direction)
execute "normal ".ln."G"
endfunction
" update the IM-Python menu, that holds Classes and Functions
" Update the IM-Python menu, that holds Classes and Functions
function! UpdateMenu()
let restore_fe = &foldenable
set nofoldenable
let cline=line('.')
call MakeClassStructure ()
call MakeFuncStructure ()
execute "normal ".cline."Gzz"
let &foldenable = restore_fe
endfunction
command UpdateMenu call UpdateMenu ()
" make a menu that holds all of the classes
" Make a menu that holds all of the classes
function! MakeClassStructure ()
norm mpgg0
while line(".") <= line("$")
if match ( getline("."), '^\s*class\s\+' ) != -1
norm ^w"nyw
let name=@n
exe 'menu IM-Python.classes.'.name.' '.line(".").'gg'
"exe 'menu IM-Python.classes.'.name.' '.line(".").'gg15zo'
exe 'menu IM-Python.classes.'.name.' :call <SID>JumpToAndUnfold('.line(".").')<CR>'
endif
if line(".") == line("$")
return
@@ -301,14 +309,15 @@ function! MakeClassStructure ()
norm 'p
endfunction
"make a menu that holds all of the function deffinitions
" Make a menu that holds all of the function definitions
function! MakeFuncStructure ()
norm mpgg0
while line(".") <= line("$")
if match ( getline("."), '^\s*def\s\+' ) != -1
norm ^w"nyw
let name=@n
exe 'menu IM-Python.functions.'.name.' '.line(".").'gg'
"exe 'menu IM-Python.functions.'.name.' '.line(".").'gg15zo'
exe 'menu IM-Python.functions.'.name.' :call <SID>JumpToAndUnfold('.line(".").')<CR>'
endif
if line(".") == line("$")
return
@@ -318,6 +327,26 @@ function! MakeFuncStructure ()
norm 'p
endfunction
function! s:JumpToAndUnfold(line)
" Go to the right line
execute 'normal '.a:line.'gg'
" Check to see if we are in a fold
let lvl = foldlevel(a:line)
if lvl != 0
" and if so, then expand the fold out, other wise, ignore this part.
execute 'normal 15zo'
endif
endfunction
"" This one will work only on vim 6.2 because of the try/catch expressions.
" function! s:JumpToAndUnfoldWithExceptions(line)
" try
" execute 'normal '.a:line.'gg15zo'
" catch /^Vim\((\a\+)\)\=:E490:/
" " Do nothing, just consume the error
" endtry
"endfunction
" vim:set et sts=2 sw=2: