+ matchit.vim
+ matchit syntax für a2l blockdiff.vim: update (+ commands) git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@150 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
This commit is contained in:
parent
32d20899df
commit
6a1ca9231a
@ -11,3 +11,7 @@ let b:commentstring = '//'
|
|||||||
|
|
||||||
" Grep options
|
" Grep options
|
||||||
"let b:GrepFiles = '*.py'
|
"let b:GrepFiles = '*.py'
|
||||||
|
|
||||||
|
" matchit.vim
|
||||||
|
let b:match_words = '/begin\>:/end\>'
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@ endif
|
|||||||
|
|
||||||
function s:ReportRev(Rev)
|
function s:ReportRev(Rev)
|
||||||
if a:Rev >= '148'
|
if a:Rev >= '148'
|
||||||
|
echo 'Neu seit Rev: 148'
|
||||||
|
echo 'BlockDiff: Commands ergänzt'
|
||||||
|
echo 'Matchit: syntax für a2l'
|
||||||
elseif a:Rev >= '145'
|
elseif a:Rev >= '145'
|
||||||
echo 'Neu seit Rev: 145'
|
echo 'Neu seit Rev: 145'
|
||||||
echo 'BlockDiff: Markieren -> BlockDiff -> Markieren -> BlockDiff -> neuer Tab'
|
echo 'BlockDiff: Markieren -> BlockDiff -> Markieren -> BlockDiff -> neuer Tab'
|
||||||
|
@ -693,6 +693,25 @@ function FindDeclaration()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" indent a wordNum to position
|
" indent a wordNum to position
|
||||||
|
command -range -nargs=+ IndentWordNum call IndentWords(<f-args>, <line1>, <line2>)
|
||||||
|
" handle range
|
||||||
|
function IndentWords(wordNum, pos, fromline, toline)
|
||||||
|
let cursorLine = line(".")
|
||||||
|
let cursorCol = col(".")
|
||||||
|
if (a:fromline > 1)
|
||||||
|
call cursor(a:fromline-1, 255)
|
||||||
|
else
|
||||||
|
call cursor(a:fromline, 1)
|
||||||
|
endif
|
||||||
|
let line_nr = a:fromline
|
||||||
|
while (line_nr <= a:toline)
|
||||||
|
call cursor(line_nr, 1)
|
||||||
|
call IndentWordNum(a:wordNum, a:pos)
|
||||||
|
let line_nr = line_nr + 1
|
||||||
|
endwhile
|
||||||
|
call cursor(cursorLine, cursorCol)
|
||||||
|
endfunction
|
||||||
|
" handle one line
|
||||||
function IndentWordNum(wordNum, pos)
|
function IndentWordNum(wordNum, pos)
|
||||||
" store cursor postion
|
" store cursor postion
|
||||||
let cursorLine = line(".")
|
let cursorLine = line(".")
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
ScriptID SourceID Filename
|
ScriptID SourceID Filename
|
||||||
--------------------------
|
--------------------------
|
||||||
1075 7738 netrw.vim
|
1075 8042 netrw.vim
|
||||||
1502 7078 vimball.vim
|
1502 7078 vimball.vim
|
||||||
1008 3118 srec.vim (ftplugin)
|
1008 3118 srec.vim (ftplugin)
|
||||||
1009 3119 srec.vim (syntax file)
|
1009 3119 srec.vim (syntax file)
|
||||||
@ -22,7 +22,9 @@ ScriptID SourceID Filename
|
|||||||
1462 5612 dtd2xml
|
1462 5612 dtd2xml
|
||||||
1046 4249 Lusty Explorer
|
1046 4249 Lusty Explorer
|
||||||
2043 7805 VimPdb (debugging python)
|
2043 7805 VimPdb (debugging python)
|
||||||
1776 7810 Vimgrep Replace
|
1776 7902 Vimgrep Replace
|
||||||
2048 7815 BlockDiff
|
2048 7817 BlockDiff
|
||||||
|
39 7637 matchit.vim
|
||||||
|
2092 8041 reloaded.vim (matrix colorscheme)
|
||||||
642 7080 getscript.vim
|
642 7080 getscript.vim
|
||||||
642 7080 :AutoInstall: GetLatestVimScripts.vim
|
642 7080 :AutoInstall: GetLatestVimScripts.vim
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,199 +1,199 @@
|
|||||||
" netrwSettings.vim: makes netrw settings simpler
|
" netrwSettings.vim: makes netrw settings simpler
|
||||||
" Date: Jun 04, 2007
|
" Date: Jun 04, 2007
|
||||||
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
|
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
|
||||||
" Version: 11
|
" Version: 11
|
||||||
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
|
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
|
||||||
" Permission is hereby granted to use and distribute this code,
|
" Permission is hereby granted to use and distribute this code,
|
||||||
" with or without modifications, provided that this copyright
|
" with or without modifications, provided that this copyright
|
||||||
" notice is copied with it. Like anything else that's free,
|
" notice is copied with it. Like anything else that's free,
|
||||||
" netrwSettings.vim is provided *as is* and comes with no
|
" netrwSettings.vim is provided *as is* and comes with no
|
||||||
" warranty of any kind, either expressed or implied. By using
|
" warranty of any kind, either expressed or implied. By using
|
||||||
" this plugin, you agree that in no event will the copyright
|
" this plugin, you agree that in no event will the copyright
|
||||||
" holder be liable for any damages resulting from the use
|
" holder be liable for any damages resulting from the use
|
||||||
" of this software.
|
" of this software.
|
||||||
"
|
"
|
||||||
" Mat 4:23 (WEB) Jesus went about in all Galilee, teaching in their {{{1
|
" Mat 4:23 (WEB) Jesus went about in all Galilee, teaching in their {{{1
|
||||||
" synagogues, preaching the gospel of the kingdom, and healing
|
" synagogues, preaching the gospel of the kingdom, and healing
|
||||||
" every disease and every sickness among the people.
|
" every disease and every sickness among the people.
|
||||||
" Load Once: {{{1
|
" Load Once: {{{1
|
||||||
if exists("g:loaded_netrwSettings") || &cp
|
if exists("g:loaded_netrwSettings") || &cp
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let g:loaded_netrwSettings = "v11"
|
let g:loaded_netrwSettings = "v11"
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" NetrwSettings: {{{1
|
" NetrwSettings: {{{1
|
||||||
fun! netrwSettings#NetrwSettings()
|
fun! netrwSettings#NetrwSettings()
|
||||||
" this call is here largely just to insure that netrw has been loaded
|
" this call is here largely just to insure that netrw has been loaded
|
||||||
call netrw#NetrwSavePosn()
|
call netrw#NetrwSavePosn()
|
||||||
if !exists("g:loaded_netrw")
|
if !exists("g:loaded_netrw")
|
||||||
echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None
|
echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
above wincmd s
|
above wincmd s
|
||||||
enew
|
enew
|
||||||
setlocal noswapfile bh=wipe
|
setlocal noswapfile bh=wipe
|
||||||
set ft=vim
|
set ft=vim
|
||||||
file Netrw\ Settings
|
file Netrw\ Settings
|
||||||
|
|
||||||
" these variables have the following default effects when they don't
|
" these variables have the following default effects when they don't
|
||||||
" exist (ie. have not been set by the user in his/her .vimrc)
|
" exist (ie. have not been set by the user in his/her .vimrc)
|
||||||
if !exists("g:netrw_liststyle")
|
if !exists("g:netrw_liststyle")
|
||||||
let g:netrw_liststyle= 0
|
let g:netrw_liststyle= 0
|
||||||
let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
|
let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
|
||||||
endif
|
endif
|
||||||
if !exists("g:netrw_silent")
|
if !exists("g:netrw_silent")
|
||||||
let g:netrw_silent= 0
|
let g:netrw_silent= 0
|
||||||
endif
|
endif
|
||||||
if !exists("g:netrw_use_nt_rcp")
|
if !exists("g:netrw_use_nt_rcp")
|
||||||
let g:netrw_use_nt_rcp= 0
|
let g:netrw_use_nt_rcp= 0
|
||||||
endif
|
endif
|
||||||
if !exists("g:netrw_ftp")
|
if !exists("g:netrw_ftp")
|
||||||
let g:netrw_ftp= 0
|
let g:netrw_ftp= 0
|
||||||
endif
|
endif
|
||||||
if !exists("g:netrw_ignorenetrc")
|
if !exists("g:netrw_ignorenetrc")
|
||||||
let g:netrw_ignorenetrc= 0
|
let g:netrw_ignorenetrc= 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
put ='+ ---------------------------------------------'
|
put ='+ ---------------------------------------------'
|
||||||
put ='+ NetrwSettings: by Charles E. Campbell, Jr.'
|
put ='+ NetrwSettings: by Charles E. Campbell, Jr.'
|
||||||
put ='+ Press <F1> with cursor atop any line for help'
|
put ='+ Press <F1> with cursor atop any line for help'
|
||||||
put ='+ ---------------------------------------------'
|
put ='+ ---------------------------------------------'
|
||||||
let s:netrw_settings_stop= line(".")
|
let s:netrw_settings_stop= line(".")
|
||||||
|
|
||||||
put =''
|
put =''
|
||||||
put ='+ Netrw Protocol Commands'
|
put ='+ Netrw Protocol Commands'
|
||||||
put = 'let g:netrw_dav_cmd = '.g:netrw_dav_cmd
|
put = 'let g:netrw_dav_cmd = '.g:netrw_dav_cmd
|
||||||
put = 'let g:netrw_fetch_cmd = '.g:netrw_fetch_cmd
|
put = 'let g:netrw_fetch_cmd = '.g:netrw_fetch_cmd
|
||||||
put = 'let g:netrw_ftp_cmd = '.g:netrw_ftp_cmd
|
put = 'let g:netrw_ftp_cmd = '.g:netrw_ftp_cmd
|
||||||
put = 'let g:netrw_http_cmd = '.g:netrw_http_cmd
|
put = 'let g:netrw_http_cmd = '.g:netrw_http_cmd
|
||||||
put = 'let g:netrw_rcp_cmd = '.g:netrw_rcp_cmd
|
put = 'let g:netrw_rcp_cmd = '.g:netrw_rcp_cmd
|
||||||
put = 'let g:netrw_rsync_cmd = '.g:netrw_rsync_cmd
|
put = 'let g:netrw_rsync_cmd = '.g:netrw_rsync_cmd
|
||||||
put = 'let g:netrw_scp_cmd = '.g:netrw_scp_cmd
|
put = 'let g:netrw_scp_cmd = '.g:netrw_scp_cmd
|
||||||
put = 'let g:netrw_sftp_cmd = '.g:netrw_sftp_cmd
|
put = 'let g:netrw_sftp_cmd = '.g:netrw_sftp_cmd
|
||||||
put = 'let g:netrw_ssh_cmd = '.g:netrw_ssh_cmd
|
put = 'let g:netrw_ssh_cmd = '.g:netrw_ssh_cmd
|
||||||
let s:netrw_protocol_stop= line(".")
|
let s:netrw_protocol_stop= line(".")
|
||||||
put = ''
|
put = ''
|
||||||
|
|
||||||
put ='+Netrw Transfer Control'
|
put ='+Netrw Transfer Control'
|
||||||
put = 'let g:netrw_cygwin = '.g:netrw_cygwin
|
put = 'let g:netrw_cygwin = '.g:netrw_cygwin
|
||||||
put = 'let g:netrw_ftp = '.g:netrw_ftp
|
put = 'let g:netrw_ftp = '.g:netrw_ftp
|
||||||
put = 'let g:netrw_ftpmode = '.g:netrw_ftpmode
|
put = 'let g:netrw_ftpmode = '.g:netrw_ftpmode
|
||||||
put = 'let g:netrw_ignorenetrc = '.g:netrw_ignorenetrc
|
put = 'let g:netrw_ignorenetrc = '.g:netrw_ignorenetrc
|
||||||
put = 'let g:netrw_sshport = '.g:netrw_sshport
|
put = 'let g:netrw_sshport = '.g:netrw_sshport
|
||||||
let shqline= line("$")
|
let shqline= line("$")
|
||||||
put = 'let g:netrw_shq...'
|
put = 'let g:netrw_shq...'
|
||||||
put = 'let g:netrw_use_nt_rcp = '.g:netrw_use_nt_rcp
|
put = 'let g:netrw_use_nt_rcp = '.g:netrw_use_nt_rcp
|
||||||
put = 'let g:netrw_win95ftp = '.g:netrw_win95ftp
|
put = 'let g:netrw_win95ftp = '.g:netrw_win95ftp
|
||||||
let s:netrw_xfer_stop= line(".")
|
let s:netrw_xfer_stop= line(".")
|
||||||
put =''
|
put =''
|
||||||
put ='+ Netrw Messages'
|
put ='+ Netrw Messages'
|
||||||
put ='let g:netrw_use_errorwindow = '.g:netrw_use_errorwindow
|
put ='let g:netrw_use_errorwindow = '.g:netrw_use_errorwindow
|
||||||
|
|
||||||
put = ''
|
put = ''
|
||||||
put ='+ Netrw Browser Control'
|
put ='+ Netrw Browser Control'
|
||||||
put = 'let g:netrw_alto = '.g:netrw_alto
|
put = 'let g:netrw_alto = '.g:netrw_alto
|
||||||
put = 'let g:netrw_altv = '.g:netrw_altv
|
put = 'let g:netrw_altv = '.g:netrw_altv
|
||||||
put = 'let g:netrw_browse_split = '.g:netrw_browse_split
|
put = 'let g:netrw_browse_split = '.g:netrw_browse_split
|
||||||
if exists("g:netrw_browsex_viewer")
|
if exists("g:netrw_browsex_viewer")
|
||||||
put = 'let g:netrw_browsex_viewer = '.g:netrw_browsex_viewer
|
put = 'let g:netrw_browsex_viewer = '.g:netrw_browsex_viewer
|
||||||
else
|
else
|
||||||
put = 'let g:netrw_browsex_viewer = (not defined)'
|
put = 'let g:netrw_browsex_viewer = (not defined)'
|
||||||
endif
|
endif
|
||||||
let cdescline= line("$")
|
let cdescline= line("$")
|
||||||
put ='let g:netrw_cd_escape...'
|
put ='let g:netrw_cd_escape...'
|
||||||
put = 'let g:netrw_compress = '.g:netrw_compress
|
put = 'let g:netrw_compress = '.g:netrw_compress
|
||||||
let decompressline= line("$")
|
let decompressline= line("$")
|
||||||
put ='let g:netrw_decompress...'
|
put ='let g:netrw_decompress...'
|
||||||
put = 'let g:netrw_dirhistmax = '.g:netrw_dirhistmax
|
put = 'let g:netrw_dirhistmax = '.g:netrw_dirhistmax
|
||||||
put = 'let g:netrw_fastbrowse = '.g:netrw_fastbrowse
|
put = 'let g:netrw_fastbrowse = '.g:netrw_fastbrowse
|
||||||
put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
|
put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
|
||||||
put = 'let g:netrw_ftp_list_cmd = '.g:netrw_ftp_list_cmd
|
put = 'let g:netrw_ftp_list_cmd = '.g:netrw_ftp_list_cmd
|
||||||
put = 'let g:netrw_ftp_sizelist_cmd = '.g:netrw_ftp_sizelist_cmd
|
put = 'let g:netrw_ftp_sizelist_cmd = '.g:netrw_ftp_sizelist_cmd
|
||||||
put = 'let g:netrw_ftp_timelist_cmd = '.g:netrw_ftp_timelist_cmd
|
put = 'let g:netrw_ftp_timelist_cmd = '.g:netrw_ftp_timelist_cmd
|
||||||
put = 'let g:netrw_hide = '.g:netrw_hide
|
put = 'let g:netrw_hide = '.g:netrw_hide
|
||||||
put = 'let g:netrw_keepdir = '.g:netrw_keepdir
|
put = 'let g:netrw_keepdir = '.g:netrw_keepdir
|
||||||
put = 'let g:netrw_list_cmd = '.g:netrw_list_cmd
|
put = 'let g:netrw_list_cmd = '.g:netrw_list_cmd
|
||||||
put = 'let g:netrw_list_hide = '.g:netrw_list_hide
|
put = 'let g:netrw_list_hide = '.g:netrw_list_hide
|
||||||
put = 'let g:netrw_liststyle = '.g:netrw_liststyle
|
put = 'let g:netrw_liststyle = '.g:netrw_liststyle
|
||||||
put = 'let g:netrw_localcopycmd = '.g:netrw_localcopycmd
|
put = 'let g:netrw_localcopycmd = '.g:netrw_localcopycmd
|
||||||
put = 'let g:netrw_local_mkdir = '.g:netrw_local_mkdir
|
put = 'let g:netrw_local_mkdir = '.g:netrw_local_mkdir
|
||||||
put = 'let g:netrw_localmovecmd = '.g:netrw_localmovecmd
|
put = 'let g:netrw_localmovecmd = '.g:netrw_localmovecmd
|
||||||
put = 'let g:netrw_local_rmdir = '.g:netrw_local_rmdir
|
put = 'let g:netrw_local_rmdir = '.g:netrw_local_rmdir
|
||||||
put = 'let g:netrw_maxfilenamelen = '.g:netrw_maxfilenamelen
|
put = 'let g:netrw_maxfilenamelen = '.g:netrw_maxfilenamelen
|
||||||
put = 'let g:netrw_menu = '.g:netrw_menu
|
put = 'let g:netrw_menu = '.g:netrw_menu
|
||||||
put = 'let g:netrw_mkdir_cmd = '.g:netrw_mkdir_cmd
|
put = 'let g:netrw_mkdir_cmd = '.g:netrw_mkdir_cmd
|
||||||
put = 'let g:netrw_preview = '.g:netrw_preview
|
put = 'let g:netrw_preview = '.g:netrw_preview
|
||||||
put = 'let g:netrw_rename_cmd = '.g:netrw_rename_cmd
|
put = 'let g:netrw_rename_cmd = '.g:netrw_rename_cmd
|
||||||
put = 'let g:netrw_rm_cmd = '.g:netrw_rm_cmd
|
put = 'let g:netrw_rm_cmd = '.g:netrw_rm_cmd
|
||||||
put = 'let g:netrw_rmdir_cmd = '.g:netrw_rmdir_cmd
|
put = 'let g:netrw_rmdir_cmd = '.g:netrw_rmdir_cmd
|
||||||
put = 'let g:netrw_rmf_cmd = '.g:netrw_rmf_cmd
|
put = 'let g:netrw_rmf_cmd = '.g:netrw_rmf_cmd
|
||||||
put = 'let g:netrw_silent = '.g:netrw_silent
|
put = 'let g:netrw_silent = '.g:netrw_silent
|
||||||
put = 'let g:netrw_sort_by = '.g:netrw_sort_by
|
put = 'let g:netrw_sort_by = '.g:netrw_sort_by
|
||||||
put = 'let g:netrw_sort_direction = '.g:netrw_sort_direction
|
put = 'let g:netrw_sort_direction = '.g:netrw_sort_direction
|
||||||
put = 'let g:netrw_sort_sequence = '.g:netrw_sort_sequence
|
put = 'let g:netrw_sort_sequence = '.g:netrw_sort_sequence
|
||||||
put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
|
put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
|
||||||
put = 'let g:netrw_scpport = '.g:netrw_scpport
|
put = 'let g:netrw_scpport = '.g:netrw_scpport
|
||||||
put = 'let g:netrw_sshport = '.g:netrw_sshport
|
put = 'let g:netrw_sshport = '.g:netrw_sshport
|
||||||
put = 'let g:netrw_timefmt = '.g:netrw_timefmt
|
put = 'let g:netrw_timefmt = '.g:netrw_timefmt
|
||||||
put = 'let g:netrw_use_noswf = '.g:netrw_use_noswf
|
put = 'let g:netrw_use_noswf = '.g:netrw_use_noswf
|
||||||
put = 'let g:netrw_winsize = '.g:netrw_winsize
|
put = 'let g:netrw_winsize = '.g:netrw_winsize
|
||||||
|
|
||||||
put =''
|
put =''
|
||||||
put ='+ For help, place cursor on line and press <F1>'
|
put ='+ For help, place cursor on line and press <F1>'
|
||||||
|
|
||||||
1d
|
1d
|
||||||
silent %s/^+/"/e
|
silent %s/^+/"/e
|
||||||
res 99
|
res 99
|
||||||
silent %s/= \([^0-9].*\)$/= '\1'/e
|
silent %s/= \([^0-9].*\)$/= '\1'/e
|
||||||
silent %s/= $/= ''/e
|
silent %s/= $/= ''/e
|
||||||
1
|
1
|
||||||
|
|
||||||
" Put in g:netrw_shq setting and g:netrw_cd_escape
|
" Put in g:netrw_shq setting and g:netrw_cd_escape
|
||||||
" (deferred so as to avoid the quote manipulation just preceding)
|
" (deferred so as to avoid the quote manipulation just preceding)
|
||||||
if g:netrw_shq == "'"
|
if g:netrw_shq == "'"
|
||||||
call setline(shqline,'let g:netrw_shq = "'.g:netrw_shq.'"')
|
call setline(shqline,'let g:netrw_shq = "'.g:netrw_shq.'"')
|
||||||
else
|
else
|
||||||
call setline(shqline,"let g:netrw_shq = '".g:netrw_shq."'")
|
call setline(shqline,"let g:netrw_shq = '".g:netrw_shq."'")
|
||||||
endif
|
endif
|
||||||
call setline(cdescline,"let g:netrw_cd_escape = ".'"'.escape(g:netrw_cd_escape,'\"').'"')
|
call setline(cdescline,"let g:netrw_cd_escape = ".'"'.escape(g:netrw_cd_escape,'\"').'"')
|
||||||
call setline(decompressline,"let g:netrw_decompress = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1',''))
|
call setline(decompressline,"let g:netrw_decompress = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1',''))
|
||||||
|
|
||||||
set nomod
|
set nomod
|
||||||
|
|
||||||
nmap <buffer> <silent> <F1> :call NetrwSettingHelp()<cr>
|
nmap <buffer> <silent> <F1> :call NetrwSettingHelp()<cr>
|
||||||
nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call NetrwSettingHelp()<cr>
|
nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call NetrwSettingHelp()<cr>
|
||||||
let tmpfile= tempname()
|
let tmpfile= tempname()
|
||||||
exe 'au BufWriteCmd Netrw\ Settings silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
|
exe 'au BufWriteCmd Netrw\ Settings silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" NetrwSettingHelp: {{{2
|
" NetrwSettingHelp: {{{2
|
||||||
fun! NetrwSettingHelp()
|
fun! NetrwSettingHelp()
|
||||||
" call Dfunc("NetrwSettingHelp()")
|
" call Dfunc("NetrwSettingHelp()")
|
||||||
let curline = getline(".")
|
let curline = getline(".")
|
||||||
if curline =~ '='
|
if curline =~ '='
|
||||||
let varhelp = substitute(curline,'^\s*let ','','e')
|
let varhelp = substitute(curline,'^\s*let ','','e')
|
||||||
let varhelp = substitute(varhelp,'\s*=.*$','','e')
|
let varhelp = substitute(varhelp,'\s*=.*$','','e')
|
||||||
" call Decho("trying help ".varhelp)
|
" call Decho("trying help ".varhelp)
|
||||||
try
|
try
|
||||||
exe "he ".varhelp
|
exe "he ".varhelp
|
||||||
catch /^Vim\%((\a\+)\)\=:E149/
|
catch /^Vim\%((\a\+)\)\=:E149/
|
||||||
echo "***sorry*** no help available for <".varhelp.">"
|
echo "***sorry*** no help available for <".varhelp.">"
|
||||||
endtry
|
endtry
|
||||||
elseif line(".") < s:netrw_settings_stop
|
elseif line(".") < s:netrw_settings_stop
|
||||||
he netrw-settings
|
he netrw-settings
|
||||||
elseif line(".") < s:netrw_protocol_stop
|
elseif line(".") < s:netrw_protocol_stop
|
||||||
he netrw-externapp
|
he netrw-externapp
|
||||||
elseif line(".") < s:netrw_xfer_stop
|
elseif line(".") < s:netrw_xfer_stop
|
||||||
he netrw-variables
|
he netrw-variables
|
||||||
else
|
else
|
||||||
he netrw-browse-var
|
he netrw-browse-var
|
||||||
endif
|
endif
|
||||||
" call Dret("NetrwSettingHelp")
|
" call Dret("NetrwSettingHelp")
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" Modelines: {{{1
|
" Modelines: {{{1
|
||||||
" vim:ts=8 fdm=marker
|
" vim:ts=8 fdm=marker
|
||||||
|
66
vimfiles/colors/reloaded.vim
Normal file
66
vimfiles/colors/reloaded.vim
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
" Vim color file
|
||||||
|
" Maintainer: connorberry@yahoo.com
|
||||||
|
" Last Change:
|
||||||
|
" URL: www.narwhale.org
|
||||||
|
|
||||||
|
set background=dark "or light
|
||||||
|
hi clear
|
||||||
|
if exists("syntax_on")
|
||||||
|
syntax reset
|
||||||
|
endif
|
||||||
|
let g:colors_name="reloaded"
|
||||||
|
|
||||||
|
hi LineNr term=bold gui=bold guifg=White guibg=DarkGray
|
||||||
|
hi Normal ctermfg=Green ctermbg=Black
|
||||||
|
hi Normal guifg=Green guibg=Black
|
||||||
|
hi NonText ctermfg=DarkGray ctermbg=Black
|
||||||
|
hi NonText guifg=DarkGray guibg=Black
|
||||||
|
|
||||||
|
hi Statement ctermfg=Green ctermbg=Black
|
||||||
|
hi Statement guifg=Green guibg=Black
|
||||||
|
hi Comment ctermfg=DarkGreen ctermbg=Black cterm=bold term=bold
|
||||||
|
hi Comment guifg=DarkGreen guibg=Black gui=bold term=bold
|
||||||
|
hi Constant ctermfg=Black ctermbg=Green
|
||||||
|
hi Constant guifg=Black guibg=Green
|
||||||
|
hi Identifier ctermfg=Green ctermbg=Black
|
||||||
|
hi Identifier guifg=Green guibg=Black
|
||||||
|
hi Type ctermfg=Green ctermbg=Black
|
||||||
|
hi Type guifg=Green guibg=Black
|
||||||
|
hi String ctermfg=Green ctermbg=DarkGreen
|
||||||
|
hi String guifg=Green guibg=DarkGreen
|
||||||
|
hi Boolean ctermfg=Green ctermbg=DarkGreen
|
||||||
|
hi Boolean guifg=Green guibg=DarkGreen
|
||||||
|
hi Number ctermfg=Green ctermbg=DarkGreen
|
||||||
|
hi Number guifg=Green guibg=DarkGreen
|
||||||
|
hi Folded ctermfg=DarkYellow ctermbg=Black cterm=underline term=none
|
||||||
|
hi Folded guifg=DarkYellow guibg=Black gui=underline term=none
|
||||||
|
hi Special ctermfg=Black ctermbg=DarkGreen
|
||||||
|
hi Special guifg=Black guibg=DarkGreen
|
||||||
|
hi PreProc ctermfg=DarkGreen ctermbg=Black cterm=bold term=bold
|
||||||
|
hi PreProc guifg=DarkGreen guibg=Black gui=bold term=bold
|
||||||
|
hi Scrollbar ctermfg=DarkYellow ctermbg=Black
|
||||||
|
hi Scrollbar guifg=DarkYellow guibg=Black
|
||||||
|
hi Cursor ctermfg=Black ctermbg=Green
|
||||||
|
hi Cursor guifg=Black guibg=Green
|
||||||
|
hi ErrorMsg ctermfg=Red ctermbg=Black cterm=bold term=bold
|
||||||
|
hi ErrorMsg guifg=Red guibg=Black gui=bold term=bold
|
||||||
|
hi WarningMsg ctermfg=Yellow ctermbg=Black
|
||||||
|
hi WarningMsg guifg=Yellow guibg=Black
|
||||||
|
hi VertSplit ctermfg=White ctermbg=Black
|
||||||
|
hi VertSplit guifg=White guibg=Black
|
||||||
|
hi Directory ctermfg=Green ctermbg=DarkBlue
|
||||||
|
hi Directory guifg=Green guibg=DarkBlue
|
||||||
|
hi Visual ctermfg=White ctermbg=DarkGray cterm=underline term=none
|
||||||
|
hi Visual guifg=White guibg=DarkGray gui=underline term=none
|
||||||
|
hi Title ctermfg=White ctermbg=DarkBlue
|
||||||
|
hi Title guifg=White guibg=DarkBlue
|
||||||
|
|
||||||
|
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
|
||||||
|
hi StatusLine term=bold gui=bold,underline guifg=White guibg=Black
|
||||||
|
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
|
||||||
|
hi StatusLineNC term=bold gui=bold,underline guifg=Gray guibg=Black
|
||||||
|
hi LineNr term=bold cterm=bold ctermfg=White ctermbg=DarkGray
|
||||||
|
hi LineNr term=bold gui=bold guifg=White guibg=DarkGray
|
||||||
|
|
||||||
|
hi cursorline ctermbg=White
|
||||||
|
hi cursorline guibg=DarkGray
|
406
vimfiles/doc/matchit.txt
Normal file
406
vimfiles/doc/matchit.txt
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
*matchit.txt* Extended "%" matching
|
||||||
|
|
||||||
|
For instructions on installing this file, type
|
||||||
|
:help matchit-install
|
||||||
|
inside Vim.
|
||||||
|
|
||||||
|
For Vim version 6.3. Last change: 2007 Aug 29
|
||||||
|
|
||||||
|
|
||||||
|
VIM REFERENCE MANUAL by Benji Fisher
|
||||||
|
|
||||||
|
*matchit* *matchit.vim*
|
||||||
|
|
||||||
|
1. Extended matching with "%" |matchit-intro|
|
||||||
|
2. Activation |matchit-activate|
|
||||||
|
3. Configuration |matchit-configure|
|
||||||
|
4. Supporting a New Language |matchit-newlang|
|
||||||
|
5. Known Bugs and Limitations |matchit-bugs|
|
||||||
|
|
||||||
|
The functionality mentioned here is a plugin, see |add-plugin|.
|
||||||
|
This plugin is only available if 'compatible' is not set.
|
||||||
|
You can avoid loading this plugin by setting the "loaded_matchit" variable
|
||||||
|
in your |vimrc| file: >
|
||||||
|
:let loaded_matchit = 1
|
||||||
|
|
||||||
|
{Vi does not have any of this}
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
1. Extended matching with "%" *matchit-intro*
|
||||||
|
|
||||||
|
*matchit-%*
|
||||||
|
% Cycle forward through matching groups, such as "if", "else", "endif",
|
||||||
|
as specified by |b:match_words|.
|
||||||
|
|
||||||
|
*g%* *v_g%* *o_g%*
|
||||||
|
g% Cycle backwards through matching groups, as specified by
|
||||||
|
|b:match_words|. For example, go from "if" to "endif" to "else".
|
||||||
|
|
||||||
|
*[%* *v_[%* *o_[%*
|
||||||
|
[% Go to [count] previous unmatched group, as specified by
|
||||||
|
|b:match_words|. Similar to |[{|.
|
||||||
|
|
||||||
|
*]%* *v_]%* *o_]%*
|
||||||
|
]% Go to [count] next unmatched group, as specified by
|
||||||
|
|b:match_words|. Similar to |]}|.
|
||||||
|
|
||||||
|
*v_a%*
|
||||||
|
a% In Visual mode, select the matching group, as specified by
|
||||||
|
|b:match_words|, containing the cursor. Similar to |v_a[|.
|
||||||
|
A [count] is ignored, and only the first character of the closing
|
||||||
|
pattern is selected.
|
||||||
|
|
||||||
|
In Vim, as in plain vi, the percent key, |%|, jumps the cursor from a brace,
|
||||||
|
bracket, or paren to its match. This can be configured with the 'matchpairs'
|
||||||
|
option. The matchit plugin extends this in several ways:
|
||||||
|
|
||||||
|
You can match whole words, such as "if" and "endif", not just
|
||||||
|
single characters. You can also specify a |regular-expression|.
|
||||||
|
You can define groups with more than two words, such as "if",
|
||||||
|
"else", "endif". Banging on the "%" key will cycle from the "if" to
|
||||||
|
the first "else", the next "else", ..., the closing "endif", and back
|
||||||
|
to the opening "if". Nested structures are skipped. Using |g%| goes
|
||||||
|
in the reverse direction.
|
||||||
|
By default, words inside comments and strings are ignored, unless
|
||||||
|
the cursor is inside a comment or string when you type "%". If the
|
||||||
|
only thing you want to do is modify the behavior of "%" so that it
|
||||||
|
behaves this way, you do not have to define |b:match_words|, since the
|
||||||
|
script uses the 'matchpairs' option as well as this variable.
|
||||||
|
|
||||||
|
See |matchit-details| for details on what the script does, and |b:match_words|
|
||||||
|
for how to specify matching patterns.
|
||||||
|
|
||||||
|
MODES: *matchit-modes* *matchit-v_%* *matchit-o_%*
|
||||||
|
|
||||||
|
Mostly, % and related motions (|g%| and |[%| and |]%|) work just like built-in
|
||||||
|
|motion| commands in |Operator-pending| and |Visual| modes. However, you
|
||||||
|
cannot make these motions |linewise| or |characterwise|, since the |:omap|s
|
||||||
|
that define them start with "v" in order to make the default behavior
|
||||||
|
inclusive. (See |o_v|.) In other words, "dV%" will not work. The
|
||||||
|
work-around is to go through Visual mode: "V%d" will work.
|
||||||
|
|
||||||
|
LANGUAGES: *matchit-languages*
|
||||||
|
|
||||||
|
Currently, the following languages are supported: Ada, ASP with VBS, Csh,
|
||||||
|
DTD, Entity, Essbase, Fortran, HTML, JSP (same as HTML), LaTeX, Lua, Pascal,
|
||||||
|
SGML, Shell, Tcsh, Vim, XML. Other languages may already have support via
|
||||||
|
the default |filetype-plugin|s in the standard vim distribution.
|
||||||
|
|
||||||
|
To support a new language, see |matchit-newlang| below.
|
||||||
|
|
||||||
|
DETAILS: *matchit-details* *matchit-parse*
|
||||||
|
|
||||||
|
Here is an outline of what matchit.vim does each time you hit the "%" key. If
|
||||||
|
there are |backref|s in |b:match_words| then the first step is to produce a
|
||||||
|
version in which these back references have been eliminated; if there are no
|
||||||
|
|backref|s then this step is skipped. This step is called parsing. For
|
||||||
|
example, "\(foo\|bar\):end\1" is parsed to yield
|
||||||
|
"\(foo\|bar\):end\(foo\|bar\)". This can get tricky, especially if there are
|
||||||
|
nested groups. If debugging is turned on, the parsed version is saved as
|
||||||
|
|b:match_pat|.
|
||||||
|
|
||||||
|
*matchit-choose*
|
||||||
|
Next, the script looks for a word on the current line that matches the pattern
|
||||||
|
just constructed. It includes the patterns from the 'matchpairs' option.
|
||||||
|
The goal is to do what you expect, which turns out to be a little complicated.
|
||||||
|
The script follows these rules:
|
||||||
|
|
||||||
|
Insist on a match that ends on or after the cursor.
|
||||||
|
Prefer a match that includes the cursor position (that is, one that
|
||||||
|
starts on or before the cursor).
|
||||||
|
Prefer a match that starts as close to the cursor as possible.
|
||||||
|
If more than one pattern in |b:match_words| matches, choose the one
|
||||||
|
that is listed first.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
Suppose you >
|
||||||
|
:let b:match_words = '<:>,<tag>:</tag>'
|
||||||
|
< and hit "%" with the cursor on or before the "<" in "a <tag> is born".
|
||||||
|
The pattern '<' comes first, so it is preferred over '<tag>', which
|
||||||
|
also matches. If the cursor is on the "t", however, then '<tag>' is
|
||||||
|
preferred, because this matches a bit of text containing the cursor.
|
||||||
|
If the two groups of patterns were reversed then '<' would never be
|
||||||
|
preferred.
|
||||||
|
|
||||||
|
Suppose you >
|
||||||
|
:let b:match_words = 'if:end if'
|
||||||
|
< (Note the space!) and hit "%" with the cursor at the end of "end if".
|
||||||
|
Then "if" matches, which is probably not what you want, but if the
|
||||||
|
cursor starts on the "end " then "end if" is chosen. (You can avoid
|
||||||
|
this problem by using a more complicated pattern.)
|
||||||
|
|
||||||
|
If there is no match, the cursor does not move. (Before version 1.13 of the
|
||||||
|
script, it would fall back on the usual behavior of |%|). If debugging is
|
||||||
|
turned on, the matched bit of text is saved as |b:match_match| and the cursor
|
||||||
|
column of the start of the match is saved as |b:match_col|.
|
||||||
|
|
||||||
|
Next, the script looks through |b:match_words| (original and parsed versions)
|
||||||
|
for the group and pattern that match. If debugging is turned on, the group is
|
||||||
|
saved as |b:match_ini| (the first pattern) and |b:match_tail| (the rest). If
|
||||||
|
there are |backref|s then, in addition, the matching pattern is saved as
|
||||||
|
|b:match_word| and a table of translations is saved as |b:match_table|. If
|
||||||
|
there are |backref|s, these are determined from the matching pattern and
|
||||||
|
|b:match_match| and substituted into each pattern in the matching group.
|
||||||
|
|
||||||
|
The script decides whether to search forwards or backwards and chooses
|
||||||
|
arguments for the |searchpair()| function. Then, the cursor is moved to the
|
||||||
|
start of the match, and |searchpair()| is called. By default, matching
|
||||||
|
structures inside strings and comments are ignored. This can be changed by
|
||||||
|
setting |b:match_skip|.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
2. Activation *matchit-activate*
|
||||||
|
|
||||||
|
You can use this script as a plugin, by copying it to your plugin directory.
|
||||||
|
See |add-global-plugin| for instructions. You can also add a line to your
|
||||||
|
|vimrc| file, such as >
|
||||||
|
:source $VIMRUNTIME/macros/matchit.vim
|
||||||
|
or >
|
||||||
|
:runtime macros/matchit.vim
|
||||||
|
Either way, the script should start working the next time you start up Vim.
|
||||||
|
|
||||||
|
(Earlier versions of the script did nothing unless a |buffer-variable| named
|
||||||
|
|b:match_words| was defined. Even earlier versions contained autocommands
|
||||||
|
that set this variable for various file types. Now, |b:match_words| is
|
||||||
|
defined in many of the default |filetype-plugin|s instead.)
|
||||||
|
|
||||||
|
For a new language, you can add autocommands to the script or to your vimrc
|
||||||
|
file, but the recommended method is to add a line such as >
|
||||||
|
let b:match_words = '\<foo\>:\<bar\>'
|
||||||
|
to the |filetype-plugin| for your language. See |b:match_words| below for how
|
||||||
|
this variable is interpreted.
|
||||||
|
|
||||||
|
TROUBLESHOOTING *matchit-troubleshoot*
|
||||||
|
|
||||||
|
The script should work in most installations of Vim. It may not work if Vim
|
||||||
|
was compiled with a minimal feature set, for example if the |+syntax| option
|
||||||
|
was not enabled. If your Vim has support for syntax compiled in, but you do
|
||||||
|
not have |syntax| highlighting turned on, matchit.vim should work, but it may
|
||||||
|
fail to skip matching groups in comments and strings. If the |filetype|
|
||||||
|
mechanism is turned off, the |b:match_words| variable will probably not be
|
||||||
|
defined automatically.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
3. Configuration *matchit-configure*
|
||||||
|
|
||||||
|
There are several variables that govern the behavior of matchit.vim. Note
|
||||||
|
that these are variables local to the buffer, not options, so use |:let| to
|
||||||
|
define them, not |:set|. Some of these variables have values that matter; for
|
||||||
|
others, it only matters whether the variable has been defined. All of these
|
||||||
|
can be defined in the |filetype-plugin| or autocommand that defines
|
||||||
|
|b:match_words| or "on the fly."
|
||||||
|
|
||||||
|
The main variable is |b:match_words|. It is described in the section below on
|
||||||
|
supporting a new language.
|
||||||
|
|
||||||
|
*MatchError* *matchit-hl* *matchit-highlight*
|
||||||
|
MatchError is the highlight group for error messages from the script. By
|
||||||
|
default, it is linked to WarningMsg. If you do not want to be bothered by
|
||||||
|
error messages, you can define this to be something invisible. For example,
|
||||||
|
if you use the GUI version of Vim and your command line is normally white, you
|
||||||
|
can do >
|
||||||
|
:hi MatchError guifg=white guibg=white
|
||||||
|
<
|
||||||
|
*b:match_ignorecase*
|
||||||
|
If you >
|
||||||
|
:let b:match_ignorecase = 1
|
||||||
|
then matchit.vim acts as if 'ignorecase' is set: for example, "end" and "END"
|
||||||
|
are equivalent. If you >
|
||||||
|
:let b:match_ignorecase = 0
|
||||||
|
then matchit.vim treats "end" and "END" differently. (There will be no
|
||||||
|
b:match_infercase option unless someone requests it.)
|
||||||
|
|
||||||
|
*b:match_debug*
|
||||||
|
Define b:match_debug if you want debugging information to be saved. See
|
||||||
|
|matchit-debug|, below.
|
||||||
|
|
||||||
|
*b:match_skip*
|
||||||
|
If b:match_skip is defined, it is passed as the skip argument to
|
||||||
|
|searchpair()|. This controls when matching structures are skipped, or
|
||||||
|
ignored. By default, they are ignored inside comments and strings, as
|
||||||
|
determined by the |syntax| mechanism. (If syntax highlighting is turned off,
|
||||||
|
nothing is skipped.) You can set b:match_skip to a string, which evaluates to
|
||||||
|
a non-zero, numerical value if the match is to be skipped or zero if the match
|
||||||
|
should not be skipped. In addition, the following special values are
|
||||||
|
supported by matchit.vim:
|
||||||
|
s:foo becomes (current syntax item) =~ foo
|
||||||
|
S:foo becomes (current syntax item) !~ foo
|
||||||
|
r:foo becomes (line before cursor) =~ foo
|
||||||
|
R:foo becomes (line before cursor) !~ foo
|
||||||
|
(The "s" is meant to suggest "syntax", and the "r" is meant to suggest
|
||||||
|
"regular expression".)
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
You can get the default behavior with >
|
||||||
|
:let b:match_skip = 's:comment\|string'
|
||||||
|
<
|
||||||
|
If you want to skip matching structures unless they are at the start
|
||||||
|
of the line (ignoring whitespace) then you can >
|
||||||
|
:let b:match_skip = 'R:^\s*'
|
||||||
|
< Do not do this if strings or comments can span several lines, since
|
||||||
|
the normal syntax checking will not be done if you set b:match_skip.
|
||||||
|
|
||||||
|
In LaTeX, since "%" is used as the comment character, you can >
|
||||||
|
:let b:match_skip = 'r:%'
|
||||||
|
< Unfortunately, this will skip anything after "\%", an escaped "%". To
|
||||||
|
allow for this, and also "\\%" (an excaped backslash followed by the
|
||||||
|
comment character) you can >
|
||||||
|
:let b:match_skip = 'r:\(^\|[^\\]\)\(\\\\\)*%'
|
||||||
|
<
|
||||||
|
See the $VIMRUNTIME/ftplugin/vim.vim for an example that uses both
|
||||||
|
syntax and a regular expression.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
4. Supporting a New Language *matchit-newlang*
|
||||||
|
*b:match_words*
|
||||||
|
In order for matchit.vim to support a new language, you must define a suitable
|
||||||
|
pattern for |b:match_words|. You may also want to set some of the
|
||||||
|
|matchit-configure| variables, as described above. If your language has a
|
||||||
|
complicated syntax, or many keywords, you will need to know something about
|
||||||
|
Vim's |regular-expression|s.
|
||||||
|
|
||||||
|
The format for |b:match_words| is similar to that of the 'matchpairs' option:
|
||||||
|
it is a comma (,)-separated list of groups; each group is a colon(:)-separated
|
||||||
|
list of patterns (regular expressions). Commas and backslashes that are part
|
||||||
|
of a pattern should be escaped with backslashes ('\:' and '\,'). It is OK to
|
||||||
|
have only one group; the effect is undefined if a group has only one pattern.
|
||||||
|
A simple example is >
|
||||||
|
:let b:match_words = '\<if\>:\<endif\>,'
|
||||||
|
\ . '\<while\>:\<continue\>:\<break\>:\<endwhile\>'
|
||||||
|
(In Vim regular expressions, |\<| and |\>| denote word boundaries. Thus "if"
|
||||||
|
matches the end of "endif" but "\<if\>" does not.) Then banging on the "%"
|
||||||
|
key will bounce the cursor between "if" and the matching "endif"; and from
|
||||||
|
"while" to any matching "continue" or "break", then to the matching "endwhile"
|
||||||
|
and back to the "while". It is almost always easier to use |literal-string|s
|
||||||
|
(single quotes) as above: '\<if\>' rather than "\\<if\\>" and so on.
|
||||||
|
|
||||||
|
Exception: If the ":" character does not appear in b:match_words, then it is
|
||||||
|
treated as an expression to be evaluated. For example, >
|
||||||
|
:let b:match_words = 'GetMatchWords()'
|
||||||
|
allows you to define a function. This can return a different string depending
|
||||||
|
on the current syntax, for example.
|
||||||
|
|
||||||
|
Once you have defined the appropriate value of |b:match_words|, you will
|
||||||
|
probably want to have this set automatically each time you edit the
|
||||||
|
appropriate file type. The recommended way to do this is by adding the
|
||||||
|
definition to a |filetype-plugin| file.
|
||||||
|
|
||||||
|
Tips: Be careful that your initial pattern does not match your final pattern.
|
||||||
|
See the example above for the use of word-boundary expressions. It is usually
|
||||||
|
better to use ".\{-}" (as many as necessary) instead of ".*" (as many as
|
||||||
|
possible). See |\{-|. For example, in the string "<tag>label</tag>", "<.*>"
|
||||||
|
matches the whole string whereas "<.\{-}>" and "<[^>]*>" match "<tag>" and
|
||||||
|
"</tag>".
|
||||||
|
|
||||||
|
*matchit-spaces* *matchit-s:notend*
|
||||||
|
If "if" is to be paired with "end if" (Note the space!) then word boundaries
|
||||||
|
are not enough. Instead, define a regular expression s:notend that will match
|
||||||
|
anything but "end" and use it as follows: >
|
||||||
|
:let s:notend = '\%(\<end\s\+\)\@<!'
|
||||||
|
:let b:match_words = s:notend . '\<if\>:\<end\s\+if\>'
|
||||||
|
< *matchit-s:sol*
|
||||||
|
This is a simplified version of what is done for Ada. The s:notend is a
|
||||||
|
|script-variable|. Similarly, you may want to define a start-of-line regular
|
||||||
|
expression >
|
||||||
|
:let s:sol = '\%(^\|;\)\s*'
|
||||||
|
if keywords are only recognized after the start of a line or after a
|
||||||
|
semicolon (;), with optional white space.
|
||||||
|
|
||||||
|
*matchit-backref* *matchit-\1*
|
||||||
|
In any group, the expressions |\1|, |\2|, ..., |\9| refer to parts of the
|
||||||
|
INITIAL pattern enclosed in |\(|escaped parentheses|\)|. These are referred
|
||||||
|
to as back references, or backrefs. For example, >
|
||||||
|
:let b:match_words = '\<b\(o\+\)\>:\(h\)\1\>'
|
||||||
|
means that "bo" pairs with "ho" and "boo" pairs with "hoo" and so on. Note
|
||||||
|
that "\1" does not refer to the "\(h\)" in this example. If you have
|
||||||
|
"\(nested \(parentheses\)\) then "\d" refers to the d-th "\(" and everything
|
||||||
|
up to and including the matching "\)": in "\(nested\(parentheses\)\)", "\1"
|
||||||
|
refers to everything and "\2" refers to "\(parentheses\)". If you use a
|
||||||
|
variable such as |s:notend| or |s:sol| in the previous paragraph then remember
|
||||||
|
to count any "\(" patterns in this variable. You do not have to count groups
|
||||||
|
defined by |\%(\)|.
|
||||||
|
|
||||||
|
It should be possible to resolve back references from any pattern in the
|
||||||
|
group. For example, >
|
||||||
|
:let b:match_words = '\(foo\)\(bar\):more\1:and\2:end\1\2'
|
||||||
|
would not work because "\2" cannot be determined from "morefoo" and "\1"
|
||||||
|
cannot be determined from "andbar". On the other hand, >
|
||||||
|
:let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1'
|
||||||
|
should work (and have the same effect as "foobar:barfoo:endfoobar"), although
|
||||||
|
this has not been thoroughly tested.
|
||||||
|
|
||||||
|
You can use |zero-width| patterns such as |\@<=| and |\zs|. (The latter has
|
||||||
|
not been thouroughly tested in matchit.vim.) For example, if the keyword "if"
|
||||||
|
must occur at the start of the line, with optional white space, you might use
|
||||||
|
the pattern "\(^\s*\)\@<=if" so that the cursor will end on the "i" instead of
|
||||||
|
at the start of the line. For another example, if HTML had only one tag then
|
||||||
|
one could >
|
||||||
|
:let b:match_words = '<:>,<\@<=tag>:<\@<=/tag>'
|
||||||
|
so that "%" can bounce between matching "<" and ">" pairs or (starting on
|
||||||
|
"tag" or "/tag") between matching tags. Without the |\@<=|, the script would
|
||||||
|
bounce from "tag" to the "<" in "</tag>", and another "%" would not take you
|
||||||
|
back to where you started.
|
||||||
|
|
||||||
|
DEBUGGING *matchit-debug* *:MatchDebug*
|
||||||
|
|
||||||
|
If you are having trouble figuring out the appropriate definition of
|
||||||
|
|b:match_words| then you can take advantage of the same information I use when
|
||||||
|
debugging the script. This is especially true if you are not sure whether
|
||||||
|
your patterns or my script are at fault! To make this more convenient, I have
|
||||||
|
made the command :MatchDebug, which defines the variable |b:match_debug| and
|
||||||
|
creates a Matchit menu. This menu makes it convenient to check the values of
|
||||||
|
the variables described below. You will probably also want to read
|
||||||
|
|matchit-details| above.
|
||||||
|
|
||||||
|
Defining the variable |b:match_debug| causes the script to set the following
|
||||||
|
variables, each time you hit the "%" key. Several of these are only defined
|
||||||
|
if |b:match_words| includes |backref|s.
|
||||||
|
|
||||||
|
*b:match_pat*
|
||||||
|
The b:match_pat variable is set to |b:match_words| with |backref|s parsed.
|
||||||
|
*b:match_match*
|
||||||
|
The b:match_match variable is set to the bit of text that is recognized as a
|
||||||
|
match.
|
||||||
|
*b:match_col*
|
||||||
|
The b:match_col variable is set to the cursor column of the start of the
|
||||||
|
matching text.
|
||||||
|
*b:match_wholeBR*
|
||||||
|
The b:match_wholeBR variable is set to the comma-separated group of patterns
|
||||||
|
that matches, with |backref|s unparsed.
|
||||||
|
*b:match_iniBR*
|
||||||
|
The b:match_iniBR variable is set to the first pattern in |b:match_wholeBR|.
|
||||||
|
*b:match_ini*
|
||||||
|
The b:match_ini variable is set to the first pattern in |b:match_wholeBR|,
|
||||||
|
with |backref|s resolved from |b:match_match|.
|
||||||
|
*b:match_tail*
|
||||||
|
The b:match_tail variable is set to the remaining patterns in
|
||||||
|
|b:match_wholeBR|, with |backref|s resolved from |b:match_match|.
|
||||||
|
*b:match_word*
|
||||||
|
The b:match_word variable is set to the pattern from |b:match_wholeBR| that
|
||||||
|
matches |b:match_match|.
|
||||||
|
*b:match_table*
|
||||||
|
The back reference '\'.d refers to the same thing as '\'.b:match_table[d] in
|
||||||
|
|b:match_word|.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
5. Known Bugs and Limitations *matchit-bugs*
|
||||||
|
|
||||||
|
Just because I know about a bug does not mean that it is on my todo list. I
|
||||||
|
try to respond to reports of bugs that cause real problems. If it does not
|
||||||
|
cause serious problems, or if there is a work-around, a bug may sit there for
|
||||||
|
a while. Moral: if a bug (known or not) bothers you, let me know.
|
||||||
|
|
||||||
|
The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may
|
||||||
|
have undesired effects in Select mode |Select-mode-mapping|. At least, if you
|
||||||
|
want to replace the selection with any character in "ag%[]" there will be a
|
||||||
|
pause of |'updatetime'| first.
|
||||||
|
|
||||||
|
It would be nice if "\0" were recognized as the entire pattern. That is, it
|
||||||
|
would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1". I may
|
||||||
|
try to implement this in a future version. (This is not so easy to arrange as
|
||||||
|
you might think!)
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:fo=tcq2:
|
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,9 @@
|
|||||||
:LP LogiPat.txt /*:LP*
|
:LP LogiPat.txt /*:LP*
|
||||||
:LPF LogiPat.txt /*:LPF*
|
:LPF LogiPat.txt /*:LPF*
|
||||||
:LogiPat LogiPat.txt /*:LogiPat*
|
:LogiPat LogiPat.txt /*:LogiPat*
|
||||||
|
:MatchDebug matchit.txt /*:MatchDebug*
|
||||||
:MkVimball pi_vimball.txt /*:MkVimball*
|
:MkVimball pi_vimball.txt /*:MkVimball*
|
||||||
|
:NetrwClean pi_netrw.txt /*:NetrwClean*
|
||||||
:Nexplore pi_netrw.txt /*:Nexplore*
|
:Nexplore pi_netrw.txt /*:Nexplore*
|
||||||
:Pexplore pi_netrw.txt /*:Pexplore*
|
:Pexplore pi_netrw.txt /*:Pexplore*
|
||||||
:Rexplore pi_netrw.txt /*:Rexplore*
|
:Rexplore pi_netrw.txt /*:Rexplore*
|
||||||
@ -40,11 +42,27 @@ IX visincr.txt /*IX*
|
|||||||
IYMD visincr.txt /*IYMD*
|
IYMD visincr.txt /*IYMD*
|
||||||
LogiPat() LogiPat.txt /*LogiPat()*
|
LogiPat() LogiPat.txt /*LogiPat()*
|
||||||
LogiPat-flags LogiPat.txt /*LogiPat-flags*
|
LogiPat-flags LogiPat.txt /*LogiPat-flags*
|
||||||
|
MatchError matchit.txt /*MatchError*
|
||||||
Nread pi_netrw.txt /*Nread*
|
Nread pi_netrw.txt /*Nread*
|
||||||
Nsource pi_netrw.txt /*Nsource*
|
Nsource pi_netrw.txt /*Nsource*
|
||||||
Nwrite pi_netrw.txt /*Nwrite*
|
Nwrite pi_netrw.txt /*Nwrite*
|
||||||
TCommentDefineType() tComment.txt /*TCommentDefineType()*
|
TCommentDefineType() tComment.txt /*TCommentDefineType()*
|
||||||
Vimball-copyright pi_vimball.txt /*Vimball-copyright*
|
Vimball-copyright pi_vimball.txt /*Vimball-copyright*
|
||||||
|
[% matchit.txt /*[%*
|
||||||
|
]% matchit.txt /*]%*
|
||||||
|
b:match_col matchit.txt /*b:match_col*
|
||||||
|
b:match_debug matchit.txt /*b:match_debug*
|
||||||
|
b:match_ignorecase matchit.txt /*b:match_ignorecase*
|
||||||
|
b:match_ini matchit.txt /*b:match_ini*
|
||||||
|
b:match_iniBR matchit.txt /*b:match_iniBR*
|
||||||
|
b:match_match matchit.txt /*b:match_match*
|
||||||
|
b:match_pat matchit.txt /*b:match_pat*
|
||||||
|
b:match_skip matchit.txt /*b:match_skip*
|
||||||
|
b:match_table matchit.txt /*b:match_table*
|
||||||
|
b:match_tail matchit.txt /*b:match_tail*
|
||||||
|
b:match_wholeBR matchit.txt /*b:match_wholeBR*
|
||||||
|
b:match_word matchit.txt /*b:match_word*
|
||||||
|
b:match_words matchit.txt /*b:match_words*
|
||||||
b:netrw_lastfile pi_netrw.txt /*b:netrw_lastfile*
|
b:netrw_lastfile pi_netrw.txt /*b:netrw_lastfile*
|
||||||
crefvim crefvim.txt /*crefvim*
|
crefvim crefvim.txt /*crefvim*
|
||||||
crefvim.txt crefvim.txt /*crefvim.txt*
|
crefvim.txt crefvim.txt /*crefvim.txt*
|
||||||
@ -1279,6 +1297,7 @@ ex-visincr-IMDY visincr.txt /*ex-visincr-IMDY*
|
|||||||
ex-visincr-IYMD visincr.txt /*ex-visincr-IYMD*
|
ex-visincr-IYMD visincr.txt /*ex-visincr-IYMD*
|
||||||
fetch pi_netrw.txt /*fetch*
|
fetch pi_netrw.txt /*fetch*
|
||||||
ftp pi_netrw.txt /*ftp*
|
ftp pi_netrw.txt /*ftp*
|
||||||
|
g% matchit.txt /*g%*
|
||||||
g:NetrwTopLvlMenu pi_netrw.txt /*g:NetrwTopLvlMenu*
|
g:NetrwTopLvlMenu pi_netrw.txt /*g:NetrwTopLvlMenu*
|
||||||
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
|
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
|
||||||
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
|
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
|
||||||
@ -1314,7 +1333,6 @@ g:netrw_menu pi_netrw.txt /*g:netrw_menu*
|
|||||||
g:netrw_mkdir_cmd pi_netrw.txt /*g:netrw_mkdir_cmd*
|
g:netrw_mkdir_cmd pi_netrw.txt /*g:netrw_mkdir_cmd*
|
||||||
g:netrw_nogx pi_netrw.txt /*g:netrw_nogx*
|
g:netrw_nogx pi_netrw.txt /*g:netrw_nogx*
|
||||||
g:netrw_noretmap pi_netrw.txt /*g:netrw_noretmap*
|
g:netrw_noretmap pi_netrw.txt /*g:netrw_noretmap*
|
||||||
g:netrw_passwd pi_netrw.txt /*g:netrw_passwd*
|
|
||||||
g:netrw_preview pi_netrw.txt /*g:netrw_preview*
|
g:netrw_preview pi_netrw.txt /*g:netrw_preview*
|
||||||
g:netrw_rcp_cmd pi_netrw.txt /*g:netrw_rcp_cmd*
|
g:netrw_rcp_cmd pi_netrw.txt /*g:netrw_rcp_cmd*
|
||||||
g:netrw_rm_cmd pi_netrw.txt /*g:netrw_rm_cmd*
|
g:netrw_rm_cmd pi_netrw.txt /*g:netrw_rm_cmd*
|
||||||
@ -1379,6 +1397,31 @@ logipat-manual LogiPat.txt /*logipat-manual*
|
|||||||
logipat-operators LogiPat.txt /*logipat-operators*
|
logipat-operators LogiPat.txt /*logipat-operators*
|
||||||
logipat-pattern LogiPat.txt /*logipat-pattern*
|
logipat-pattern LogiPat.txt /*logipat-pattern*
|
||||||
logipat.txt LogiPat.txt /*logipat.txt*
|
logipat.txt LogiPat.txt /*logipat.txt*
|
||||||
|
matchit matchit.txt /*matchit*
|
||||||
|
matchit-% matchit.txt /*matchit-%*
|
||||||
|
matchit-\1 matchit.txt /*matchit-\\1*
|
||||||
|
matchit-activate matchit.txt /*matchit-activate*
|
||||||
|
matchit-backref matchit.txt /*matchit-backref*
|
||||||
|
matchit-bugs matchit.txt /*matchit-bugs*
|
||||||
|
matchit-choose matchit.txt /*matchit-choose*
|
||||||
|
matchit-configure matchit.txt /*matchit-configure*
|
||||||
|
matchit-debug matchit.txt /*matchit-debug*
|
||||||
|
matchit-details matchit.txt /*matchit-details*
|
||||||
|
matchit-highlight matchit.txt /*matchit-highlight*
|
||||||
|
matchit-hl matchit.txt /*matchit-hl*
|
||||||
|
matchit-intro matchit.txt /*matchit-intro*
|
||||||
|
matchit-languages matchit.txt /*matchit-languages*
|
||||||
|
matchit-modes matchit.txt /*matchit-modes*
|
||||||
|
matchit-newlang matchit.txt /*matchit-newlang*
|
||||||
|
matchit-o_% matchit.txt /*matchit-o_%*
|
||||||
|
matchit-parse matchit.txt /*matchit-parse*
|
||||||
|
matchit-s:notend matchit.txt /*matchit-s:notend*
|
||||||
|
matchit-s:sol matchit.txt /*matchit-s:sol*
|
||||||
|
matchit-spaces matchit.txt /*matchit-spaces*
|
||||||
|
matchit-troubleshoot matchit.txt /*matchit-troubleshoot*
|
||||||
|
matchit-v_% matchit.txt /*matchit-v_%*
|
||||||
|
matchit.txt matchit.txt /*matchit.txt*
|
||||||
|
matchit.vim matchit.txt /*matchit.vim*
|
||||||
netreadfixup pi_netrw.txt /*netreadfixup*
|
netreadfixup pi_netrw.txt /*netreadfixup*
|
||||||
netrw pi_netrw.txt /*netrw*
|
netrw pi_netrw.txt /*netrw*
|
||||||
netrw-- pi_netrw.txt /*netrw--*
|
netrw-- pi_netrw.txt /*netrw--*
|
||||||
@ -1521,6 +1564,9 @@ netrw-xfer pi_netrw.txt /*netrw-xfer*
|
|||||||
netrw.vim pi_netrw.txt /*netrw.vim*
|
netrw.vim pi_netrw.txt /*netrw.vim*
|
||||||
netrw_filehandler pi_netrw.txt /*netrw_filehandler*
|
netrw_filehandler pi_netrw.txt /*netrw_filehandler*
|
||||||
network pi_netrw.txt /*network*
|
network pi_netrw.txt /*network*
|
||||||
|
o_[% matchit.txt /*o_[%*
|
||||||
|
o_]% matchit.txt /*o_]%*
|
||||||
|
o_g% matchit.txt /*o_g%*
|
||||||
op-opAsRightShift crefvim.txt /*op-opAsRightShift*
|
op-opAsRightShift crefvim.txt /*op-opAsRightShift*
|
||||||
opAsBitAnd crefvim.txt /*opAsBitAnd*
|
opAsBitAnd crefvim.txt /*opAsBitAnd*
|
||||||
opAsBitOr crefvim.txt /*opAsBitOr*
|
opAsBitOr crefvim.txt /*opAsBitOr*
|
||||||
@ -1530,6 +1576,7 @@ pi_netrw.txt pi_netrw.txt /*pi_netrw.txt*
|
|||||||
pi_vimball.txt pi_vimball.txt /*pi_vimball.txt*
|
pi_vimball.txt pi_vimball.txt /*pi_vimball.txt*
|
||||||
rcp pi_netrw.txt /*rcp*
|
rcp pi_netrw.txt /*rcp*
|
||||||
rsync pi_netrw.txt /*rsync*
|
rsync pi_netrw.txt /*rsync*
|
||||||
|
s:netrw_passwd pi_netrw.txt /*s:netrw_passwd*
|
||||||
scp pi_netrw.txt /*scp*
|
scp pi_netrw.txt /*scp*
|
||||||
sftp pi_netrw.txt /*sftp*
|
sftp pi_netrw.txt /*sftp*
|
||||||
tComment-Installation tComment.txt /*tComment-Installation*
|
tComment-Installation tComment.txt /*tComment-Installation*
|
||||||
@ -1537,6 +1584,10 @@ tComment-Key-Bindings tComment.txt /*tComment-Key-Bindings*
|
|||||||
tComment-Usage tComment.txt /*tComment-Usage*
|
tComment-Usage tComment.txt /*tComment-Usage*
|
||||||
tComment-commands tComment.txt /*tComment-commands*
|
tComment-commands tComment.txt /*tComment-commands*
|
||||||
tComment.txt tComment.txt /*tComment.txt*
|
tComment.txt tComment.txt /*tComment.txt*
|
||||||
|
v_[% matchit.txt /*v_[%*
|
||||||
|
v_]% matchit.txt /*v_]%*
|
||||||
|
v_a% matchit.txt /*v_a%*
|
||||||
|
v_g% matchit.txt /*v_g%*
|
||||||
vba pi_vimball.txt /*vba*
|
vba pi_vimball.txt /*vba*
|
||||||
vimball pi_vimball.txt /*vimball*
|
vimball pi_vimball.txt /*vimball*
|
||||||
vimball-contents pi_vimball.txt /*vimball-contents*
|
vimball-contents pi_vimball.txt /*vimball-contents*
|
||||||
|
@ -1,86 +1,102 @@
|
|||||||
" Vim BlockDiff-Plugin
|
" Vim BlockDiff-Plugin
|
||||||
"
|
"
|
||||||
" Author: Timo Teifel
|
" Author: Timo Teifel
|
||||||
" Email: timo dot teifel at teifel dot net
|
" Email: timo dot teifel at teifel dot net
|
||||||
" Version: 1.0
|
" Version: 1.1
|
||||||
" Date: 22 Oct 2007
|
" Date: 23 Oct 2007
|
||||||
" Licence: GPL v2.0
|
" Licence: GPL v2.0
|
||||||
"
|
"
|
||||||
" Usage:
|
" Usage:
|
||||||
" - Select first block
|
" - Select first block
|
||||||
" - Depending on the configuration, select:
|
" - Depending on the configuration, select:
|
||||||
" - Menu BlockDiff-> This\ is\ Block\ 1
|
" - Menu Tools->BlockDiff-> This\ is\ Block\ 1
|
||||||
" - Popup-Menu -> This\ is\ Block\ 1
|
" - Popup-Menu -> This\ is\ Block\ 1
|
||||||
" - ,d1
|
" - :BlockDiff1
|
||||||
" - select second block (may be in another file, but in the same
|
" - ,d1
|
||||||
" Vim window)
|
" - select second block (may be in another file, but in the same
|
||||||
" - Menu BlockDiff-> This\ is\ Block\ 2,\ start\ diff
|
" Vim window)
|
||||||
" - Popup-Menu -> This\ is\ Block\ 2,\ start\ diff
|
" - Menu Tools->BlockDiff-> This\ is\ Block\ 2,\ start\ diff
|
||||||
" - ,d2
|
" - Popup-Menu -> This\ is\ Block\ 2,\ start\ diff
|
||||||
" - Script opens a new tab, splits it and shows the diff between
|
" - :BlockDiff2
|
||||||
" the two blocks.
|
" - ,d2
|
||||||
" - Close the tab when done
|
" - Script opens a new tab, splits it and shows the diff between
|
||||||
"
|
" the two blocks.
|
||||||
|
" - Close the tab when done
|
||||||
let s:save_cpo = &cpo
|
"
|
||||||
set cpo&vim
|
" History:
|
||||||
|
" V1.0: Initial upload
|
||||||
" ---------- Configuration ----------------------------------------------------
|
" V1.1: Added commands and inclusion guard, Thanks to Ingo Karkat
|
||||||
" uncomment one or more of these blocks:
|
|
||||||
|
|
||||||
|
" Avoid installing twice or when in compatible mode
|
||||||
" Create menu entry:
|
if exists('g:loaded_blockdiff') || (v:version < 700)
|
||||||
vmenu BlockDiff.This\ is\ block\ 1 :call BlockDiff_GetBlock1()<CR>
|
finish
|
||||||
vmenu BlockDiff.This\ is\ block\ 2,\ start\ diff :call BlockDiff_GetBlock2()<CR>
|
endif
|
||||||
|
let g:loaded_blockdiff = 1
|
||||||
|
|
||||||
" Create popup-menu-entry:
|
|
||||||
"vmenu PopUp.BlockDiff.This\ is\ block\ 1 :call BlockDiff_GetBlock1()<CR>
|
let s:save_cpo = &cpo
|
||||||
"vmenu PopUp.BlockDiff.This\ is\ block\ 2,\ start\ diff :call BlockDiff_GetBlock2()<CR>
|
set cpo&vim
|
||||||
|
|
||||||
" Shortcuts
|
" ---------- Configuration ----------------------------------------------------
|
||||||
"vmap ,d1 :call BlockDiff_GetBlock1()<CR>
|
" uncomment one or more of these blocks:
|
||||||
"vmap ,d2 :call BlockDiff_GetBlock2()<CR>
|
|
||||||
|
|
||||||
|
" Create menu entry:
|
||||||
|
vmenu 40.352.10 &Tools.Bloc&kDiff.This\ is\ Block\ &1 :call BlockDiff_GetBlock1()<CR>
|
||||||
" ---------- Code -------------------------------------------------------------
|
vmenu 40.352.20 &Tools.Bloc&kDiff.This\ is\ Block\ &2,\ start\ diff :call BlockDiff_GetBlock2()<CR>
|
||||||
fun! BlockDiff_GetBlock1() range
|
|
||||||
let s:regd = @@
|
|
||||||
" copy selected block into unnamed register
|
" Create popup-menu-entry:
|
||||||
exe a:firstline . "," . a:lastline . "y"
|
"vmenu PopUp.BlockDiff.This\ is\ Block\ 1 :call BlockDiff_GetBlock1()<CR>
|
||||||
" save block for later use in variable
|
"vmenu PopUp.BlockDiff.This\ is\ Block\ 2,\ start\ diff :call BlockDiff_GetBlock2()<CR>
|
||||||
let s:block1 = @@
|
|
||||||
" restore unnamed register
|
" Shortcuts
|
||||||
let @@ = s:regd
|
"vmap ,d1 :call BlockDiff_GetBlock1()<CR>
|
||||||
endfun
|
"vmap ,d2 :call BlockDiff_GetBlock2()<CR>
|
||||||
|
|
||||||
fun! BlockDiff_GetBlock2() range
|
" Commands
|
||||||
let s:regd = @@
|
command! -range BlockDiff1 :<line1>,<line2>call BlockDiff_GetBlock1()
|
||||||
exe a:firstline . "," . a:lastline . "y"
|
command! -range BlockDiff2 :<line1>,<line2>call BlockDiff_GetBlock2()
|
||||||
|
|
||||||
" Open new tab, paste second selected block
|
|
||||||
tabnew
|
" ---------- Code -------------------------------------------------------------
|
||||||
normal p
|
fun! BlockDiff_GetBlock1() range
|
||||||
" to prevent 'No write since last change' message:
|
let s:regd = @@
|
||||||
se buftype=nowrite
|
" copy selected block into unnamed register
|
||||||
diffthis
|
exe a:firstline . "," . a:lastline . "y"
|
||||||
|
" save block for later use in variable
|
||||||
" vsplit left for first selected block
|
let s:block1 = @@
|
||||||
lefta vnew
|
" restore unnamed register
|
||||||
" copy first block into unnamed register & paste
|
let @@ = s:regd
|
||||||
let @@ = s:block1
|
endfun
|
||||||
normal p
|
|
||||||
se buftype=nowrite
|
fun! BlockDiff_GetBlock2() range
|
||||||
|
let s:regd = @@
|
||||||
" start diff
|
exe a:firstline . "," . a:lastline . "y"
|
||||||
diffthis
|
|
||||||
|
" Open new tab, paste second selected block
|
||||||
" restore unnamed register
|
tabnew
|
||||||
let @@ = s:regd
|
normal P
|
||||||
endfun
|
" to prevent 'No write since last change' message:
|
||||||
|
se buftype=nowrite
|
||||||
|
diffthis
|
||||||
let &cpo = s:save_cpo
|
|
||||||
unlet s:save_cpo
|
" vsplit left for first selected block
|
||||||
|
lefta vnew
|
||||||
|
" copy first block into unnamed register & paste
|
||||||
|
let @@ = s:block1
|
||||||
|
normal P
|
||||||
|
se buftype=nowrite
|
||||||
|
|
||||||
|
" start diff
|
||||||
|
diffthis
|
||||||
|
|
||||||
|
" restore unnamed register
|
||||||
|
let @@ = s:regd
|
||||||
|
endfun
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
811
vimfiles/plugin/matchit.vim
Normal file
811
vimfiles/plugin/matchit.vim
Normal file
@ -0,0 +1,811 @@
|
|||||||
|
" matchit.vim: (global plugin) Extended "%" matching
|
||||||
|
" Last Change: Sun Sep 09 09:00 AM 2007 EDT
|
||||||
|
" Maintainer: Benji Fisher PhD <benji@member.AMS.org>
|
||||||
|
" Version: 1.13.1, for Vim 6.3+
|
||||||
|
" URL: http://www.vim.org/script.php?script_id=39
|
||||||
|
|
||||||
|
" Documentation:
|
||||||
|
" The documentation is in a separate file, matchit.txt .
|
||||||
|
|
||||||
|
" Credits:
|
||||||
|
" Vim editor by Bram Moolenaar (Thanks, Bram!)
|
||||||
|
" Original script and design by Raul Segura Acevedo
|
||||||
|
" Support for comments by Douglas Potts
|
||||||
|
" Support for back references and other improvements by Benji Fisher
|
||||||
|
" Support for many languages by Johannes Zellner
|
||||||
|
" Suggestions for improvement, bug reports, and support for additional
|
||||||
|
" languages by Jordi-Albert Batalla, Neil Bird, Servatius Brandt, Mark
|
||||||
|
" Collett, Stephen Wall, Dany St-Amant, Yuheng Xie, and Johannes Zellner.
|
||||||
|
|
||||||
|
" Debugging:
|
||||||
|
" If you'd like to try the built-in debugging commands...
|
||||||
|
" :MatchDebug to activate debugging for the current buffer
|
||||||
|
" This saves the values of several key script variables as buffer-local
|
||||||
|
" variables. See the MatchDebug() function, below, for details.
|
||||||
|
|
||||||
|
" TODO: I should think about multi-line patterns for b:match_words.
|
||||||
|
" This would require an option: how many lines to scan (default 1).
|
||||||
|
" This would be useful for Python, maybe also for *ML.
|
||||||
|
" TODO: Maybe I should add a menu so that people will actually use some of
|
||||||
|
" the features that I have implemented.
|
||||||
|
" TODO: Eliminate the MultiMatch function. Add yet another argument to
|
||||||
|
" Match_wrapper() instead.
|
||||||
|
" TODO: Allow :let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1'
|
||||||
|
" TODO: Make backrefs safer by using '\V' (very no-magic).
|
||||||
|
" TODO: Add a level of indirection, so that custom % scripts can use my
|
||||||
|
" work but extend it.
|
||||||
|
|
||||||
|
" allow user to prevent loading
|
||||||
|
" and prevent duplicate loading
|
||||||
|
if exists("loaded_matchit") || &cp
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let loaded_matchit = 1
|
||||||
|
let s:last_mps = ""
|
||||||
|
let s:last_words = ":"
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
nnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'n') <CR>
|
||||||
|
nnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'n') <CR>
|
||||||
|
vnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'v') <CR>m'gv``
|
||||||
|
vnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'v') <CR>m'gv``
|
||||||
|
onoremap <silent> % v:<C-U>call <SID>Match_wrapper('',1,'o') <CR>
|
||||||
|
onoremap <silent> g% v:<C-U>call <SID>Match_wrapper('',0,'o') <CR>
|
||||||
|
|
||||||
|
" Analogues of [{ and ]} using matching patterns:
|
||||||
|
nnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "n") <CR>
|
||||||
|
nnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "n") <CR>
|
||||||
|
vmap [% <Esc>[%m'gv``
|
||||||
|
vmap ]% <Esc>]%m'gv``
|
||||||
|
" vnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "v") <CR>m'gv``
|
||||||
|
" vnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "v") <CR>m'gv``
|
||||||
|
onoremap <silent> [% v:<C-U>call <SID>MultiMatch("bW", "o") <CR>
|
||||||
|
onoremap <silent> ]% v:<C-U>call <SID>MultiMatch("W", "o") <CR>
|
||||||
|
|
||||||
|
" text object:
|
||||||
|
vmap a% <Esc>[%v]%
|
||||||
|
|
||||||
|
" Auto-complete mappings: (not yet "ready for prime time")
|
||||||
|
" TODO Read :help write-plugin for the "right" way to let the user
|
||||||
|
" specify a key binding.
|
||||||
|
" let g:match_auto = '<C-]>'
|
||||||
|
" let g:match_autoCR = '<C-CR>'
|
||||||
|
" if exists("g:match_auto")
|
||||||
|
" execute "inoremap " . g:match_auto . ' x<Esc>"=<SID>Autocomplete()<CR>Pls'
|
||||||
|
" endif
|
||||||
|
" if exists("g:match_autoCR")
|
||||||
|
" execute "inoremap " . g:match_autoCR . ' <CR><C-R>=<SID>Autocomplete()<CR>'
|
||||||
|
" endif
|
||||||
|
" if exists("g:match_gthhoh")
|
||||||
|
" execute "inoremap " . g:match_gthhoh . ' <C-O>:call <SID>Gthhoh()<CR>'
|
||||||
|
" endif " gthhoh = "Get the heck out of here!"
|
||||||
|
|
||||||
|
let s:notslash = '\\\@<!\%(\\\\\)*'
|
||||||
|
|
||||||
|
function! s:Match_wrapper(word, forward, mode) range
|
||||||
|
" In s:CleanUp(), :execute "set" restore_options .
|
||||||
|
let restore_options = (&ic ? " " : " no") . "ignorecase"
|
||||||
|
if exists("b:match_ignorecase")
|
||||||
|
let &ignorecase = b:match_ignorecase
|
||||||
|
endif
|
||||||
|
let restore_options = " ve=" . &ve . restore_options
|
||||||
|
set ve=
|
||||||
|
" If this function was called from Visual mode, make sure that the cursor
|
||||||
|
" is at the correct end of the Visual range:
|
||||||
|
if a:mode == "v"
|
||||||
|
execute "normal! gv\<Esc>"
|
||||||
|
endif
|
||||||
|
" In s:CleanUp(), we may need to check whether the cursor moved forward.
|
||||||
|
let startline = line(".")
|
||||||
|
let startcol = col(".")
|
||||||
|
" Use default behavior if called with a count.
|
||||||
|
if v:count
|
||||||
|
exe "normal! " . v:count . "%"
|
||||||
|
return s:CleanUp(restore_options, a:mode, startline, startcol)
|
||||||
|
end
|
||||||
|
|
||||||
|
" First step: if not already done, set the script variables
|
||||||
|
" s:do_BR flag for whether there are backrefs
|
||||||
|
" s:pat parsed version of b:match_words
|
||||||
|
" s:all regexp based on s:pat and the default groups
|
||||||
|
"
|
||||||
|
if !exists("b:match_words") || b:match_words == ""
|
||||||
|
let match_words = ""
|
||||||
|
" Allow b:match_words = "GetVimMatchWords()" .
|
||||||
|
elseif b:match_words =~ ":"
|
||||||
|
let match_words = b:match_words
|
||||||
|
else
|
||||||
|
execute "let match_words =" b:match_words
|
||||||
|
endif
|
||||||
|
" Thanks to Preben "Peppe" Guldberg and Bram Moolenaar for this suggestion!
|
||||||
|
if (match_words != s:last_words) || (&mps != s:last_mps) ||
|
||||||
|
\ exists("b:match_debug")
|
||||||
|
let s:last_words = match_words
|
||||||
|
let s:last_mps = &mps
|
||||||
|
" The next several lines were here before
|
||||||
|
" BF started messing with this script.
|
||||||
|
" quote the special chars in 'matchpairs', replace [,:] with \| and then
|
||||||
|
" append the builtin pairs (/*, */, #if, #ifdef, #else, #elif, #endif)
|
||||||
|
" let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+',
|
||||||
|
" \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>'
|
||||||
|
let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
|
||||||
|
\ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
|
||||||
|
" s:all = pattern with all the keywords
|
||||||
|
let match_words = match_words . (strlen(match_words) ? "," : "") . default
|
||||||
|
if match_words !~ s:notslash . '\\\d'
|
||||||
|
let s:do_BR = 0
|
||||||
|
let s:pat = match_words
|
||||||
|
else
|
||||||
|
let s:do_BR = 1
|
||||||
|
let s:pat = s:ParseWords(match_words)
|
||||||
|
endif
|
||||||
|
let s:all = substitute(s:pat, s:notslash . '\zs[,:]\+', '\\|', 'g')
|
||||||
|
let s:all = '\%(' . s:all . '\)'
|
||||||
|
" let s:all = '\%(' . substitute(s:all, '\\\ze[,:]', '', 'g') . '\)'
|
||||||
|
if exists("b:match_debug")
|
||||||
|
let b:match_pat = s:pat
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Second step: set the following local variables:
|
||||||
|
" matchline = line on which the cursor started
|
||||||
|
" curcol = number of characters before match
|
||||||
|
" prefix = regexp for start of line to start of match
|
||||||
|
" suffix = regexp for end of match to end of line
|
||||||
|
" Require match to end on or after the cursor and prefer it to
|
||||||
|
" start on or before the cursor.
|
||||||
|
let matchline = getline(startline)
|
||||||
|
if a:word != ''
|
||||||
|
" word given
|
||||||
|
if a:word !~ s:all
|
||||||
|
echohl WarningMsg|echo 'Missing rule for word:"'.a:word.'"'|echohl NONE
|
||||||
|
return s:CleanUp(restore_options, a:mode, startline, startcol)
|
||||||
|
endif
|
||||||
|
let matchline = a:word
|
||||||
|
let curcol = 0
|
||||||
|
let prefix = '^\%('
|
||||||
|
let suffix = '\)$'
|
||||||
|
" Now the case when "word" is not given
|
||||||
|
else " Find the match that ends on or after the cursor and set curcol.
|
||||||
|
let regexp = s:Wholematch(matchline, s:all, startcol-1)
|
||||||
|
let curcol = match(matchline, regexp)
|
||||||
|
" If there is no match, give up.
|
||||||
|
if curcol == -1
|
||||||
|
return s:CleanUp(restore_options, a:mode, startline, startcol)
|
||||||
|
endif
|
||||||
|
let endcol = matchend(matchline, regexp)
|
||||||
|
let suf = strlen(matchline) - endcol
|
||||||
|
let prefix = (curcol ? '^.*\%' . (curcol + 1) . 'c\%(' : '^\%(')
|
||||||
|
let suffix = (suf ? '\)\%' . (endcol + 1) . 'c.*$' : '\)$')
|
||||||
|
endif
|
||||||
|
if exists("b:match_debug")
|
||||||
|
let b:match_match = matchstr(matchline, regexp)
|
||||||
|
let b:match_col = curcol+1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Third step: Find the group and single word that match, and the original
|
||||||
|
" (backref) versions of these. Then, resolve the backrefs.
|
||||||
|
" Set the following local variable:
|
||||||
|
" group = colon-separated list of patterns, one of which matches
|
||||||
|
" = ini:mid:fin or ini:fin
|
||||||
|
"
|
||||||
|
" Reconstruct the version with unresolved backrefs.
|
||||||
|
let patBR = substitute(match_words.',',
|
||||||
|
\ s:notslash.'\zs[,:]*,[,:]*', ',', 'g')
|
||||||
|
let patBR = substitute(patBR, s:notslash.'\zs:\{2,}', ':', 'g')
|
||||||
|
" Now, set group and groupBR to the matching group: 'if:endif' or
|
||||||
|
" 'while:endwhile' or whatever. A bit of a kluge: s:Choose() returns
|
||||||
|
" group . "," . groupBR, and we pick it apart.
|
||||||
|
let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR)
|
||||||
|
let i = matchend(group, s:notslash . ",")
|
||||||
|
let groupBR = strpart(group, i)
|
||||||
|
let group = strpart(group, 0, i-1)
|
||||||
|
" Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix
|
||||||
|
if s:do_BR " Do the hard part: resolve those backrefs!
|
||||||
|
let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline)
|
||||||
|
endif
|
||||||
|
if exists("b:match_debug")
|
||||||
|
let b:match_wholeBR = groupBR
|
||||||
|
let i = matchend(groupBR, s:notslash . ":")
|
||||||
|
let b:match_iniBR = strpart(groupBR, 0, i-1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Fourth step: Set the arguments for searchpair().
|
||||||
|
let i = matchend(group, s:notslash . ":")
|
||||||
|
let j = matchend(group, '.*' . s:notslash . ":")
|
||||||
|
let ini = strpart(group, 0, i-1)
|
||||||
|
let mid = substitute(strpart(group, i,j-i-1), s:notslash.'\zs:', '\\|', 'g')
|
||||||
|
let fin = strpart(group, j)
|
||||||
|
"Un-escape the remaining , and : characters.
|
||||||
|
let ini = substitute(ini, s:notslash . '\zs\\\(:\|,\)', '\1', 'g')
|
||||||
|
let mid = substitute(mid, s:notslash . '\zs\\\(:\|,\)', '\1', 'g')
|
||||||
|
let fin = substitute(fin, s:notslash . '\zs\\\(:\|,\)', '\1', 'g')
|
||||||
|
" searchpair() requires that these patterns avoid \(\) groups.
|
||||||
|
let ini = substitute(ini, s:notslash . '\zs\\(', '\\%(', 'g')
|
||||||
|
let mid = substitute(mid, s:notslash . '\zs\\(', '\\%(', 'g')
|
||||||
|
let fin = substitute(fin, s:notslash . '\zs\\(', '\\%(', 'g')
|
||||||
|
" Set mid. This is optimized for readability, not micro-efficiency!
|
||||||
|
if a:forward && matchline =~ prefix . fin . suffix
|
||||||
|
\ || !a:forward && matchline =~ prefix . ini . suffix
|
||||||
|
let mid = ""
|
||||||
|
endif
|
||||||
|
" Set flag. This is optimized for readability, not micro-efficiency!
|
||||||
|
if a:forward && matchline =~ prefix . fin . suffix
|
||||||
|
\ || !a:forward && matchline !~ prefix . ini . suffix
|
||||||
|
let flag = "bW"
|
||||||
|
else
|
||||||
|
let flag = "W"
|
||||||
|
endif
|
||||||
|
" Set skip.
|
||||||
|
if exists("b:match_skip")
|
||||||
|
let skip = b:match_skip
|
||||||
|
elseif exists("b:match_comment") " backwards compatibility and testing!
|
||||||
|
let skip = "r:" . b:match_comment
|
||||||
|
else
|
||||||
|
let skip = 's:comment\|string'
|
||||||
|
endif
|
||||||
|
let skip = s:ParseSkip(skip)
|
||||||
|
if exists("b:match_debug")
|
||||||
|
let b:match_ini = ini
|
||||||
|
let b:match_tail = (strlen(mid) ? mid.'\|' : '') . fin
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Fifth step: actually start moving the cursor and call searchpair().
|
||||||
|
" Later, :execute restore_cursor to get to the original screen.
|
||||||
|
let restore_cursor = virtcol(".") . "|"
|
||||||
|
normal! g0
|
||||||
|
let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor
|
||||||
|
normal! H
|
||||||
|
let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
|
||||||
|
execute restore_cursor
|
||||||
|
call cursor(0, curcol + 1)
|
||||||
|
" normal! 0
|
||||||
|
" if curcol
|
||||||
|
" execute "normal!" . curcol . "l"
|
||||||
|
" endif
|
||||||
|
if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
|
||||||
|
let skip = "0"
|
||||||
|
else
|
||||||
|
execute "if " . skip . "| let skip = '0' | endif"
|
||||||
|
endif
|
||||||
|
let sp_return = searchpair(ini, mid, fin, flag, skip)
|
||||||
|
let final_position = "call cursor(" . line(".") . "," . col(".") . ")"
|
||||||
|
" Restore cursor position and original screen.
|
||||||
|
execute restore_cursor
|
||||||
|
normal! m'
|
||||||
|
if sp_return > 0
|
||||||
|
execute final_position
|
||||||
|
endif
|
||||||
|
return s:CleanUp(restore_options, a:mode, startline, startcol, mid.'\|'.fin)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Restore options and do some special handling for Operator-pending mode.
|
||||||
|
" The optional argument is the tail of the matching group.
|
||||||
|
fun! s:CleanUp(options, mode, startline, startcol, ...)
|
||||||
|
execute "set" a:options
|
||||||
|
" Open folds, if appropriate.
|
||||||
|
if a:mode != "o"
|
||||||
|
if &foldopen =~ "percent"
|
||||||
|
normal! zv
|
||||||
|
endif
|
||||||
|
" In Operator-pending mode, we want to include the whole match
|
||||||
|
" (for example, d%).
|
||||||
|
" This is only a problem if we end up moving in the forward direction.
|
||||||
|
elseif (a:startline < line(".")) ||
|
||||||
|
\ (a:startline == line(".") && a:startcol < col("."))
|
||||||
|
if a:0
|
||||||
|
" Check whether the match is a single character. If not, move to the
|
||||||
|
" end of the match.
|
||||||
|
let matchline = getline(".")
|
||||||
|
let currcol = col(".")
|
||||||
|
let regexp = s:Wholematch(matchline, a:1, currcol-1)
|
||||||
|
let endcol = matchend(matchline, regexp)
|
||||||
|
if endcol > currcol " This is NOT off by one!
|
||||||
|
execute "normal!" . (endcol - currcol) . "l"
|
||||||
|
endif
|
||||||
|
endif " a:0
|
||||||
|
endif " a:mode != "o" && etc.
|
||||||
|
return 0
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Example (simplified HTML patterns): if
|
||||||
|
" a:groupBR = '<\(\k\+\)>:</\1>'
|
||||||
|
" a:prefix = '^.\{3}\('
|
||||||
|
" a:group = '<\(\k\+\)>:</\(\k\+\)>'
|
||||||
|
" a:suffix = '\).\{2}$'
|
||||||
|
" a:matchline = "123<tag>12" or "123</tag>12"
|
||||||
|
" then extract "tag" from a:matchline and return "<tag>:</tag>" .
|
||||||
|
fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline)
|
||||||
|
if a:matchline !~ a:prefix .
|
||||||
|
\ substitute(a:group, s:notslash . '\zs:', '\\|', 'g') . a:suffix
|
||||||
|
return a:group
|
||||||
|
endif
|
||||||
|
let i = matchend(a:groupBR, s:notslash . ':')
|
||||||
|
let ini = strpart(a:groupBR, 0, i-1)
|
||||||
|
let tailBR = strpart(a:groupBR, i)
|
||||||
|
let word = s:Choose(a:group, a:matchline, ":", "", a:prefix, a:suffix,
|
||||||
|
\ a:groupBR)
|
||||||
|
let i = matchend(word, s:notslash . ":")
|
||||||
|
let wordBR = strpart(word, i)
|
||||||
|
let word = strpart(word, 0, i-1)
|
||||||
|
" Now, a:matchline =~ a:prefix . word . a:suffix
|
||||||
|
if wordBR != ini
|
||||||
|
let table = s:Resolve(ini, wordBR, "table")
|
||||||
|
else
|
||||||
|
" let table = "----------"
|
||||||
|
let table = ""
|
||||||
|
let d = 0
|
||||||
|
while d < 10
|
||||||
|
if tailBR =~ s:notslash . '\\' . d
|
||||||
|
" let table[d] = d
|
||||||
|
let table = table . d
|
||||||
|
else
|
||||||
|
let table = table . "-"
|
||||||
|
endif
|
||||||
|
let d = d + 1
|
||||||
|
endwhile
|
||||||
|
endif
|
||||||
|
let d = 9
|
||||||
|
while d
|
||||||
|
if table[d] != "-"
|
||||||
|
let backref = substitute(a:matchline, a:prefix.word.a:suffix,
|
||||||
|
\ '\'.table[d], "")
|
||||||
|
" Are there any other characters that should be escaped?
|
||||||
|
let backref = escape(backref, '*,:')
|
||||||
|
execute s:Ref(ini, d, "start", "len")
|
||||||
|
let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len)
|
||||||
|
let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d,
|
||||||
|
\ escape(backref, '\\'), 'g')
|
||||||
|
endif
|
||||||
|
let d = d-1
|
||||||
|
endwhile
|
||||||
|
if exists("b:match_debug")
|
||||||
|
if s:do_BR
|
||||||
|
let b:match_table = table
|
||||||
|
let b:match_word = word
|
||||||
|
else
|
||||||
|
let b:match_table = ""
|
||||||
|
let b:match_word = ""
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return ini . ":" . tailBR
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Input a comma-separated list of groups with backrefs, such as
|
||||||
|
" a:groups = '\(foo\):end\1,\(bar\):end\1'
|
||||||
|
" and return a comma-separated list of groups with backrefs replaced:
|
||||||
|
" return '\(foo\):end\(foo\),\(bar\):end\(bar\)'
|
||||||
|
fun! s:ParseWords(groups)
|
||||||
|
let groups = substitute(a:groups.",", s:notslash.'\zs[,:]*,[,:]*', ',', 'g')
|
||||||
|
let groups = substitute(groups, s:notslash . '\zs:\{2,}', ':', 'g')
|
||||||
|
let parsed = ""
|
||||||
|
while groups =~ '[^,:]'
|
||||||
|
let i = matchend(groups, s:notslash . ':')
|
||||||
|
let j = matchend(groups, s:notslash . ',')
|
||||||
|
let ini = strpart(groups, 0, i-1)
|
||||||
|
let tail = strpart(groups, i, j-i-1) . ":"
|
||||||
|
let groups = strpart(groups, j)
|
||||||
|
let parsed = parsed . ini
|
||||||
|
let i = matchend(tail, s:notslash . ':')
|
||||||
|
while i != -1
|
||||||
|
" In 'if:else:endif', ini='if' and word='else' and then word='endif'.
|
||||||
|
let word = strpart(tail, 0, i-1)
|
||||||
|
let tail = strpart(tail, i)
|
||||||
|
let i = matchend(tail, s:notslash . ':')
|
||||||
|
let parsed = parsed . ":" . s:Resolve(ini, word, "word")
|
||||||
|
endwhile " Now, tail has been used up.
|
||||||
|
let parsed = parsed . ","
|
||||||
|
endwhile " groups =~ '[^,:]'
|
||||||
|
return parsed
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" TODO I think this can be simplified and/or made more efficient.
|
||||||
|
" TODO What should I do if a:start is out of range?
|
||||||
|
" Return a regexp that matches all of a:string, such that
|
||||||
|
" matchstr(a:string, regexp) represents the match for a:pat that starts
|
||||||
|
" as close to a:start as possible, before being preferred to after, and
|
||||||
|
" ends after a:start .
|
||||||
|
" Usage:
|
||||||
|
" let regexp = s:Wholematch(getline("."), 'foo\|bar', col(".")-1)
|
||||||
|
" let i = match(getline("."), regexp)
|
||||||
|
" let j = matchend(getline("."), regexp)
|
||||||
|
" let match = matchstr(getline("."), regexp)
|
||||||
|
fun! s:Wholematch(string, pat, start)
|
||||||
|
let group = '\%(' . a:pat . '\)'
|
||||||
|
let prefix = (a:start ? '\(^.*\%<' . (a:start + 2) . 'c\)\zs' : '^')
|
||||||
|
let len = strlen(a:string)
|
||||||
|
let suffix = (a:start+1 < len ? '\(\%>'.(a:start+1).'c.*$\)\@=' : '$')
|
||||||
|
if a:string !~ prefix . group . suffix
|
||||||
|
let prefix = ''
|
||||||
|
endif
|
||||||
|
return prefix . group . suffix
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" No extra arguments: s:Ref(string, d) will
|
||||||
|
" find the d'th occurrence of '\(' and return it, along with everything up
|
||||||
|
" to and including the matching '\)'.
|
||||||
|
" One argument: s:Ref(string, d, "start") returns the index of the start
|
||||||
|
" of the d'th '\(' and any other argument returns the length of the group.
|
||||||
|
" Two arguments: s:Ref(string, d, "foo", "bar") returns a string to be
|
||||||
|
" executed, having the effect of
|
||||||
|
" :let foo = s:Ref(string, d, "start")
|
||||||
|
" :let bar = s:Ref(string, d, "len")
|
||||||
|
fun! s:Ref(string, d, ...)
|
||||||
|
let len = strlen(a:string)
|
||||||
|
if a:d == 0
|
||||||
|
let start = 0
|
||||||
|
else
|
||||||
|
let cnt = a:d
|
||||||
|
let match = a:string
|
||||||
|
while cnt
|
||||||
|
let cnt = cnt - 1
|
||||||
|
let index = matchend(match, s:notslash . '\\(')
|
||||||
|
if index == -1
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
let match = strpart(match, index)
|
||||||
|
endwhile
|
||||||
|
let start = len - strlen(match)
|
||||||
|
if a:0 == 1 && a:1 == "start"
|
||||||
|
return start - 2
|
||||||
|
endif
|
||||||
|
let cnt = 1
|
||||||
|
while cnt
|
||||||
|
let index = matchend(match, s:notslash . '\\(\|\\)') - 1
|
||||||
|
if index == -2
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
" Increment if an open, decrement if a ')':
|
||||||
|
let cnt = cnt + (match[index]=="(" ? 1 : -1) " ')'
|
||||||
|
" let cnt = stridx('0(', match[index]) + cnt
|
||||||
|
let match = strpart(match, index+1)
|
||||||
|
endwhile
|
||||||
|
let start = start - 2
|
||||||
|
let len = len - start - strlen(match)
|
||||||
|
endif
|
||||||
|
if a:0 == 1
|
||||||
|
return len
|
||||||
|
elseif a:0 == 2
|
||||||
|
return "let " . a:1 . "=" . start . "| let " . a:2 . "=" . len
|
||||||
|
else
|
||||||
|
return strpart(a:string, start, len)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Count the number of disjoint copies of pattern in string.
|
||||||
|
" If the pattern is a literal string and contains no '0' or '1' characters
|
||||||
|
" then s:Count(string, pattern, '0', '1') should be faster than
|
||||||
|
" s:Count(string, pattern).
|
||||||
|
fun! s:Count(string, pattern, ...)
|
||||||
|
let pat = escape(a:pattern, '\\')
|
||||||
|
if a:0 > 1
|
||||||
|
let foo = substitute(a:string, '[^'.a:pattern.']', "a:1", "g")
|
||||||
|
let foo = substitute(a:string, pat, a:2, "g")
|
||||||
|
let foo = substitute(foo, '[^' . a:2 . ']', "", "g")
|
||||||
|
return strlen(foo)
|
||||||
|
endif
|
||||||
|
let result = 0
|
||||||
|
let foo = a:string
|
||||||
|
let index = matchend(foo, pat)
|
||||||
|
while index != -1
|
||||||
|
let result = result + 1
|
||||||
|
let foo = strpart(foo, index)
|
||||||
|
let index = matchend(foo, pat)
|
||||||
|
endwhile
|
||||||
|
return result
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" s:Resolve('\(a\)\(b\)', '\(c\)\2\1\1\2') should return table.word, where
|
||||||
|
" word = '\(c\)\(b\)\(a\)\3\2' and table = '-32-------'. That is, the first
|
||||||
|
" '\1' in target is replaced by '\(a\)' in word, table[1] = 3, and this
|
||||||
|
" indicates that all other instances of '\1' in target are to be replaced
|
||||||
|
" by '\3'. The hard part is dealing with nesting...
|
||||||
|
" Note that ":" is an illegal character for source and target,
|
||||||
|
" unless it is preceded by "\".
|
||||||
|
fun! s:Resolve(source, target, output)
|
||||||
|
let word = a:target
|
||||||
|
let i = matchend(word, s:notslash . '\\\d') - 1
|
||||||
|
let table = "----------"
|
||||||
|
while i != -2 " There are back references to be replaced.
|
||||||
|
let d = word[i]
|
||||||
|
let backref = s:Ref(a:source, d)
|
||||||
|
" The idea is to replace '\d' with backref. Before we do this,
|
||||||
|
" replace any \(\) groups in backref with :1, :2, ... if they
|
||||||
|
" correspond to the first, second, ... group already inserted
|
||||||
|
" into backref. Later, replace :1 with \1 and so on. The group
|
||||||
|
" number w+b within backref corresponds to the group number
|
||||||
|
" s within a:source.
|
||||||
|
" w = number of '\(' in word before the current one
|
||||||
|
let w = s:Count(
|
||||||
|
\ substitute(strpart(word, 0, i-1), '\\\\', '', 'g'), '\(', '1')
|
||||||
|
let b = 1 " number of the current '\(' in backref
|
||||||
|
let s = d " number of the current '\(' in a:source
|
||||||
|
while b <= s:Count(substitute(backref, '\\\\', '', 'g'), '\(', '1')
|
||||||
|
\ && s < 10
|
||||||
|
if table[s] == "-"
|
||||||
|
if w + b < 10
|
||||||
|
" let table[s] = w + b
|
||||||
|
let table = strpart(table, 0, s) . (w+b) . strpart(table, s+1)
|
||||||
|
endif
|
||||||
|
let b = b + 1
|
||||||
|
let s = s + 1
|
||||||
|
else
|
||||||
|
execute s:Ref(backref, b, "start", "len")
|
||||||
|
let ref = strpart(backref, start, len)
|
||||||
|
let backref = strpart(backref, 0, start) . ":". table[s]
|
||||||
|
\ . strpart(backref, start+len)
|
||||||
|
let s = s + s:Count(substitute(ref, '\\\\', '', 'g'), '\(', '1')
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
let word = strpart(word, 0, i-1) . backref . strpart(word, i+1)
|
||||||
|
let i = matchend(word, s:notslash . '\\\d') - 1
|
||||||
|
endwhile
|
||||||
|
let word = substitute(word, s:notslash . '\zs:', '\\', 'g')
|
||||||
|
if a:output == "table"
|
||||||
|
return table
|
||||||
|
elseif a:output == "word"
|
||||||
|
return word
|
||||||
|
else
|
||||||
|
return table . word
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Assume a:comma = ",". Then the format for a:patterns and a:1 is
|
||||||
|
" a:patterns = "<pat1>,<pat2>,..."
|
||||||
|
" a:1 = "<alt1>,<alt2>,..."
|
||||||
|
" If <patn> is the first pattern that matches a:string then return <patn>
|
||||||
|
" if no optional arguments are given; return <patn>,<altn> if a:1 is given.
|
||||||
|
fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...)
|
||||||
|
let tail = (a:patterns =~ a:comma."$" ? a:patterns : a:patterns . a:comma)
|
||||||
|
let i = matchend(tail, s:notslash . a:comma)
|
||||||
|
if a:0
|
||||||
|
let alttail = (a:1 =~ a:comma."$" ? a:1 : a:1 . a:comma)
|
||||||
|
let j = matchend(alttail, s:notslash . a:comma)
|
||||||
|
endif
|
||||||
|
let current = strpart(tail, 0, i-1)
|
||||||
|
if a:branch == ""
|
||||||
|
let currpat = current
|
||||||
|
else
|
||||||
|
let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g')
|
||||||
|
endif
|
||||||
|
while a:string !~ a:prefix . currpat . a:suffix
|
||||||
|
let tail = strpart(tail, i)
|
||||||
|
let i = matchend(tail, s:notslash . a:comma)
|
||||||
|
if i == -1
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let current = strpart(tail, 0, i-1)
|
||||||
|
if a:branch == ""
|
||||||
|
let currpat = current
|
||||||
|
else
|
||||||
|
let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g')
|
||||||
|
endif
|
||||||
|
if a:0
|
||||||
|
let alttail = strpart(alttail, j)
|
||||||
|
let j = matchend(alttail, s:notslash . a:comma)
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
if a:0
|
||||||
|
let current = current . a:comma . strpart(alttail, 0, j-1)
|
||||||
|
endif
|
||||||
|
return current
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Call this function to turn on debugging information. Every time the main
|
||||||
|
" script is run, buffer variables will be saved. These can be used directly
|
||||||
|
" or viewed using the menu items below.
|
||||||
|
if !exists(":MatchDebug")
|
||||||
|
command! -nargs=0 MatchDebug call s:Match_debug()
|
||||||
|
endif
|
||||||
|
|
||||||
|
fun! s:Match_debug()
|
||||||
|
let b:match_debug = 1 " Save debugging information.
|
||||||
|
" pat = all of b:match_words with backrefs parsed
|
||||||
|
amenu &Matchit.&pat :echo b:match_pat<CR>
|
||||||
|
" match = bit of text that is recognized as a match
|
||||||
|
amenu &Matchit.&match :echo b:match_match<CR>
|
||||||
|
" curcol = cursor column of the start of the matching text
|
||||||
|
amenu &Matchit.&curcol :echo b:match_col<CR>
|
||||||
|
" wholeBR = matching group, original version
|
||||||
|
amenu &Matchit.wh&oleBR :echo b:match_wholeBR<CR>
|
||||||
|
" iniBR = 'if' piece, original version
|
||||||
|
amenu &Matchit.ini&BR :echo b:match_iniBR<CR>
|
||||||
|
" ini = 'if' piece, with all backrefs resolved from match
|
||||||
|
amenu &Matchit.&ini :echo b:match_ini<CR>
|
||||||
|
" tail = 'else\|endif' piece, with all backrefs resolved from match
|
||||||
|
amenu &Matchit.&tail :echo b:match_tail<CR>
|
||||||
|
" fin = 'endif' piece, with all backrefs resolved from match
|
||||||
|
amenu &Matchit.&word :echo b:match_word<CR>
|
||||||
|
" '\'.d in ini refers to the same thing as '\'.table[d] in word.
|
||||||
|
amenu &Matchit.t&able :echo '0:' . b:match_table . ':9'<CR>
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Jump to the nearest unmatched "(" or "if" or "<tag>" if a:spflag == "bW"
|
||||||
|
" or the nearest unmatched "</tag>" or "endif" or ")" if a:spflag == "W".
|
||||||
|
" Return a "mark" for the original position, so that
|
||||||
|
" let m = MultiMatch("bW", "n") ... execute m
|
||||||
|
" will return to the original position. If there is a problem, do not
|
||||||
|
" move the cursor and return "", unless a count is given, in which case
|
||||||
|
" go up or down as many levels as possible and again return "".
|
||||||
|
" TODO This relies on the same patterns as % matching. It might be a good
|
||||||
|
" idea to give it its own matching patterns.
|
||||||
|
fun! s:MultiMatch(spflag, mode)
|
||||||
|
if !exists("b:match_words") || b:match_words == ""
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
let restore_options = (&ic ? "" : "no") . "ignorecase"
|
||||||
|
if exists("b:match_ignorecase")
|
||||||
|
let &ignorecase = b:match_ignorecase
|
||||||
|
endif
|
||||||
|
let startline = line(".")
|
||||||
|
let startcol = col(".")
|
||||||
|
|
||||||
|
" First step: if not already done, set the script variables
|
||||||
|
" s:do_BR flag for whether there are backrefs
|
||||||
|
" s:pat parsed version of b:match_words
|
||||||
|
" s:all regexp based on s:pat and the default groups
|
||||||
|
" This part is copied and slightly modified from s:Match_wrapper().
|
||||||
|
let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
|
||||||
|
\ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
|
||||||
|
" Allow b:match_words = "GetVimMatchWords()" .
|
||||||
|
if b:match_words =~ ":"
|
||||||
|
let match_words = b:match_words
|
||||||
|
else
|
||||||
|
execute "let match_words =" b:match_words
|
||||||
|
endif
|
||||||
|
if (match_words != s:last_words) || (&mps != s:last_mps) ||
|
||||||
|
\ exists("b:match_debug")
|
||||||
|
let s:last_words = match_words
|
||||||
|
let s:last_mps = &mps
|
||||||
|
if match_words !~ s:notslash . '\\\d'
|
||||||
|
let s:do_BR = 0
|
||||||
|
let s:pat = match_words
|
||||||
|
else
|
||||||
|
let s:do_BR = 1
|
||||||
|
let s:pat = s:ParseWords(match_words)
|
||||||
|
endif
|
||||||
|
let s:all = '\%(' . substitute(s:pat . (strlen(s:pat)?",":"") . default,
|
||||||
|
\ '[,:]\+','\\|','g') . '\)'
|
||||||
|
if exists("b:match_debug")
|
||||||
|
let b:match_pat = s:pat
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Second step: figure out the patterns for searchpair()
|
||||||
|
" and save the screen, cursor position, and 'ignorecase'.
|
||||||
|
" - TODO: A lot of this is copied from s:Match_wrapper().
|
||||||
|
" - maybe even more functionality should be split off
|
||||||
|
" - into separate functions!
|
||||||
|
let cdefault = (s:pat =~ '[^,]$' ? "," : "") . default
|
||||||
|
let open = substitute(s:pat . cdefault,
|
||||||
|
\ s:notslash . '\zs:.\{-}' . s:notslash . ',', '\\),\\(', 'g')
|
||||||
|
let open = '\(' . substitute(open, s:notslash . '\zs:.*$', '\\)', '')
|
||||||
|
let close = substitute(s:pat . cdefault,
|
||||||
|
\ s:notslash . '\zs,.\{-}' . s:notslash . ':', '\\),\\(', 'g')
|
||||||
|
let close = substitute(close, '^.\{-}' . s:notslash . ':', '\\(', '') . '\)'
|
||||||
|
if exists("b:match_skip")
|
||||||
|
let skip = b:match_skip
|
||||||
|
elseif exists("b:match_comment") " backwards compatibility and testing!
|
||||||
|
let skip = "r:" . b:match_comment
|
||||||
|
else
|
||||||
|
let skip = 's:comment\|string'
|
||||||
|
endif
|
||||||
|
let skip = s:ParseSkip(skip)
|
||||||
|
" let restore_cursor = line(".") . "G" . virtcol(".") . "|"
|
||||||
|
" normal! H
|
||||||
|
" let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
|
||||||
|
let restore_cursor = virtcol(".") . "|"
|
||||||
|
normal! g0
|
||||||
|
let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor
|
||||||
|
normal! H
|
||||||
|
let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
|
||||||
|
execute restore_cursor
|
||||||
|
|
||||||
|
" Third step: call searchpair().
|
||||||
|
" Replace '\('--but not '\\('--with '\%(' and ',' with '\|'.
|
||||||
|
let openpat = substitute(open, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
|
||||||
|
let openpat = substitute(openpat, ',', '\\|', 'g')
|
||||||
|
let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
|
||||||
|
let closepat = substitute(closepat, ',', '\\|', 'g')
|
||||||
|
if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
|
||||||
|
let skip = '0'
|
||||||
|
else
|
||||||
|
execute "if " . skip . "| let skip = '0' | endif"
|
||||||
|
endif
|
||||||
|
mark '
|
||||||
|
let level = v:count1
|
||||||
|
while level
|
||||||
|
if searchpair(openpat, '', closepat, a:spflag, skip) < 1
|
||||||
|
call s:CleanUp(restore_options, a:mode, startline, startcol)
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
let level = level - 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Restore options and return a string to restore the original position.
|
||||||
|
call s:CleanUp(restore_options, a:mode, startline, startcol)
|
||||||
|
return restore_cursor
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Search backwards for "if" or "while" or "<tag>" or ...
|
||||||
|
" and return "endif" or "endwhile" or "</tag>" or ... .
|
||||||
|
" For now, this uses b:match_words and the same script variables
|
||||||
|
" as s:Match_wrapper() . Later, it may get its own patterns,
|
||||||
|
" either from a buffer variable or passed as arguments.
|
||||||
|
" fun! s:Autocomplete()
|
||||||
|
" echo "autocomplete not yet implemented :-("
|
||||||
|
" if !exists("b:match_words") || b:match_words == ""
|
||||||
|
" return ""
|
||||||
|
" end
|
||||||
|
" let startpos = s:MultiMatch("bW")
|
||||||
|
"
|
||||||
|
" if startpos == ""
|
||||||
|
" return ""
|
||||||
|
" endif
|
||||||
|
" " - TODO: figure out whether 'if' or '<tag>' matched, and construct
|
||||||
|
" " - the appropriate closing.
|
||||||
|
" let matchline = getline(".")
|
||||||
|
" let curcol = col(".") - 1
|
||||||
|
" " - TODO: Change the s:all argument if there is a new set of match pats.
|
||||||
|
" let regexp = s:Wholematch(matchline, s:all, curcol)
|
||||||
|
" let suf = strlen(matchline) - matchend(matchline, regexp)
|
||||||
|
" let prefix = (curcol ? '^.\{' . curcol . '}\%(' : '^\%(')
|
||||||
|
" let suffix = (suf ? '\).\{' . suf . '}$' : '\)$')
|
||||||
|
" " Reconstruct the version with unresolved backrefs.
|
||||||
|
" let patBR = substitute(b:match_words.',', '[,:]*,[,:]*', ',', 'g')
|
||||||
|
" let patBR = substitute(patBR, ':\{2,}', ':', "g")
|
||||||
|
" " Now, set group and groupBR to the matching group: 'if:endif' or
|
||||||
|
" " 'while:endwhile' or whatever.
|
||||||
|
" let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR)
|
||||||
|
" let i = matchend(group, s:notslash . ",")
|
||||||
|
" let groupBR = strpart(group, i)
|
||||||
|
" let group = strpart(group, 0, i-1)
|
||||||
|
" " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix
|
||||||
|
" if s:do_BR
|
||||||
|
" let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline)
|
||||||
|
" endif
|
||||||
|
" " let g:group = group
|
||||||
|
"
|
||||||
|
" " - TODO: Construct the closing from group.
|
||||||
|
" let fake = "end" . expand("<cword>")
|
||||||
|
" execute startpos
|
||||||
|
" return fake
|
||||||
|
" endfun
|
||||||
|
|
||||||
|
" Close all open structures. "Get the heck out of here!"
|
||||||
|
" fun! s:Gthhoh()
|
||||||
|
" let close = s:Autocomplete()
|
||||||
|
" while strlen(close)
|
||||||
|
" put=close
|
||||||
|
" let close = s:Autocomplete()
|
||||||
|
" endwhile
|
||||||
|
" endfun
|
||||||
|
|
||||||
|
" Parse special strings as typical skip arguments for searchpair():
|
||||||
|
" s:foo becomes (current syntax item) =~ foo
|
||||||
|
" S:foo becomes (current syntax item) !~ foo
|
||||||
|
" r:foo becomes (line before cursor) =~ foo
|
||||||
|
" R:foo becomes (line before cursor) !~ foo
|
||||||
|
fun! s:ParseSkip(str)
|
||||||
|
let skip = a:str
|
||||||
|
if skip[1] == ":"
|
||||||
|
if skip[0] == "s"
|
||||||
|
let skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" .
|
||||||
|
\ strpart(skip,2) . "'"
|
||||||
|
elseif skip[0] == "S"
|
||||||
|
let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" .
|
||||||
|
\ strpart(skip,2) . "'"
|
||||||
|
elseif skip[0] == "r"
|
||||||
|
let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'"
|
||||||
|
elseif skip[0] == "R"
|
||||||
|
let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return skip
|
||||||
|
endfun
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
|
||||||
|
" vim:sts=2:sw=2:
|
@ -1,180 +1,180 @@
|
|||||||
" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
|
" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
|
||||||
" PLUGIN SECTION
|
" PLUGIN SECTION
|
||||||
" Date: Aug 09, 2007
|
" Date: Aug 09, 2007
|
||||||
" Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
|
" Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
|
||||||
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
|
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
|
||||||
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
|
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
|
||||||
" Permission is hereby granted to use and distribute this code,
|
" Permission is hereby granted to use and distribute this code,
|
||||||
" with or without modifications, provided that this copyright
|
" with or without modifications, provided that this copyright
|
||||||
" notice is copied with it. Like anything else that's free,
|
" notice is copied with it. Like anything else that's free,
|
||||||
" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
|
" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
|
||||||
" *as is* and comes with no warranty of any kind, either
|
" *as is* and comes with no warranty of any kind, either
|
||||||
" expressed or implied. By using this plugin, you agree that
|
" expressed or implied. By using this plugin, you agree that
|
||||||
" in no event will the copyright holder be liable for any damages
|
" in no event will the copyright holder be liable for any damages
|
||||||
" resulting from the use of this software.
|
" resulting from the use of this software.
|
||||||
"
|
"
|
||||||
" But be doers of the Word, and not only hearers, deluding your own selves {{{1
|
" But be doers of the Word, and not only hearers, deluding your own selves {{{1
|
||||||
" (James 1:22 RSV)
|
" (James 1:22 RSV)
|
||||||
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" Load Once: {{{1
|
" Load Once: {{{1
|
||||||
if &cp || exists("g:loaded_netrwPlugin")
|
if &cp || exists("g:loaded_netrwPlugin")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let g:loaded_netrwPlugin = 1
|
let g:loaded_netrwPlugin = "v116"
|
||||||
let s:keepcpo = &cpo
|
let s:keepcpo = &cpo
|
||||||
if v:version < 700
|
if v:version < 700
|
||||||
echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
|
echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let s:keepcpo= &cpo
|
let s:keepcpo= &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" Public Interface: {{{1
|
" Public Interface: {{{1
|
||||||
|
|
||||||
" Local Browsing: {{{2
|
" Local Browsing: {{{2
|
||||||
augroup FileExplorer
|
augroup FileExplorer
|
||||||
au!
|
au!
|
||||||
au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
|
au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
|
||||||
if has("win32") || has("win95") || has("win64") || has("win16")
|
if has("win32") || has("win95") || has("win64") || has("win16")
|
||||||
au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
|
au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
|
||||||
endif
|
endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
" Network Browsing Reading Writing: {{{2
|
" Network Browsing Reading Writing: {{{2
|
||||||
augroup Network
|
augroup Network
|
||||||
au!
|
au!
|
||||||
if has("win32") || has("win95") || has("win64") || has("win16")
|
if has("win32") || has("win95") || has("win64") || has("win16")
|
||||||
au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
|
au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
|
||||||
else
|
else
|
||||||
au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
|
au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
|
||||||
au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
|
au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
|
||||||
endif
|
endif
|
||||||
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe '2Nread "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
|
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe '2Nread "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
|
||||||
au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "' .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>")
|
au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "' .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>")
|
||||||
au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
|
au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
|
||||||
au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
|
au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
|
||||||
try
|
try
|
||||||
au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe 'Nsource "'.expand("<amatch>").'"'
|
au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe 'Nsource "'.expand("<amatch>").'"'
|
||||||
catch /^Vim\%((\a\+)\)\=:E216/
|
catch /^Vim\%((\a\+)\)\=:E216/
|
||||||
au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe 'Nsource "'.expand("<amatch>").'"'
|
au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe 'Nsource "'.expand("<amatch>").'"'
|
||||||
endtry
|
endtry
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
" Commands: :Nread, :Nwrite, :NetUserPass {{{2
|
" Commands: :Nread, :Nwrite, :NetUserPass {{{2
|
||||||
com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
|
com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
|
||||||
com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
|
com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
|
||||||
com! -nargs=* NetUserPass call NetUserPass(<f-args>)
|
com! -nargs=* NetUserPass call NetUserPass(<f-args>)
|
||||||
com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
|
com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
|
||||||
|
|
||||||
" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
|
" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
|
||||||
com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
|
com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
|
||||||
com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
|
com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
|
||||||
com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
|
com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
|
||||||
com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
|
com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
|
||||||
com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>)
|
com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>)
|
||||||
com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
|
com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
|
||||||
com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
|
com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
|
||||||
|
|
||||||
" Commands: NetrwSettings {{{2
|
" Commands: NetrwSettings {{{2
|
||||||
com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings()
|
com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings()
|
||||||
com! -bang NetrwClean call netrw#NetrwClean(<bang>0)
|
com! -bang NetrwClean call netrw#NetrwClean(<bang>0)
|
||||||
|
|
||||||
" Maps:
|
" Maps:
|
||||||
if !exists("g:netrw_nogx") && maparg('g','n') == ""
|
if !exists("g:netrw_nogx") && maparg('g','n') == ""
|
||||||
if !hasmapto('<Plug>NetrwBrowseX')
|
if !hasmapto('<Plug>NetrwBrowseX')
|
||||||
nmap <unique> gx <Plug>NetrwBrowseX
|
nmap <unique> gx <Plug>NetrwBrowseX
|
||||||
endif
|
endif
|
||||||
nno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
|
nno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" LocalBrowse: {{{2
|
" LocalBrowse: {{{2
|
||||||
fun! s:LocalBrowse(dirname)
|
fun! s:LocalBrowse(dirname)
|
||||||
" unfortunate interaction -- debugging calls can't be used here;
|
" unfortunate interaction -- debugging calls can't be used here;
|
||||||
" the BufEnter event causes triggering when attempts to write to
|
" the BufEnter event causes triggering when attempts to write to
|
||||||
" the DBG buffer are made.
|
" the DBG buffer are made.
|
||||||
" echomsg "dirname<".a:dirname.">"
|
" echomsg "dirname<".a:dirname.">"
|
||||||
if has("amiga")
|
if has("amiga")
|
||||||
" The check against '' is made for the Amiga, where the empty
|
" The check against '' is made for the Amiga, where the empty
|
||||||
" string is the current directory and not checking would break
|
" string is the current directory and not checking would break
|
||||||
" things such as the help command.
|
" things such as the help command.
|
||||||
if a:dirname != '' && isdirectory(a:dirname)
|
if a:dirname != '' && isdirectory(a:dirname)
|
||||||
silent! call netrw#LocalBrowseCheck(a:dirname)
|
silent! call netrw#LocalBrowseCheck(a:dirname)
|
||||||
endif
|
endif
|
||||||
elseif isdirectory(a:dirname)
|
elseif isdirectory(a:dirname)
|
||||||
" echomsg "dirname<".dirname."> isdir"
|
" echomsg "dirname<".dirname."> isdir"
|
||||||
silent! call netrw#LocalBrowseCheck(a:dirname)
|
silent! call netrw#LocalBrowseCheck(a:dirname)
|
||||||
endif
|
endif
|
||||||
" not a directory, ignore it
|
" not a directory, ignore it
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" NetrwStatusLine: {{{1
|
" NetrwStatusLine: {{{1
|
||||||
fun! NetrwStatusLine()
|
fun! NetrwStatusLine()
|
||||||
" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
|
" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
|
||||||
if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
|
if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
|
||||||
let &stl= s:netrw_explore_stl
|
let &stl= s:netrw_explore_stl
|
||||||
if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
|
if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
|
||||||
if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
|
if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
|
||||||
return ""
|
return ""
|
||||||
else
|
else
|
||||||
return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
|
return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
|
||||||
endif
|
endif
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
" ------------------------------------------------------------------------
|
||||||
" NetUserPass: set username and password for subsequent ftp transfer {{{1
|
" NetUserPass: set username and password for subsequent ftp transfer {{{1
|
||||||
" Usage: :call NetUserPass() -- will prompt for userid and password
|
" Usage: :call NetUserPass() -- will prompt for userid and password
|
||||||
" :call NetUserPass("uid") -- will prompt for password
|
" :call NetUserPass("uid") -- will prompt for password
|
||||||
" :call NetUserPass("uid","password") -- sets global userid and password
|
" :call NetUserPass("uid","password") -- sets global userid and password
|
||||||
fun! NetUserPass(...)
|
fun! NetUserPass(...)
|
||||||
|
|
||||||
" get/set userid
|
" get/set userid
|
||||||
if a:0 == 0
|
if a:0 == 0
|
||||||
" call Dfunc("NetUserPass(a:0<".a:0.">)")
|
" call Dfunc("NetUserPass(a:0<".a:0.">)")
|
||||||
if !exists("g:netrw_uid") || g:netrw_uid == ""
|
if !exists("g:netrw_uid") || g:netrw_uid == ""
|
||||||
" via prompt
|
" via prompt
|
||||||
let g:netrw_uid= input('Enter username: ')
|
let g:netrw_uid= input('Enter username: ')
|
||||||
endif
|
endif
|
||||||
else " from command line
|
else " from command line
|
||||||
" call Dfunc("NetUserPass(a:1<".a:1.">) {")
|
" call Dfunc("NetUserPass(a:1<".a:1.">) {")
|
||||||
let g:netrw_uid= a:1
|
let g:netrw_uid= a:1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" get password
|
" get password
|
||||||
if a:0 <= 1 " via prompt
|
if a:0 <= 1 " via prompt
|
||||||
" call Decho("a:0=".a:0." case <=1:")
|
" call Decho("a:0=".a:0." case <=1:")
|
||||||
let g:netrw_passwd= inputsecret("Enter Password: ")
|
let g:netrw_passwd= inputsecret("Enter Password: ")
|
||||||
else " from command line
|
else " from command line
|
||||||
" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
|
" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
|
||||||
let g:netrw_passwd=a:2
|
let g:netrw_passwd=a:2
|
||||||
endif
|
endif
|
||||||
" call Dret("NetUserPass")
|
" call Dret("NetUserPass")
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
" ------------------------------------------------------------------------
|
||||||
" NetReadFixup: this sort of function is typically written by the user {{{1
|
" NetReadFixup: this sort of function is typically written by the user {{{1
|
||||||
" to handle extra junk that their system's ftp dumps
|
" to handle extra junk that their system's ftp dumps
|
||||||
" into the transfer. This function is provided as an
|
" into the transfer. This function is provided as an
|
||||||
" example and as a fix for a Windows 95 problem: in my
|
" example and as a fix for a Windows 95 problem: in my
|
||||||
" experience, win95's ftp always dumped four blank lines
|
" experience, win95's ftp always dumped four blank lines
|
||||||
" at the end of the transfer.
|
" at the end of the transfer.
|
||||||
if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
|
if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
|
||||||
fun! NetReadFixup(method, line1, line2)
|
fun! NetReadFixup(method, line1, line2)
|
||||||
" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
|
" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
|
||||||
if method == 3 " ftp (no <.netrc>)
|
if method == 3 " ftp (no <.netrc>)
|
||||||
let fourblanklines= line2 - 3
|
let fourblanklines= line2 - 3
|
||||||
silent fourblanklines.",".line2."g/^\s*/d"
|
silent fourblanklines.",".line2."g/^\s*/d"
|
||||||
endif
|
endif
|
||||||
" call Dret("NetReadFixup")
|
" call Dret("NetReadFixup")
|
||||||
endfun
|
endfun
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
" ------------------------------------------------------------------------
|
||||||
" Modelines And Restoration: {{{1
|
" Modelines And Restoration: {{{1
|
||||||
let &cpo= s:keepcpo
|
let &cpo= s:keepcpo
|
||||||
unlet s:keepcpo
|
unlet s:keepcpo
|
||||||
" vim:ts=8 fdm=marker
|
" vim:ts=8 fdm=marker
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
" Author: Michael Geddes ( vimmer at frog.wheelycreek.net )
|
" Author: Michael Geddes ( vimmer at frog.wheelycreek.net )
|
||||||
"
|
"
|
||||||
" Created for zimnyx on IRC
|
" Created for zimnyx on IRC
|
||||||
" Version:0.2
|
" Version:0.3
|
||||||
"
|
"
|
||||||
" Do a global search replace on a directory.
|
" Gsub Do a global search replace on a directory.
|
||||||
|
" Bsub Do a buffer search replace.
|
||||||
"
|
"
|
||||||
"
|
"
|
||||||
" Copyright: Copyright me. Feel free to use, share, modify & distribute the
|
" Copyright: Copyright me. Feel free to use, share, modify & distribute the
|
||||||
@ -28,7 +29,16 @@ fun! GlobSearchReplace( fileglob, sub, rep, flag)
|
|||||||
endwhile
|
endwhile
|
||||||
return countup
|
return countup
|
||||||
endfun
|
endfun
|
||||||
fun! s:CallGlobReplace(str)
|
|
||||||
|
fun! BufSearchReplace( fileglob, sub, rep, flag)
|
||||||
|
if a:fileglob != ''
|
||||||
|
echoerr 'Filter not supported'
|
||||||
|
else
|
||||||
|
exe 'bufdo %s/'.escape(a:sub, '/').'/'.escape(a:rep,'/').'/'.a:flag
|
||||||
|
end
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! s:CallGlobReplace(func, str)
|
||||||
if strlen(a:str) == 0
|
if strlen(a:str) == 0
|
||||||
echoerr 'Usage: /sub/rep/flags files'
|
echoerr 'Usage: /sub/rep/flags files'
|
||||||
return 0
|
return 0
|
||||||
@ -57,7 +67,7 @@ fun! s:CallGlobReplace(str)
|
|||||||
let idx+=1
|
let idx+=1
|
||||||
endwhile
|
endwhile
|
||||||
if argidx == 2
|
if argidx == 2
|
||||||
echo ' argidx=2'
|
"echo ' argidx=2'
|
||||||
let idx+=1
|
let idx+=1
|
||||||
while idx < strlen(str)
|
while idx < strlen(str)
|
||||||
if str[idx]=~'\s'
|
if str[idx]=~'\s'
|
||||||
@ -69,8 +79,10 @@ fun! s:CallGlobReplace(str)
|
|||||||
endwhile
|
endwhile
|
||||||
let argfileglob=str[idx : ]
|
let argfileglob=str[idx : ]
|
||||||
endif
|
endif
|
||||||
call GlobSearchReplace( argfileglob, arg0, arg1, argflags)
|
exe 'call '.a:func.'( argfileglob, arg0, arg1, argflags)'
|
||||||
|
" call GlobSearchReplace( argfileglob, arg0, arg1, argflags)
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
com! -nargs=1 Gsub :call s:CallGlobReplace(<q-args>)
|
com! -nargs=1 Gsub :call s:CallGlobReplace('GlobSearchReplace', <q-args>)
|
||||||
|
com! -nargs=1 Bsub :call s:CallGlobReplace('BufSearchReplace', <q-args>)
|
||||||
|
|
||||||
|
@ -1,73 +1,73 @@
|
|||||||
" Language : Netrw Remote-Directory Listing Syntax
|
" Language : Netrw Remote-Directory Listing Syntax
|
||||||
" Maintainer : Charles E. Campbell, Jr.
|
" Maintainer : Charles E. Campbell, Jr.
|
||||||
" Last change: Aug 08, 2007
|
" Last change: Aug 08, 2007
|
||||||
" Version : 10
|
" Version : 10
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
|
|
||||||
" Syntax Clearing: {{{1
|
" Syntax Clearing: {{{1
|
||||||
if version < 600
|
if version < 600
|
||||||
syntax clear
|
syntax clear
|
||||||
elseif exists("b:current_syntax")
|
elseif exists("b:current_syntax")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" Directory List Syntax Highlighting: {{{1
|
" Directory List Syntax Highlighting: {{{1
|
||||||
syn cluster NetrwGroup contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion,netrwCopyTgt
|
syn cluster NetrwGroup contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion,netrwCopyTgt
|
||||||
|
|
||||||
syn match netrwSpecial "\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify
|
syn match netrwSpecial "\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify
|
||||||
syn match netrwDir "\.\{1,2}/" contains=netrwClassify
|
syn match netrwDir "\.\{1,2}/" contains=netrwClassify
|
||||||
syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify
|
syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify
|
||||||
syn match netrwDir "^\S*/" contains=netrwClassify
|
syn match netrwDir "^\S*/" contains=netrwClassify
|
||||||
syn match netrwSizeDate "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s" contains=netrwDateSep skipwhite nextgroup=netrwTime
|
syn match netrwSizeDate "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s" contains=netrwDateSep skipwhite nextgroup=netrwTime
|
||||||
syn match netrwSymLink "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)" contains=netrwClassify
|
syn match netrwSymLink "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)" contains=netrwClassify
|
||||||
syn match netrwExe "\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,netrwTreeIgnore
|
syn match netrwExe "\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,netrwTreeIgnore
|
||||||
syn match netrwTreeIgnore contained "^\%(| \)*"
|
syn match netrwTreeIgnore contained "^\%(| \)*"
|
||||||
|
|
||||||
syn match netrwClassify "[*=|@/]\ze\%(\s\{2,}\|$\)" contained
|
syn match netrwClassify "[*=|@/]\ze\%(\s\{2,}\|$\)" contained
|
||||||
syn match netrwDateSep "/" contained
|
syn match netrwDateSep "/" contained
|
||||||
syn match netrwTime "\d\{1,2}:\d\{2}:\d\{2}" contained contains=netrwTimeSep
|
syn match netrwTime "\d\{1,2}:\d\{2}:\d\{2}" contained contains=netrwTimeSep
|
||||||
syn match netrwTimeSep ":"
|
syn match netrwTimeSep ":"
|
||||||
|
|
||||||
syn match netrwComment '".*\%(\t\|$\)' contains=@NetrwGroup
|
syn match netrwComment '".*\%(\t\|$\)' contains=@NetrwGroup
|
||||||
syn match netrwHide '^"\s*\(Hid\|Show\)ing:' skipwhite nextgroup=netrwHidePat
|
syn match netrwHide '^"\s*\(Hid\|Show\)ing:' skipwhite nextgroup=netrwHidePat
|
||||||
syn match netrwSlash "/" contained
|
syn match netrwSlash "/" contained
|
||||||
syn match netrwHidePat "[^,]\+" contained skipwhite nextgroup=netrwHideSep
|
syn match netrwHidePat "[^,]\+" contained skipwhite nextgroup=netrwHideSep
|
||||||
syn match netrwHideSep "," contained transparent skipwhite nextgroup=netrwHidePat
|
syn match netrwHideSep "," contained transparent skipwhite nextgroup=netrwHidePat
|
||||||
syn match netrwSortBy "Sorted by" contained transparent skipwhite nextgroup=netrwList
|
syn match netrwSortBy "Sorted by" contained transparent skipwhite nextgroup=netrwList
|
||||||
syn match netrwSortSeq "Sort sequence:" contained transparent skipwhite nextgroup=netrwList
|
syn match netrwSortSeq "Sort sequence:" contained transparent skipwhite nextgroup=netrwList
|
||||||
syn match netrwCopyTgt "Copy/Move Tgt:" contained transparent skipwhite nextgroup=netrwList
|
syn match netrwCopyTgt "Copy/Move Tgt:" contained transparent skipwhite nextgroup=netrwList
|
||||||
syn match netrwList ".*$" contained contains=netrwComma
|
syn match netrwList ".*$" contained contains=netrwComma
|
||||||
syn match netrwComma "," contained
|
syn match netrwComma "," contained
|
||||||
syn region netrwQuickHelp matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend contained
|
syn region netrwQuickHelp matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend contained
|
||||||
syn match netrwHelpCmd "\S\ze:" contained skipwhite nextgroup=netrwCmdSep
|
syn match netrwHelpCmd "\S\ze:" contained skipwhite nextgroup=netrwCmdSep
|
||||||
syn match netrwCmdSep ":" contained nextgroup=netrwCmdNote
|
syn match netrwCmdSep ":" contained nextgroup=netrwCmdNote
|
||||||
syn match netrwCmdNote ".\{-}\ze " contained
|
syn match netrwCmdNote ".\{-}\ze " contained
|
||||||
syn match netrwVersion "(netrw.*)" contained
|
syn match netrwVersion "(netrw.*)" contained
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" Highlighting Links: {{{1
|
" Highlighting Links: {{{1
|
||||||
if !exists("did_drchip_dbg_syntax")
|
if !exists("did_drchip_netrwlist_syntax")
|
||||||
let did_drchip_netrwlist_syntax= 1
|
let did_drchip_netrwlist_syntax= 1
|
||||||
hi link netrwClassify Function
|
hi link netrwClassify Function
|
||||||
hi link netrwCmdSep Delimiter
|
hi link netrwCmdSep Delimiter
|
||||||
hi link netrwComment Comment
|
hi link netrwComment Comment
|
||||||
hi link netrwDir Directory
|
hi link netrwDir Directory
|
||||||
hi link netrwHelpCmd Function
|
hi link netrwHelpCmd Function
|
||||||
hi link netrwHidePat Statement
|
hi link netrwHidePat Statement
|
||||||
hi link netrwList Statement
|
hi link netrwList Statement
|
||||||
hi link netrwVersion Identifier
|
hi link netrwVersion Identifier
|
||||||
hi link netrwSymLink Special
|
hi link netrwSymLink Special
|
||||||
hi link netrwExe PreProc
|
hi link netrwExe PreProc
|
||||||
hi link netrwDateSep Delimiter
|
hi link netrwDateSep Delimiter
|
||||||
|
|
||||||
hi link netrwTimeSep netrwDateSep
|
hi link netrwTimeSep netrwDateSep
|
||||||
hi link netrwComma netrwComment
|
hi link netrwComma netrwComment
|
||||||
hi link netrwHide netrwComment
|
hi link netrwHide netrwComment
|
||||||
hi link netrwMarkFile Identifier
|
hi link netrwMarkFile Identifier
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Current Syntax: {{{1
|
" Current Syntax: {{{1
|
||||||
let b:current_syntax = "netrwlist"
|
let b:current_syntax = "netrwlist"
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" vim: ts=8 fdm=marker
|
" vim: ts=8 fdm=marker
|
||||||
|
Loading…
x
Reference in New Issue
Block a user