11" yankring.vim - Yank / Delete Ring for Vim
22" ---------------------------------------------------------------
3- " Version: 10 .0
3+ " Version: 11 .0
44" Authors: David Fishburn <dfishburn.vim@gmail.com>
5- " Last Modified: 2010 Jan 24
5+ " Last Modified: 2010 Aug 09
66" Script: http://www.vim.org/scripts/script.php?script_id=1234
77" Based On: Mocked up version by Yegappan Lakshmanan
88" http://groups.yahoo.com/group/vim/post?act=reply&messageNum=34406
@@ -18,7 +18,7 @@ if v:version < 700
1818 finish
1919endif
2020
21- let loaded_yankring = 100
21+ let loaded_yankring = 110
2222
2323let s: yr_has_voperator = 0
2424if v: version > 701 || ( v: version == 701 && has (" patch205" ) )
@@ -52,6 +52,11 @@ if !exists('g:yankring_max_element_length')
5252 let g: yankring_max_element_length = 1048576
5353endif
5454
55+ " Warn if truncation occurs
56+ if ! exists (' g:yankring_warn_on_truncate' )
57+ let g: yankring_warn_on_truncate = 1
58+ endif
59+
5560" Allow the user to specify if the plugin is enabled or not
5661if ! exists (' g:yankring_enabled' )
5762 let g: yankring_enabled = 1
@@ -632,7 +637,7 @@ endfunction
632637
633638" Resets the common script variables for managing the ring.
634639function ! s: YRReset ()
635- let s: yr_history_list = []
640+ call s: YRHistoryDelete ()
636641 " Update the history file
637642 call s: YRHistorySave ()
638643endfunction
@@ -1549,6 +1554,11 @@ function! s:YRMapsCreate(...)
15491554
15501555 let g: yankring_enabled = 1
15511556 let s: yr_maps_created = 1
1557+
1558+ if exists (' *YRRunAfterMaps' )
1559+ " This will allow you to override the default maps if necessary
1560+ call YRRunAfterMaps ()
1561+ endif
15521562endfunction
15531563
15541564
@@ -1638,38 +1648,31 @@ function! s:YRMapsDelete(...)
16381648endfunction
16391649
16401650function ! s: YRGetValElemNbr ( position, type )
1641-
16421651 let needed_elem = a: position
16431652
16441653 " The List which contains the items in the yankring
16451654 " history is also ordered, most recent at the top
16461655 let elem = s: YRMRUGet (' s:yr_history_list' , needed_elem)
16471656
1648- if elem >= 0
1649- if a: type == ' t'
1650- return matchstr (elem, ' ^.*,\zs.*$' )
1657+ if a: type == ' t'
1658+ let elem = matchstr (elem, ' ^.*,\zs.*$' )
1659+ else
1660+ let elem = matchstr (elem, ' ^.*\ze,.*$' )
1661+ if s: yr_history_version == ' v1'
1662+ " Match three @@@ in a row as long as it is not
1663+ " preceeded by a @@@
1664+ " v1
1665+ let elem = substitute (elem, s: yr_history_v1_nl_pat , " \n " , ' g' )
1666+ let elem = substitute (elem, ' \\@' , ' @' , ' g' )
16511667 else
1652- let elem = matchstr (elem, ' ^.*\ze,.*$' )
1653- if s: yr_history_version == ' v1'
1654- " Match three @@@ in a row as long as it is not
1655- " preceeded by a @@@
1656- " v1
1657- let elem = substitute (elem, s: yr_history_v1_nl_pat , " \n " , ' g' )
1658- let elem = substitute (elem, ' \\@' , ' @' , ' g' )
1659- else
1660- let elem = substitute (elem, s: yr_history_v2_nl_pat , " \n " , ' g' )
1661- endif
1662- return elem
1668+ let elem = substitute (elem, s: yr_history_v2_nl_pat , " \n " , ' g' )
16631669 endif
1664- else
1665- return -1
16661670 endif
16671671
1668- return " "
1672+ return elem
16691673endfunction
16701674
16711675function ! s: YRMRUReset ( mru_list )
1672-
16731676 let {a: mru_list } = []
16741677
16751678 return 1
@@ -1683,6 +1686,16 @@ function! s:YRMRUElemFormat( element, element_type )
16831686 let elem = a: element
16841687 if g: yankring_max_element_length != 0
16851688 let elem = strpart (a: element , 0 , g: yankring_max_element_length )
1689+ if (g: yankring_warn_on_truncate > 0 )
1690+ let bytes = len (a: element ) - len (elem)
1691+ if (bytes > 0 )
1692+ call s: YRWarningMsg (" Yankring truncated its element by " .
1693+ \ bytes.
1694+ \ " bytes due to a g:yankring_max_element_length of " .
1695+ \ g: yankring_max_element_length
1696+ \ )
1697+ endif
1698+ endif
16861699 endif
16871700 if s: yr_history_version == ' v1'
16881701 let elem = escape (elem, ' @' )
@@ -1754,7 +1767,6 @@ function! s:YRMRUAdd( mru_list, element, element_type )
17541767endfunction
17551768
17561769function ! s: YRMRUDel ( mru_list, elem_nbr )
1757-
17581770 if a: elem_nbr >= 0 && a: elem_nbr < s: yr_count
17591771 call remove ({a: mru_list }, a: elem_nbr )
17601772 call s: YRHistorySave ()
@@ -1763,6 +1775,23 @@ function! s:YRMRUDel( mru_list, elem_nbr )
17631775 return 1
17641776endfunction
17651777
1778+ function ! s: YRHistoryDelete ()
1779+ let s: yr_history_list = []
1780+ let yr_filename = s: yr_history_file_ {s: yr_history_version }
1781+
1782+ if filereadable (yr_filename)
1783+ let rc = delete (yr_filename)
1784+ if rc != 0
1785+ call s: YRErrorMsg (
1786+ \ ' YRHistoryDelete: Unable to delete the yankring history file: ' .
1787+ \ yr_filename
1788+ \ )
1789+ endif
1790+ endif
1791+
1792+ return 0
1793+ endfunction
1794+
17661795function ! s: YRHistoryRead ()
17671796 let refresh_needed = 1
17681797 let yr_history_list = []
@@ -1801,20 +1830,22 @@ function! s:YRHistoryRead()
18011830endfunction
18021831
18031832function ! s: YRHistorySave ()
1833+ let yr_filename = s: yr_history_file_ {s: yr_history_version }
1834+
18041835 if len (s: yr_history_list ) > g: yankring_max_history
18051836 " Remove items which exceed the max # specified
18061837 call remove (s: yr_history_list , g: yankring_max_history )
18071838 endif
18081839
1809- let rc = writefile (s: yr_history_list , s: yr_history_file_ { s: yr_history_version } )
1840+ let rc = writefile (s: yr_history_list , yr_filename )
18101841
18111842 if rc == 0
1812- let s: yr_history_last_upd = getftime (s: yr_history_file_ { s: yr_history_version } )
1843+ let s: yr_history_last_upd = getftime (yr_filename )
18131844 let s: yr_count = len (s: yr_history_list )
18141845 else
18151846 call s: YRErrorMsg (
18161847 \ ' YRHistorySave: Unable to save yankring history file: ' .
1817- \ s: yr_history_file_ { s: yr_history_version }
1848+ \ yr_filename
18181849 \ )
18191850 endif
18201851endfunction
@@ -2431,30 +2462,37 @@ command! -range -bang -nargs=? YRYankRange <line1>,<line2>call s:YRYankRa
24312462if has (" gui_running" ) && has (" menu" ) && g: yankring_default_menu_mode != 0
24322463 if g: yankring_default_menu_mode == 1
24332464 let menuRoot = ' YankRing'
2465+ let menuPriority = ' '
24342466 elseif g: yankring_default_menu_mode == 2
24352467 let menuRoot = ' &YankRing'
2468+ let menuPriority = ' '
2469+ elseif g: yankring_default_menu_mode == 3
2470+ let menuRoot = exists (" g:yankring_menu_root" ) ? g: yankring_menu_root : ' &Plugin.&YankRing'
2471+ let menuPriority = exists (" g:yankring_menu_priority" ) ? yankring_menu_priority : ' '
24362472 else
24372473 let menuRoot = ' &Plugin.&YankRing'
2474+ let menuPriority = ' '
24382475 endif
24392476
2440- exec ' noremenu <script> ' .menuRoot.' .YankRing\ Window :YRShow<CR>'
2441- exec ' noremenu <script> ' .menuRoot.' .YankRing\ Search :YRSearch<CR>'
2442- exec ' noremenu <script> ' .menuRoot.' .Replace\ with\ Previous :YRReplace '' -1'' , '' P'' <CR>'
2443- exec ' noremenu <script> ' .menuRoot.' .Replace\ with\ Next :YRReplace '' 1'' , '' P'' <CR>'
2444- exec ' noremenu <script> ' .menuRoot.' .Clear :YRClear<CR>'
2445- exec ' noremenu <script> ' .menuRoot.' .Toggle :YRToggle<CR>'
2477+ let leader = ' \'
2478+ if exists (' g:mapleader' )
2479+ let leader = g: mapleader
2480+ endif
2481+ let leader = escape (leader , ' \' )
2482+
2483+ exec ' noremenu <script> ' .menuPriority.' ' .menuRoot.' .YankRing\ Window :YRShow<CR>'
2484+ exec ' noremenu <script> ' .menuPriority.' ' .menuRoot.' .YankRing\ Search :YRSearch<CR>'
2485+ exec ' noremenu <script> ' .menuPriority.' ' .menuRoot.' .Replace\ with\ Previous<TAB>' .leader .' <C-P> :YRReplace '' -1'' , '' P'' <CR>'
2486+ exec ' noremenu <script> ' .menuPriority.' ' .menuRoot.' .Replace\ with\ Next<TAB>' .leader .' <C-N> :YRReplace '' 1'' , '' P'' <CR>'
2487+ exec ' noremenu <script> ' .menuPriority.' ' .menuRoot.' .Clear :YRClear<CR>'
2488+ exec ' noremenu <script> ' .menuPriority.' ' .menuRoot.' .Toggle :YRToggle<CR>'
24462489endif
24472490
24482491if g: yankring_enabled == 1
24492492 " Create YankRing Maps
24502493 call s: YRMapsCreate ()
24512494endif
24522495
2453- if exists (' *YRRunAfterMaps' )
2454- " This will allow you to override the default maps if necessary
2455- call YRRunAfterMaps ()
2456- endif
2457-
24582496call s: YRInit ()
24592497call s: YRHistoryRead ()
24602498
0 commit comments