1
1
" yankring.vim - Yank / Delete Ring for Vim
2
2
" ---------------------------------------------------------------
3
- " Version: 10 .0
3
+ " Version: 11 .0
4
4
" Authors: David Fishburn <[email protected] >
5
- " Last Modified: 2010 Jan 24
5
+ " Last Modified: 2010 Aug 09
6
6
" Script: http://www.vim.org/scripts/script.php?script_id=1234
7
7
" Based On: Mocked up version by Yegappan Lakshmanan
8
8
" http://groups.yahoo.com/group/vim/post?act=reply&messageNum=34406
@@ -18,7 +18,7 @@ if v:version < 700
18
18
finish
19
19
endif
20
20
21
- let loaded_yankring = 100
21
+ let loaded_yankring = 110
22
22
23
23
let s: yr_has_voperator = 0
24
24
if v: version > 701 || ( v: version == 701 && has (" patch205" ) )
@@ -52,6 +52,11 @@ if !exists('g:yankring_max_element_length')
52
52
let g: yankring_max_element_length = 1048576
53
53
endif
54
54
55
+ " Warn if truncation occurs
56
+ if ! exists (' g:yankring_warn_on_truncate' )
57
+ let g: yankring_warn_on_truncate = 1
58
+ endif
59
+
55
60
" Allow the user to specify if the plugin is enabled or not
56
61
if ! exists (' g:yankring_enabled' )
57
62
let g: yankring_enabled = 1
@@ -632,7 +637,7 @@ endfunction
632
637
633
638
" Resets the common script variables for managing the ring.
634
639
function ! s: YRReset ()
635
- let s: yr_history_list = []
640
+ call s: YRHistoryDelete ()
636
641
" Update the history file
637
642
call s: YRHistorySave ()
638
643
endfunction
@@ -1549,6 +1554,11 @@ function! s:YRMapsCreate(...)
1549
1554
1550
1555
let g: yankring_enabled = 1
1551
1556
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
1552
1562
endfunction
1553
1563
1554
1564
@@ -1638,38 +1648,31 @@ function! s:YRMapsDelete(...)
1638
1648
endfunction
1639
1649
1640
1650
function ! s: YRGetValElemNbr ( position, type )
1641
-
1642
1651
let needed_elem = a: position
1643
1652
1644
1653
" The List which contains the items in the yankring
1645
1654
" history is also ordered, most recent at the top
1646
1655
let elem = s: YRMRUGet (' s:yr_history_list' , needed_elem)
1647
1656
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' )
1651
1667
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' )
1663
1669
endif
1664
- else
1665
- return -1
1666
1670
endif
1667
1671
1668
- return " "
1672
+ return elem
1669
1673
endfunction
1670
1674
1671
1675
function ! s: YRMRUReset ( mru_list )
1672
-
1673
1676
let {a: mru_list } = []
1674
1677
1675
1678
return 1
@@ -1683,6 +1686,16 @@ function! s:YRMRUElemFormat( element, element_type )
1683
1686
let elem = a: element
1684
1687
if g: yankring_max_element_length != 0
1685
1688
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
1686
1699
endif
1687
1700
if s: yr_history_version == ' v1'
1688
1701
let elem = escape (elem, ' @' )
@@ -1754,7 +1767,6 @@ function! s:YRMRUAdd( mru_list, element, element_type )
1754
1767
endfunction
1755
1768
1756
1769
function ! s: YRMRUDel ( mru_list, elem_nbr )
1757
-
1758
1770
if a: elem_nbr >= 0 && a: elem_nbr < s: yr_count
1759
1771
call remove ({a: mru_list }, a: elem_nbr )
1760
1772
call s: YRHistorySave ()
@@ -1763,6 +1775,23 @@ function! s:YRMRUDel( mru_list, elem_nbr )
1763
1775
return 1
1764
1776
endfunction
1765
1777
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
+
1766
1795
function ! s: YRHistoryRead ()
1767
1796
let refresh_needed = 1
1768
1797
let yr_history_list = []
@@ -1801,20 +1830,22 @@ function! s:YRHistoryRead()
1801
1830
endfunction
1802
1831
1803
1832
function ! s: YRHistorySave ()
1833
+ let yr_filename = s: yr_history_file_ {s: yr_history_version }
1834
+
1804
1835
if len (s: yr_history_list ) > g: yankring_max_history
1805
1836
" Remove items which exceed the max # specified
1806
1837
call remove (s: yr_history_list , g: yankring_max_history )
1807
1838
endif
1808
1839
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 )
1810
1841
1811
1842
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 )
1813
1844
let s: yr_count = len (s: yr_history_list )
1814
1845
else
1815
1846
call s: YRErrorMsg (
1816
1847
\ ' YRHistorySave: Unable to save yankring history file: ' .
1817
- \ s: yr_history_file_ { s: yr_history_version }
1848
+ \ yr_filename
1818
1849
\ )
1819
1850
endif
1820
1851
endfunction
@@ -2431,30 +2462,37 @@ command! -range -bang -nargs=? YRYankRange <line1>,<line2>call s:YRYankRa
2431
2462
if has (" gui_running" ) && has (" menu" ) && g: yankring_default_menu_mode != 0
2432
2463
if g: yankring_default_menu_mode == 1
2433
2464
let menuRoot = ' YankRing'
2465
+ let menuPriority = ' '
2434
2466
elseif g: yankring_default_menu_mode == 2
2435
2467
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 : ' '
2436
2472
else
2437
2473
let menuRoot = ' &Plugin.&YankRing'
2474
+ let menuPriority = ' '
2438
2475
endif
2439
2476
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>'
2446
2489
endif
2447
2490
2448
2491
if g: yankring_enabled == 1
2449
2492
" Create YankRing Maps
2450
2493
call s: YRMapsCreate ()
2451
2494
endif
2452
2495
2453
- if exists (' *YRRunAfterMaps' )
2454
- " This will allow you to override the default maps if necessary
2455
- call YRRunAfterMaps ()
2456
- endif
2457
-
2458
2496
call s: YRInit ()
2459
2497
call s: YRHistoryRead ()
2460
2498
0 commit comments