No OneTemporary

File Metadata

Created
Thu, May 2, 1:40 PM
This document is not UTF8. It was detected as Shift JIS and converted to UTF8 for display.
Index: trunk/kdesdk/scripts/kde-devel-vim.vim
===================================================================
--- trunk/kdesdk/scripts/kde-devel-vim.vim (revision 199416)
+++ trunk/kdesdk/scripts/kde-devel-vim.vim (revision 199417)
@@ -1,238 +1,398 @@
" To use this file, add this line to your ~/.vimrc:, w/o the dquote
" source /path/to/kde/sources/kdesdk/scripts/kde-devel-vim.vim
"
" For CreateChangeLogEntry() : If you don't want to re-enter your
" Name/Email in each vim session then make sure to have the viminfo
" option enabled in your ~/.vimrc, with the '!' flag, enabling persistent
" storage of global variables. Something along the line of
" set viminfo=%,!,'50,\"100,:100,n~/.viminfo
" should do the trick.
" Don't include these in filename completions
set suffixes+=.lo,.o,.moc,.la,.closure,.loT
" Search for headers here
set path=.,/usr/include,/usr/local/include,
if $QTDIR != ''
- let &path = &path . $QTDIR . '/include/,'
+ let &path = &path . $QTDIR . '/include/,'
endif
if $KDEDIR != ''
- let &path = &path . $KDEDIR . '/include/,'
+ let &path = &path . $KDEDIR . '/include/,'
endif
if $KDEDIRS != ''
- let &path = &path . substitute( $KDEDIRS, '\(:\|$\)', '/include,', 'g' )
+ let &path = &path . substitute( $KDEDIRS, '\(:\|$\)', '/include,', 'g' )
endif
set path+=,
" Use makeobj to build
set mp=makeobj
" Insert tab character in whitespace-only lines, complete otherwise
inoremap <Tab> <C-R>=SmartTab()<CR>
" Insert a space after ( or [ and before ] or ) unless preceded by a matching
" paren/bracket or space or inside a string or comment. Comments are only
" recognized as such if they start on the current line :-(
inoremap ( <C-R>=SmartParens( '(' )<CR>
inoremap [ <C-R>=SmartParens( '[' )<CR>
inoremap ] <C-R>=SmartParens( ']', '[' )<CR>
inoremap ) <C-R>=SmartParens( ')', '(' )<CR>
+" Insert an #include statement for the current/last symbol
+inoremap <F5> <C-O>:call AddHeader()<CR>
+
+" Insert a forward declaration for the current/last symbol
+" FIXME: not implemented yet
+" inoremap <S-F5> <C-O>:call AddForward()<CR>
+
" Switch between header and implementation files on ,h
nmap <silent> ,h :call SwitchHeaderImpl()<CR>
" Comment selected lines on ,c in visual mode
vmap ,c :s,^,//X ,<CR>
" Uncomment selected lines on ,u in visual mode
vmap ,u :s,^//X ,,<CR>
" Insert an include guard based on the file name on ,i
nmap ,i :call IncludeGuard()<CR>o
" Insert simple debug statements into each method
nmap ,d :call InsertMethodTracer()<CR>
" Expand #i to #include <.h> or #include ".h". The latter is chosen
" if the character typed after #i is a dquote
" If the character is > #include <> is inserted (standard C++ headers w/o .h)
iab #i <C-R>=SmartInclude()<CR>
" Insert a stripped down CVS diff
iab DIFF <Esc>:call RunDiff()<CR>
" mark 'misplaced' tab characters
set listchars=tab:キ\ ,trail:キ
set list
set incsearch
function! SmartTab()
- if strpart( getline( '.' ), 0, col( '.' ) - 1 ) =~ '^\s*$'
- return "\<Tab>"
- else
- return "\<C-N>"
- endif
+ if strpart( getline( '.' ), 0, col( '.' ) - 1 ) =~ '^\s*$'
+ return "\<Tab>"
+ else
+ return "\<C-N>"
+ endif
endfunction
function! SmartParens( char, ... )
- if ! ( &syntax =~ '^\(c\|cpp\|java\)$' )
- return a:char
- endif
- let s = strpart( getline( '.' ), 0, col( '.' ) - 1 )
- if s =~ '//'
- return a:char
- endif
- let s = substitute( s, '/\*\([^*]\|\*\@!/\)*\*/', '', 'g' )
- let s = substitute( s, "'[^']*'", '', 'g' )
- let s = substitute( s, '"\(\\"\|[^"]\)*"', '', 'g' )
- if s =~ "\\([\"']\\|/\\*\\)"
- return a:char
- endif
- if a:0 > 0
- if strpart( getline( '.' ), col( '.' ) - 3, 2 ) == a:1 . ' '
- return "\<BS>" . a:char
- endif
- if strpart( getline( '.' ), col( '.' ) - 2, 1 ) == ' '
- return a:char
- endif
- return ' ' . a:char
- endif
- return a:char . ' '
+ if ! ( &syntax =~ '^\(c\|cpp\|java\)$' )
+ return a:char
+ endif
+ let s = strpart( getline( '.' ), 0, col( '.' ) - 1 )
+ if s =~ '//'
+ return a:char
+ endif
+ let s = substitute( s, '/\*\([^*]\|\*\@!/\)*\*/', '', 'g' )
+ let s = substitute( s, "'[^']*'", '', 'g' )
+ let s = substitute( s, '"\(\\"\|[^"]\)*"', '', 'g' )
+ if s =~ "\\([\"']\\|/\\*\\)"
+ return a:char
+ endif
+ if a:0 > 0
+ if strpart( getline( '.' ), col( '.' ) - 3, 2 ) == a:1 . ' '
+ return "\<BS>" . a:char
+ endif
+ if strpart( getline( '.' ), col( '.' ) - 2, 1 ) == ' '
+ return a:char
+ endif
+ return ' ' . a:char
+ endif
+ if a:char == '('
+ if strpart( getline( '.' ), col( '.' ) - 3, 2 ) == 'if' ||
+ \strpart( getline( '.' ), col( '.' ) - 4, 3 ) == 'for' ||
+ \strpart( getline( '.' ), col( '.' ) - 6, 5 ) == 'while' ||
+ \strpart( getline( '.' ), col( '.' ) - 7, 6 ) == 'switch'
+ return ' ( '
+ endif
+ endif
+ return a:char . ' '
endfunction
function! SwitchHeaderImpl()
- let fn = expand( '%' )
- if fn =~ '\.\(cpp\|cc\|C\|c\)$'
- let fn = substitute( fn, '\.\(cpp\|cc\|C\|c\)$', '.h', '' )
- execute( "edit ".fn )
- elseif fn =~ '\.h$'
- let fn = substitute( fn, '\.h$', '.cpp', '' )
- if filereadable( fn )
- execute( "edit ".fn )
- return
- endif
- let fn = substitute( fn, '\.cpp$', '.C', '' )
- if filereadable( fn )
- execute( "edit ".fn )
- return
- endif
- let fn = substitute( fn, '\.C$', '.c', '' )
- if filereadable( fn )
- execute( "edit ".fn )
- return
- endif
- let tmp = substitute( fn, '\.c$', '.cc', '' )
- execute( "edit ".tmp )
- endif
+ let fn = expand( '%' )
+ if fn =~ '\.\(cpp\|cc\|C\|c\)$'
+ let fn = substitute( fn, '\.\(cpp\|cc\|C\|c\)$', '.h', '' )
+ execute( "edit ".fn )
+ elseif fn =~ '\.h$'
+ let fn = substitute( fn, '\.h$', '.cpp', '' )
+ if filereadable( fn )
+ execute( "edit ".fn )
+ return
+ endif
+ let fn = substitute( fn, '\.cpp$', '.C', '' )
+ if filereadable( fn )
+ execute( "edit ".fn )
+ return
+ endif
+ let fn = substitute( fn, '\.C$', '.c', '' )
+ if filereadable( fn )
+ execute( "edit ".fn )
+ return
+ endif
+ let tmp = substitute( fn, '\.c$', '.cc', '' )
+ execute( "edit ".tmp )
+ endif
endfunction
function! IncludeGuard()
- let guard = toupper( substitute( expand( '%' ), '\([^.]*\)\.h', '\1_h', '' ) )
- call append( '^', '#define ' . guard )
- +
- call append( '^', '#ifndef ' . guard )
- call append( '$', '#endif // ' . guard )
- +
+ let guard = toupper( substitute( expand( '%' ), '\([^.]*\)\.h', '\1_h', '' ) )
+ call append( '^', '#define ' . guard )
+ +
+ call append( '^', '#ifndef ' . guard )
+ call append( '$', '#endif // ' . guard )
+ +
endfunction
function! SmartInclude()
- let next = nr2char( getchar( 0 ) )
- if next == '"'
- return "#include \".h\"\<Left>\<Left>\<Left>"
- endif
- if next == '>'
- return "#include <>\<Left>"
- endif
- return "#include <.h>\<Left>\<Left>\<Left>"
+ let next = nr2char( getchar( 0 ) )
+ if next == '"'
+ return "#include \".h\"\<Left>\<Left>\<Left>"
+ endif
+ if next == '>'
+ return "#include <>\<Left>"
+ endif
+ return "#include <.h>\<Left>\<Left>\<Left>"
+endfunction
+
+function! MapIdentHeader( ident )
+ " Qt stuff
+ if a:ident =~ 'Q.*Layout'
+ return '<qlayout.h>'
+ elseif a:ident == 'QListViewItem' ||
+ \a:ident == 'QCheckListItem' ||
+ \a:ident == 'QListViewItemIterator'
+ return '<qlistview.h>'
+ elseif a:ident == 'QIconViewItem' ||
+ \a:ident == 'QIconDragItem' ||
+ \a:ident == 'QIconDrag'
+ return '<qiconview.h>'
+ elseif a:ident =~ 'Q.*Drag' ||
+ \a:ident == 'QDragManager'
+ return '<qdragobject.h>'
+ elseif a:ident == 'QMimeSource' ||
+ \a:ident == 'QMimeSourceFactory' ||
+ \a:ident == 'QWindowsMime'
+ return '<qmime.h>'
+ elseif a:ident == 'QPtrListIterator'
+ return '<qptrlist.h>'
+ elseif a:ident =~ 'Q.*Event'
+ return '<qevent.h>'
+ elseif a:ident == 'QTime' ||
+ \a:ident == 'QDate'
+ return '<qdatetime.h>'
+ elseif a:ident == 'QTimeEdit' ||
+ \a:ident == 'QDateTimeEditBase' ||
+ \a:ident == 'QDateEdit'
+ return '<qdatetimeedit.h>'
+ elseif a:ident == 'QByteArray'
+ return '<qcstring.h>'
+ elseif a:ident == 'QWidgetListIt'
+ return '<qwidgetlist.h>'
+ elseif a:ident == 'QTab'
+ return '<qtabbar.h>'
+ elseif a:ident == 'QColorGroup'
+ return '<qpalette.h>'
+ elseif a:ident == 'QActionGroup'
+ return '<qaction.h>'
+ elseif a:ident =~ 'Q.*Validator'
+ return '<qvalidator.h>'
+ elseif a:ident =~ 'QListBox.*'
+ return '<qlistbox.h>'
+ elseif a:ident == 'QChar' ||
+ \a:ident == 'QCharRef' ||
+ \a:ident == 'QConstString'
+ return '<qstring.h>'
+ elseif a:ident =~ 'QCanvas.*'
+ return '<qcanvas.h>'
+ elseif a:ident =~ 'QGL.*'
+ return '<qgl.h>'
+ elseif a:ident == 'QTableSelection' ||
+ \a:ident == 'QTableItem' ||
+ \a:ident == 'QComboTableItem' ||
+ \a:ident == 'QCheckTableItem'
+ return '<qtable.h>'
+ elseif a:ident == 'qApp'
+ return '<qapplication.h>'
+
+ " KDE stuff
+ elseif a:ident =~ 'kd\(Debug|Warning|Error|Fatal|Backtrace\)'
+ return '<kdebug.h>'
+ elseif a:ident == 'kapp'
+ return '<kapplication.h>'
+ elseif a:ident == 'i18n' ||
+ \a:ident == 'I18N_NOOP'
+ return '<klocale.h>'
+ elseif a:ident == 'locate' ||
+ \a:ident == 'locateLocal'
+ return '<kstandarddirs.h>'
+
+ " Standard Library stuff
+ elseif a:ident =~ '\(std::\)?\(cout|cerr|endl\)'
+ return '<iostream>'
+ elseif a:ident =~ '\(std::\)?is\(alnum|alpha|ascii|blank|graph|lower|print|punct|space|upper|xdigit\)'
+ return '<cctype>'
+ endif
+
+ let header = tolower( substitute( a:ident, '::', '/', 'g' ) ) . '.h'
+ let check = header
+ while 1
+ if filereadable( check )
+ return '"' . check '"'
+ endif
+ let slash = match( check, '/' )
+ if slash == -1
+ return '<' . header . '>'
+ endif
+ let check = strpart( check, slash + 1 )
+ endwhile
+endfunction
+
+" This is a rather dirty hack, but seems to work somehow :-) (malte)
+function! AddHeader()
+ let s = getline( '.' )
+ let i = col( '.' ) - 1
+ while i > 0 && strpart( s, i, 1 ) !~ '[A-Za-z0-9_:]'
+ let i = i - 1
+ endwhile
+ while i > 0 && strpart( s, i, 1 ) =~ '[A-Za-z0-9_:]'
+ let i = i - 1
+ endwhile
+ let ident = matchstr( s, '[A-Za-z0-9_]\+\(::[A-Za-z0-9_]\+\)*', i )
+ let include = '#include ' . MapIdentHeader( ident )
+
+ let line = 1
+ let incomment = 0
+ let appendpos = 0
+ let codestart = 0
+ while line <= line( '$' )
+ let s = getline( line )
+ if incomment == 1
+ let end = matchend( s, '\*/' )
+ if end == -1
+ let line = line + 1
+ continue
+ else
+ let s = strpart( s, end )
+ let incomment = 0
+ endif
+ endif
+ let s = substitute( s, '//.*', '', '' )
+ let s = substitute( s, '/\*\([^*]\|\*\@!/\)*\*/', '', 'g' )
+ if s =~ '/\*'
+ let incomment = 1
+ elseif s =~ '^' . include
+ break
+ elseif s =~ '^#include' && s !~ '\.moc"'
+ let appendpos = line
+ elseif codestart == 0 && s !~ '^$'
+ let codestart = line
+ endif
+ let line = line + 1
+ endwhile
+ if line == line( '$' ) + 1
+ if appendpos == 0
+ call append( codestart - 1, include )
+ call append( codestart, '' )
+ else
+ call append( appendpos, include )
+ endif
+ endif
endfunction
function! RunDiff()
- echo 'Diffing....'
- read! cvs diff -bB -I \\\#include | egrep -v '(^Index:|^=+$|^RCS file:|^retrieving revision|^diff -u|^[+-]{3})'
+ echo 'Diffing....'
+ read! cvs diff -bB -I \\\#include | egrep -v '(^Index:|^=+$|^RCS file:|^retrieving revision|^diff -u|^[+-]{3})'
endfunction
function! CreateChangeLogEntry()
let currentBuffer = expand( "%" )
if exists( "g:EMAIL" )
let mail = g:EMAIL
elseif exists( "$EMAIL" )
let mail = $EMAIL
else
let mail = inputdialog( "Enter Name/Email for Changelog entry: " )
- if mail == ""
- echo "Aborted ChangeLog edit..."
- return
- endif
- let g:EMAIL = mail
+ if mail == ""
+ echo "Aborted ChangeLog edit..."
+ return
+ endif
+ let g:EMAIL = mail
endif
if bufname( "ChangeLog" ) != "" && bufwinnr( bufname( "ChangeLog" ) ) != -1
- execute bufwinnr( bufname( "ChangeLog" ) ) . " wincmd w"
+ execute bufwinnr( bufname( "ChangeLog" ) ) . " wincmd w"
else
execute "split ChangeLog"
endif
let lastEntry = getline( nextnonblank( 1 ) )
let newEntry = strftime("%Y-%m-%d") . " " . mail
if lastEntry != newEntry
call append( 0, "" )
call append( 0, "" )
call append( 0, newEntry )
endif
" like emacs, prepend the current buffer name to the entry. but unlike
" emacs I have no idea how to figure out the current function name :(
" (Simon)
if currentBuffer != ""
let newLine = "\t* " . currentBuffer . ": "
else
let newLine = "\t* "
endif
call append( 2, newLine )
execute "normal 3G$"
endfunction
function! AddQtSyntax()
- if expand( "<amatch>" ) == "cpp"
- syn keyword qtKeywords signals slots emit
- syn keyword qtMacros Q_OBJECT Q_WIDGET Q_PROPERTY Q_ENUMS Q_OVERRIDE Q_CLASSINFO Q_SETS SIGNAL SLOT
- syn keyword qtCast qt_cast
- syn keyword kdeKeywords k_dcop k_dcop_signals
- syn keyword kdeMacros K_DCOP ASYNC
-
- hi def link qtKeywords Statement
- hi def link qtMacros Type
- hi def link qtCast Statement
- hi def link kdeKeywords Statement
- hi def link kdeMacros Type
- endif
+ if expand( "<amatch>" ) == "cpp"
+ syn keyword qtKeywords signals slots emit
+ syn keyword qtMacros Q_OBJECT Q_WIDGET Q_PROPERTY Q_ENUMS Q_OVERRIDE Q_CLASSINFO Q_SETS SIGNAL SLOT
+ syn keyword qtCast qt_cast
+ syn keyword kdeKeywords k_dcop k_dcop_signals
+ syn keyword kdeMacros K_DCOP ASYNC
+
+ hi def link qtKeywords Statement
+ hi def link qtMacros Type
+ hi def link qtCast Statement
+ hi def link kdeKeywords Statement
+ hi def link kdeMacros Type
+ endif
endfunction
function! InsertMethodTracer()
- :normal [[kf(yBjokdDebug() << ""()" << endl;
+ :normal [[kf(yBjokdDebug() << ""()" << endl;
endfunction
function! UpdateMocFiles()
- if &syntax == "cpp"
- let i = 1
- while i < 80
- let s = getline( i )
- if s =~ '^#include ".*\.moc"'
- let s = substitute( s, '.*"\(.*\)\.moc"', '\1.h', '' )
- if stridx( &complete, s ) == -1
- let &complete = &complete . ',k' . s
- endif
- break
- endif
- let i = i + 1
- endwhile
- endif
+ if &syntax == "cpp"
+ let i = 1
+ while i < 80
+ let s = getline( i )
+ if s =~ '^#include ".*\.moc"'
+ let s = substitute( s, '.*"\(.*\)\.moc"', '\1.h', '' )
+ if stridx( &complete, s ) == -1
+ let &complete = &complete . ',k' . s
+ endif
+ break
+ endif
+ let i = i + 1
+ endwhile
+ endif
endfunction
autocmd Syntax * call AddQtSyntax()
autocmd CursorHold * call UpdateMocFiles()