summaryrefslogtreecommitdiffstats
path: root/vim/doc/yankring.txt
blob: 41460f12f2fd2b41c50f23210b2868f8a835e0f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
*yankring.txt*      For Vim version 7.0. 

Author:	        David Fishburn                             August 29, 2009
Version:        11.0

For instructions on installing this file, type
	:help add-local-help |add-local-help| inside Vim.
    
Homepage: http://vim.sourceforge.net/script.php?script_id=1234


==============================================================================
1. Contents                                      *yankring* *yankring-contents*

    1. Contents...............................: |yankring-contents|
    2. Description............................: |yankring-description|
    3. Configuration..........................: |yankring-configure|
       3.1 Global Variables...................: |yankring-globals|
       3.2 Default Keys.......................: |yankring-mappings|
       3.3 Customizing Maps...................: |yankring-custom-maps|
       3.4 Customizing Menus..................: |yankring-custom-menus|
    4. Using the YankRing Window..............: |yankring-window|
    5. Commands...............................: |yankring-commands|
       5.1  YRToggle..........................: |YRToggle|
       5.2  YRClear...........................: |YRClear|
       5.3  YRShow............................: |YRShow|
       5.5  YRGetElem.........................: |YRGetElem|
       5.6  YRGetMultiple.....................: |YRGetMultiple|
       5.7  YRPush............................: |YRPush|
       5.8  YRPop.............................: |YRPop|
       5.9  YRYankCount.......................: |YRYankCount|
       5.10 YRYankRange.......................: |YRYankRange|
       5.11 YRDeleteRange.....................: |YRDeleteRange|
       5.12 YRPaste...........................: |YRPaste|
       5.13 YRReplace.........................: |YRReplace|
       5.14 YRMapsCreate......................: |YRMapsCreate|
       5.15 YRMapsDelete......................: |YRMapsDelete|
       5.16 YRSearch..........................: |YRSearch|
       5.17 YRRunAfterMaps....................: |yankring-custom-maps|
    6. Tutorial...............................: |yankring-tutorial|
       6.1  YRShow............................: |YRShow-example|
       6.2  YRReplace.........................: |YRReplace-example|
       6.3  YRPush............................: |YRPush-example|
       6.4  YRClear...........................: |YRClear-example|
       6.8  YRPop.............................: |YRPop-example|
       6.9  Visual modes......................: |yankring-visual-example|
       6.10 Using ranges......................: |YRYankRange-example|
       6.11 :global...........................: |global-example|
       6.12 YRSearch..........................: |YRSearch-example|
    7. History................................: |yankring-history|


==============================================================================
2. Description                                   *yankring-description*

Vim already maintains a list of numbered registers containing the last 9
deletes.  These previous deletes can be referenced using [register]p, so 
"1p will paste the last delete, "2p the 2nd last delete.  For more
information see |quote_number|.

Vim does not provide any mechanism to reference previously yanked text.  
In Emacs this feature is called the "kill ring".

The YankRing plugin allows the user to configure the number of yanked
and deleted text.  After text has been pasted, it can be replaced with
a previous value from the yankring.

As of version 3.0, the yankring's content will persist (by default) 
between starting and stopping Vim.

The plugin can be toggled on and off, and supports:
   Ranges
   Registers
   Counts
   All visual modes
   All motions
   All text-objects

If you have any suggestions for the improvement of this plugin, see the
yankring.vim file for my email address.  Suggestions / bug reports are
always welcome.

For details on the changes between versions see |yankring-history|.


==============================================================================
3. Configuration                                 *yankring-configure*

The YankRing allows the user to choose which keys are to be assigned to
the various commands.  By default, the YankRing chose keys identical
with Vim's standard behaviour/keys.  

3.1 Global Variables                             *yankring-globals*

You can customize the YankRing by setting various global variables in
your |.vimrc|.
>
    yankring_max_history 
<       Default: 100
        Controls how many elements to save in the yankring. >
            let g:yankring_max_history = 100
    yankring_min_element_length 
<       Default: 1
        If the yanked element has a length less than this value 
        if will not be added to the YankRing.  This can be useful if 
        you want to bypass single letter deletes by adding the 
        following to your .vimrc: >
            let g:yankring_min_element_length = 2
    yankring_max_element_length 
<       Default: 1048576 (1M)
        Will truncate a new entry to the specified maximum.  If 
        g:yankring_max_element_length is set to 0, there is no limit. >
            let g:yankring_max_element_length = 4194304 " 4M
    yankring_max_display  
<       Default: 500
        When the YankRing window is opened, each element is displayed on a
        separate line.  Since each yank could be very large, the display of
        the element is limited to the above default.  >
            let g:yankring_max_display = 70
    yankring_enabled
<       Default: 1
        If you do not want to YankRing enabled by default, set this 
        variable in your |vimrc|. >
            let g:yankring_enabled = 0  " Disables the yankring
    yankring_persist  
<       Default: 1
        If you have enabled the storing of global variables in the |viminfo|
        file, the YankRing will be default persist the contents of the ring
        between starting and stopping Vim.  To disable this feature: >
            let g:yankring_persist = 0
    yankring_share_between_instances
<       Default: 1
        By default, any instance of Vim will share the same yankring
        history file.  But if want each instance to have their own history
        you can set this option to 0.  Setting g:yankring_persist = 0 and
        g:yankring_share_between_instances = 0 will ensure no 2 instances
        of Vim share the same YankRing history AND the history is not 
        remembered the next time Vim is started. >
            let g:yankring_share_between_instances = 0
    yankring_dot_repeat_yank
<       Default: Based on the Vim cpoption setting
        By default Vim will not repeat (using '.') yanking of text.  This can
        be controlled via the |'cpoptions'| setting.  The YankRing now respects
        the cpoptions setting, if 'y' is included and you press '.', the
        previous yank command is repeated and added to the yankring.
        You can also add this behaviour by setting this in your |vimrc|: >
            let g:yankring_dot_repeat_yank = 1
    yankring_ignore_duplicate
<       Default: 1
        Duplicates will not be added to the YankRing by default.  If a
        duplicate is found, that element will be moved to the top of the
        yankring.  This can be controlled by setting this in your |vimrc|: >
            let g:yankring_ignore_duplicate = 0 
    yankring_map_dot
<       Default: 1
        If the '.' (repeat) command should be mapped by the yankring.  Since
        most of the normal commands yy,dd,dw,... are mapped by the yankring,
        if g:yankring_map_dot is false the . operator will not repeat these
        operations.  The YankRing tracks several of the internal Vim registers
        and decides whether an action was the result of the YankRing or an
        action outside of it.  If the previous action was a result of the
        yankring, it will be executed again.  If it was an action outside of
        the yankring, it asks Vim to repeat the command. >
            let g:yankring_map_dot = 1
    yankring_paste_using_g
<       Default: 1
        By default [p] and [P] are mapped to interact with the yankring.  This
        option controls whether [gp] and [gP] are also mapped.  Setting this
        option to 0 will not create these maps.  >
            let g:yankring_paste_using_g = 1
    yankring_window_use_separate 
<       Default: 1
        This is a new feature as of the 2.0 release.  The YankRing now uses a
        separate split buffer to display the yankring.  There are many buffer
        specific maps that allow you to operate over the various elements from
        within the yankring.  Setting this option to 0, uses the 1.0
        interface. >
            let g:yankring_window_use_separate = 0
    yankring_window_auto_close
<       Default: 1
        By default once you choose an option in the YankRing buffer, the
        action is performed and the buffer window is closed, returning you to
        the original buffer.  This option can be toggled from within the
        YankRing buffer by pressing [a].  The YankRing buffer status line
        visually indicates where auto close is enabled or disabled.  There are
        many times where you need to paste (or delete) many items from the
        yankring.  Pressing [a], disables auto close, allows you to paste many
        items, and finally you can press [a] to re-enable auto close, followed
        by [q] to quit the buffer window. >
            let g:yankring_window_auto_close = 1
    yankring_window_use_horiz
<       Default: 1
        When the YankRing window is opened, it uses a horizontal split at the
        bottom of the Vim window.  It can optionally use a vertical split by
        setting this option to 0.  >
            let g:yankring_window_use_horiz = 0  " Use vertical split
    yankring_window_height
<       Default: 1
        If using a horizontal split, this option controls how high to make
        the window.  >
            let g:yankring_window_height = 8
    yankring_window_width
<       Default: 1
        If using a vertical split, this option controls how wide to make the
        window.  >
            let g:yankring_window_width = 30
    yankring_window_use_bottom
<       Default: 1
        If using a horizontal split, this option control whether the window is
        opened at the top or bottom of the Vim window.  Setting this option to
        0 forces the window to open at the top of the Vim window.  >
            let g:yankring_window_use_bottom = 1
    yankring_window_use_right
<       Default: 1
        If using a vertical split, this option control whether the window is
        opened on the left or right side of the Vim window.  To force the
        window to open on the left side, set this option to 0.  >
            let g:yankring_window_use_right = 1
    yankring_window_increment
<       Default: 1
        If using a vertical split the default width of the vertical window may
        be too narrow to view enough of the elements.  Pressing [<space>] will
        increase the size of the window by this number of columns.  Pressing
        [<space>] again will toggle it back to the original size.  >
            let g:yankring_window_increment = 50
    yankring_manage_numbered_reg
<       Default: 0
        Vim already maintains a list of numbered registers containing the last
        yanked item and the previous 9 deletes.  These items can be referenced
        using [register]p, so "0p will paste the last yank, "1p will paste the
        last delete, "2p the 2nd last delete.  For more information see
        |quote_number|.
        If you wish the YankRing to maintain these numbered registers so 
        the top 10 elements in the YankRing are in the numbered reqisters 0-9
        you can put the following in your |vimrc| >
            let g:yankring_manage_numbered_reg = 1
    yankring_ignore_operator
<       Default: 'g~ gu gU ! = gq g? > < zf g@'
        There are a number of Vim operations which do not change any 
        registers, and therefore should not be captured by the yankring.
        This list is used to ignore the appropriate operators.
        You can put the following in your |vimrc| >
            let g:yankring_ignore_operator = 'g~ gu gU ! = gq g? > < zf g@'
    yankring_history_dir
<       Default: $HOME
        The YankRing stores the text in a file.  This global variable
        allows you to customize where the file(s) will be stored.
        You can put the following in your |vimrc| >
            let g:yankring_history_dir = '$VIM'
    yankring_history_file
<       Default: 'yankring_history'
        The history filename prefix can be controlled by setting this 
        variable.
        You can put the following in your |vimrc| >
            let g:yankring_history_file = 'my_yankring_history_file'
    yankring_clipboard_monitor
<       Default: 1
        When flipping between applications I find I often copy text
        and attempt to use it inside of Vim.  This is typically easy
        by simply using "+p, but there are times when I will repeatedly
        want to use the same text later on.  By default, the YankRing
        will detect when Vim regains focus and check if the clipboard
        has changed since it last checked.  If so, it will add the contents
        of the clipboard to the YankRing.  To disable this feature 
        you can put the following in your |vimrc| >
            let g:yankring_clipboard_monitor = 0
    yankring_paste_check_default_buffer
<       Default: 1
        If the default register has changed without the YankRing registering
        the change the YankRing will paste the top item from the history
		rather than what is currently in the default register.
        This option allows you to control the behaviour.  Plugins can
        intentionally change the default buffer which the YankRing has
		no way to noticing.  To disable this feature you can put the following
		in your |vimrc| >
            let g:yankring_paste_check_default_buffer = 0
    yankring_default_menu_mode
<       - Menus are useful for a number of reasons:
              See a list of available commands.
              Remember what the shortcut maps are.
              Have a floating menu when using the plugin a lot.
              Quick reference guide.
          There are four settings that will control the placement
          of the menu: 
              "0": Turns the menu off.
              "1": Turns the 'Yankring' menu on with no menu shortcut.
              "2": Turns the 'Yankring 'menu on with <alt>-y as the shortcut.
              "3": Turns the 'Plugin -> YankRing' menu on with <alt>-y as 
                   the shortcut.
          This option defaults to a value of 3 and can be changed
          by adding the following to your vimrc: >
            :let  g:yankring_default_menu_mode = 3
    yankring_menu_root
<       - Can be used in conjuction with g:yankring_default_menu_mode = 3 but 
          it also allows you to control the fullname and location of the
          YankRing menu.  To create the menu: 'MyPlugins -> YankRing' you 
          can create the following variable: >
            :let  g:yankring_menu_root = 'MyPlugin.&YankRing'
    yankring_menu_priority
<       - Menus are created in a documented order by Vim (|menu-priority|).
          This option allows you to override the setting and shift the 
          YankRing menu item to the left between the Edit and Tools menu. >
            :let  g:yankring_menu_priority = 30

<
3.2 Default Keys                                 *yankring-mappings*

You can choose to override the default keys by creating these global
variables in your |vimrc|.
>
    yankring_n_keys
<       n - normal mode
        Default Vim 7.2: 
            'Y D x X'
        Default Vim 7.1 and below: 
            'x yy dd yw dw ye de yE dE yiw diw yaw daw y$ d$ Y D yG dG ygg dgg'

        With the introduction of some new features in Vim 7.2 it is no longer
        necessary to list all cmds which the YankRing will act upon.  
        The yankring_n_keys only lists actions which an omap cannot be used.
        Using the yankring_separator, the above list is parsed and 
        individual mappings are created.  For each of the above normal 
        commands the YankRing will include the text those commands 
        acted upon.   There are many ways to accomplish the same result 
        in Vim, if you do not see a common key stroke you regularly use
        simply add the following to your |vimrc| with the additional 
        keys you wished mapped.  >
            let g:yankring_n_keys = 'Y D x X'
    yankring_o_keys
<       o - omap mode
        Default:
            Standard motions: 'b B w W e E d y $ G ;'
            Vim text objects: ' iw iW aw aW as is ap ip a] a[ i] i['
                              'a) a( ab i) i( ib a> a< i> i< at it '
                              'a} a{ aB i} i{ iB a" a'' a` i" i'' i`'

        As of Vim 7.2 omaps are used to capture changes to the registers
        in Vim.  All of the standard motion commands are captured.
        New to YankRing 5.0 all default Vim text objects are also 
        captured.
        Using the yankring_separator, the above list is parsed and 
        individual mappings are created.  For each of the above normal 
        commands the YankRing will include the text those commands 
        acted upon.   There are many ways to accomplish the same result 
        in Vim, if you do not see a common key stroke you regularly use
        simply add the following to your |vimrc| with the additional 
        keys you wished mapped.  >
            let g:yankring_o_keys = 'b B w W e E d y $ G ; iw iW aw aW'
    yankring_zap_keys 
<       Default: 'f F t T / ?'
        omaps are enough for most operations except for f and t.
        These motions prompt the user for a character or string which 
        they should act upon.  These must be treated as a special case 
        in YankRing. >
            let g:yankring_zap_keys = 'f t'
    yankring_ignore_operator
<       Default: 'g~ gu gU ! = gq g? > < zf g@'
        There are certain motions which do not update any registers
        in Vim.  If the registers are not changed, there is nothing
        the YankRing can capture.  This list instructs the YankRing
        to ignore any action for these keys. >
            let g:yankring_ignore_operator = 'g~ gu gU'
    yankring_v_key
<       v - visual mode
        Default: y 
        Yanks visually select text.   >
    yankring_del_v_key
<       n - normal mode
        Default: d 
        The visually select text is included in the YankRing and deleted. >
    yankring_paste_n_bkey
<       n - normal mode
        b - before
        Default: P
        The default Vim paste key will retrieve from the yankring.  This 
        will paste the text BEFORE the current position. 
        There is a special check to see if the text in the default paste
        register is the same as what is in the current position of the 
        yankring.  If it is not, we assume the user used some other 
        mechanism to yank text (ie yt<character>).  If this is the case
        we paste the text in the default paste buffer.  Using <C-P> the
        text can be replaced with the current entry from the yankring.
        Since there are many ways to do things in Vim, this provides
        the best integration. >
    yankring_paste_n_akey
<       n - normal mode
        a - after
        Default: p 
        The default Vim paste key will retrieve from the yankring.  This 
        will paste the text AFTER the current position. 
        There is a special check to see if the text in the default paste
        register is the same as what is in the current position of the 
        yankring.  If it is not, we assume the user used some other 
        mechanism to yank text (ie yt<character>).  If this is the case
        we paste the text in the default paste buffer.  Using <C-P> the
        text can be replaced with the current entry from the yankring.
        Since there are many ways to do things in Vim, this provides
        the best integration. >
    yankring_paste_v_key
<       n - normal mode
        Default: p
        This will replace the visually select text with the contents 
        from the yankring.   See yankring_paste_n_akey for additional
        details.  >
    yankring_replace_n_pkey
<       n - normal mode
        Default: <C-P>
        If you do not want to open the YankRing window to choose your
        selection, then you can paste (as usual) then use a YankRing 
        mapping to cycle through items in the YankRing.  This is especially
        useful if you know you recently used the text you are looking for.
        If you wish to cycle through the yankring, replacing the previously
        pasted text with the previous yanked text you can repeatedly press
        <C-P> (or whatever keystroke you choose to map it to).  This map
        moves backwards through the yankring, so you will retrieve your
        most recent yank.  

        I prefer not to use <C-P> since I like using that key to cycle 
        through all the matches in the QuickFix window.  You can add
        something similar to this in your |.vimrc| to get similar 
        functionality.

        On Windows use the ALT-< character to move through the YankRing.
        To determine what character # these are go into insert mode
        in a new buffer.  Press CTRL-V then ALT and the < key.
        Leave insert mode, move the cursor onto the character
        and press ga.  This will display the decimal, hex and octal
        representation of the character.  In this case it is 172. >
            if has('win32')
                let g:yankring_replace_n_pkey = '<Char-172>'
                let g:yankring_replace_n_nkey = '<Char-174>'
                " Instead map these keys to moving through items in the quickfix window.
                nnoremap <C-P> :cp<cr>
                nnoremap <C-N> :cn<cr>
            endif
<       Other users have also stated that this will work: >
            let g:yankring_replace_n_pkey = '<m-p>'
            let g:yankring_replace_n_nkey = '<m-n>'
    yankring_replace_n_nkey
<       n - normal mode
        Default: <C-N>
        If you do not want to open the YankRing window to choose your
        selection, then you can paste (as usual) then use a YankRing 
        mapping to cycle through items in the YankRing.  This is especially
        useful if you know you recently used the text you are looking for.
        If you wish to cycle through the yankring, replacing the previously
        pasted text with the next yanked text you can repeatedly press
        <C-N> (or whatever keystroke you choose to map it to).  This map
        moves forwards through the YankRing, so you will retrieve your
        most recent yank.  

        I prefer not to use <C-N> since I like using that key to cycle 
        through all the matches in the QuickFix window.  You can add
        something similar to this in your |.vimrc| to get similar 
        functionality.

        On Windows use the ALT-> character to move through the YankRing.
        To determine what character # these are go into insert mode
        in a new buffer.  Press CTRL-V then ALT and the > key.
        Leave insert mode, move the cursor onto the character
        and press ga.  This will display the decimal, hex and octal
        representation of the character.  In this case it is 174. >
        if has('win32')
            let g:yankring_replace_n_pkey = '<Char-172>'
            let g:yankring_replace_n_nkey = '<Char-174>'
            " Instead map these keys to moving through items in the quickfix window.
            nnoremap <C-P> :cp<cr>
            nnoremap <C-N> :cn<cr>
        endif
<       Other users have also stated that this will work: >
            let g:yankring_replace_n_pkey = '<m-p>'
            let g:yankring_replace_n_nkey = '<m-n>'

3.3 Customizing Maps                             *yankring-custom-maps*

The YankRing plugin uses the yankring_n_keys global variable to create 
a number of defaults maps.  The maps are of the form: >
    nnoremap Y  :<C-U>YRYankCount 'Y'<CR>
<
When capital Y is pressed, the YankRing will execute 'Y' and capture the
output from Vim.  But there are cases where you do not want the default
behaviour of Vim, since you have customized some of these maps.

In this case, I usually map Y to be |y$|, which makes it consistent with 
the |D| and |C| operators.  The way yankring_n_keys works does not allow
me to customize this behaviour.  Since many people may like to customize
the behaviour of these maps the YankRing will check to see if a
function called YRRunAfterMaps() exists.  If it does, it will call 
this function after it has created the maps.  So in my case, I created
the following function in my |vimrc|: >
    function! YRRunAfterMaps()
        nnoremap Y   :<C-U>YRYankCount 'y$'<CR>
    endfunction
<
You can do anything you need in this function.  >
        nnoremap Y   :<C-U>YRYankCount 'y$'<CR>
<
This line remaps Y (which the user presses) to the YRYankCount command.  The
YRYankCount tells Vim to execute y$ instead.

3.4 Customizing Menus                            *yankring-custom-menus*

There are several global variables which can be created in your vimrc to
allow you to customize where and what is displayed for the YankRing menu. 
Simply look up the following global variables: >
    yankring_default_menu_mode
    yankring_menu_root
    yankring_menu_priority


==============================================================================
4. Using the YankRing Window:                    *yankring-window*

This is a new feature as of the 2.0 release.  The YankRing uses a
separate split buffer to display the yankring.  There are many buffer
specific maps that allow you to operate over the various elements from
within the yankring.  

To display the YankRing buffer you can issue the :YRShow command.  For
convience you can map a key, <F11>, to this command: >
	:nnoremap <silent> <F11> :YRShow<CR>

Status line~
The first line in the YankRing window is the status line. >
    AutoClose=1;ClipboardMonitor=1;Cmds:p,P,d,r,s,a,c,u,q,<enter>,<space>;Help=?
<
Help=?, pressing [?] will toggle the display of available commands the
yankring window supports.  Pressing [?] again will remove the additional
items.  

AutoClose=1 indicates the window will close when an action is performed
against elements within the yankring.  If you wish to perform multiple
yankring operations press [a] to toggle the auto close feature off.  Use the
commands below and when finished you can press [a] to toggle auto close on and
press [q] to close the window.  The Cmds displayed are simply reminders of 
the available keys.

ClipboardMonitor=1 indicates the YankRing will monitor the clipboard (+)
during Focus change events.  If the clipboard has changed since the YankRing
last checked, the contents are added to the YankRing.  Pressing [c] allows
you to quickly toggle this setting since it may not be useful at times.

YankRing window key list~
The following table lists the description of the keys that can be used
in the YankRing window.

  Key           Description~
  p             Puts text after the cursor.  In visual mode, all elements
                selected will be pasted.
  P             Puts text before the cursor.  In visual mode, all elements
                selected will be pasted.
  gp            Just like "p", but leave the cursor just after the new text.
  gP            Just like "P", but leave the cursor just after the new text.
  <CR>          Just like "p".
  <Enter>       Just like "p".
  <2-LeftMouse> Just like "p".  Normal mode only.
  d             Removes the element from the yankring.  In visual mode all
                elements selected will be removed.
  r             Just like "p", but in visual mode if many lines are selected
                it will paste these in reverse order.
  s             Prompts you for a regex to search the YankRing and display
                only matching items.
  a             Toggles the g:yankring_window_auto_close setting.
  u             Updates the YankRing window.
  q             Closes the YankRing window.
  <Space>       Toggles the width of the vertical window by the
                g:yankring_window_increment setting.
  ?             Toggles the display of the help.


==============================================================================
5. Commands:                                     *yankring-commands*

The predefined mappings call some specific commands with special parameters.
If you are going to create additional maps, it is important you mirror
the same parameters.  Most of these commands have been made obsolete by 
the YankRing window, since it incorporates the functionality below, but
through maps against a buffer, instead of commands.  This makes it much easier
to use.


5.1  YRToggle                                    *YRToggle*
         Allows you to enable and disable the YankRing quickly.  This 
         command will remove the default maps and recreate them.

         Examples: >
            :YRToggle    " Toggles it
            :YRToggle 1  " Enables it
            :YRToggle 0  " Disables it
<            

5.2  YRClear                                     *YRClear*
         Clears all elements from the yankring.
         See also |YRClear-example|.


5.3  YRShow                                      *YRShow*
         Similar to |:register|, will display all the entries in the yankring.
         The element at the top will be the next element pasted from the
         yankring.

         Examples:  >
            :YRShow     " Shows all entries in the yankring

            --- YankRing ---
            Elem  Content
            1     five^@
            2     four^@
            3     three^@
            4     two^@
            5     one^@
<    

5.5  YRGetElem                                   *YRGetElem*
        This command has two modes.  If no parameters are provided, it 
        becomes interactive.  It uses YRShow to display the list and 
        allows you to choose which element to paste.  If a parameter
        is supplied it will paste that element from the yankring.  If the
        number specified is outside of the YankRing an error is returned.
        You may want to create a separate mapping for this call. >
            nnoremap <silent> <Leader>yr :YRGetElem<CR>
<       See also |YRSearch|.
 
        Examples:
            Assume there are 10 elements in the YankRing and element 6 is 
            at the top of the ring. >
            :YRGetElem     " Interactive mode, you choose from a list
            :YRGetElem 4   " Will paste element 5.
            :YRGetElem 12  " Will paste element 6.
            :YRGetElem 99  " Error, invalid choice is reported
            :YRGetElem 0   " Error, invalid choice is reported
 

5.6  YRGetMultiple                               *YRGetMultiple*
        Will paste many elements from the YankRing in one command.
        If the number specified is 1 or less, it is assumed you want
        just the current element pasted.  If the number specified is 
        greater than or equal to the number of elements in the yankring, 
        it is assumed you want all elements pasted.  If a ! is included
        as part of the command, paste the items in reverse order.  
        See the |yankring-tutorial| for more examples.

        Examples:
            Assume there are 10 elements in the YankRing. >
            :YRGetMultiple  4   " Will paste elements 1,2,3,4
            :YRGetMultiple! 4   " Will paste elements 4,3,2,1
            :YRGetMultiple      " Will paste element  1
            :YRGetMultiple  12  " Will paste elements 1,2,...,10
            :YRGetMultiple  99  " Will paste elements 1,2,...,10
            :YRGetMultiple  0   " Will paste element  1
 

5.7  YRPush                                      *YRPush*
         Allows the user to "push" additional entries into the yankring.
         If you yanked text via a key mapping which does not use the 
         YankRing (or there is text on the clipboard) you can use this
         command to add the text to the yankring.

         Examples: >
            :YRPush      " Push the "  register's contents 
            :YRPush '*'  " Push the "* register's contents (clipboard)
            :YRPush '+'  " Push the "+ register's contents (clipboard)
            :YRPush 'a'  " Push the "a register's contents 
<           See also |YRPush-example|.
             

5.8  YRPop                                       *YRPop*
         Allows you to pop any elements from the yankring.  If no parameters
         are provided, the 1st element is removed from the yankring.  The
         command optionally takes a second parameter to specify how many
         elements to pop.  The default value is 1.

         Examples: >
            :YRPop      " Removes the highest numbered element from the 
                          yankring
            :YRPop 3    " Removes the 3rd element from the yankring
            :YRPop 3,5  " Removes 5 elements from the YankRing beginning
                          at element 3
<           See also |YRPop-example|.
             

5.9  YRYankCount                                 *YRYankCount*
         This command has the most mappings created for it.  If you are 
         in normal mode and you are not specifying a range, this command
         will add the text to the yankring.

         The goal of this command is to allow the YankRing to be integrated
         as seamlessly as possible with Vim.  So it supports counts and 
         registers.  If you create a mapping to it, you must pass as a
         parameter the action you want Vim to perform.  You could do the 
         following: >
            nnoremap \test  :<C-U>YRYankCount 'dd'<CR>
<        This map is executed when you hit the '\test' keystrokes, but
         it will actually delete the current line and add it to the 
         yankring.

         The following are the default mappings: >
            nnoremap yy  :<C-U>YRYankCount 'yy'<CR>
            nnoremap dd  :<C-U>YRYankCount 'dd'<CR>
            nnoremap yw  :<C-U>YRYankCount 'yw'<CR>
            nnoremap dw  :<C-U>YRYankCount 'dw'<CR>
            nnoremap ye  :<C-U>YRYankCount 'ye'<CR>
            nnoremap de  :<C-U>YRYankCount 'de'<CR>
            nnoremap yiw :<C-U>YRYankCount 'yiw'<CR>
            nnoremap diw :<C-U>YRYankCount 'diw'<CR>
            nnoremap Y   :<C-U>YRYankCount 'Y'<CR>
            nnoremap D   :<C-U>YRYankCount 'D'<CR>
            nnoremap y$  :<C-U>YRYankCount 'y$'<CR>
            nnoremap d$  :<C-U>YRYankCount 'd$'<CR>
            nnoremap yG  :<C-U>YRYankCount 'yG'<CR>
            nnoremap dG  :<C-U>YRYankCount 'dG'<CR>
<
         Examples:
                yy - Adds the current line to the yankring.
                dd - Adds the current line to the YankRing and deletes it.
               5yw - Adds 5 words to the yankring.
              "ade - Deletes the word, and puts it into both the yankring
                     and the "a register.
            10"zyy - Places 10 lines into both the YankRing and the "z
                     register.
            See also |yankring-tutorial|.
         
         
5.10 YRYankRange                                 *YRYankRange*
         This command by default is only called in visual mode.  All
         visual modes (|characterwise-visual|, |linewise-visual|,
         |blockwise-visual|) are supported.  Any visually selected text
         is added to the yankring.  You can also call this command
         directly using a range.

         Examples:
            Visual mode
            -----------
            Press v (to enter visual mode), highlight want you want, 
            press y (to yank the selected area).
            Repeat using V and Control-V.
            
            Normal mode
            ----------- >
            :5,20YRYankRange   " Will yank lines 5-20 into the yankring
            :5,20YRDeleteRange " Will delete lines 5-20 and add them to
                                 the yankring
<           See also |YRYankRange-example|.
         
         
5.11 YRDeleteRange                               *YRDeleteRange*
         This command is identical to YRYankRange, except the range is
         also deleted.


5.12 YRPaste                                     *YRPaste*
        This command will paste elements from the yankring.  By default it has
        been mapped to p and P to match Vim's native key strokes.  The text
        pasted is exactly what was yanked, including newline characters and 
        blockwise-visual mode behaviours.  It supports counts and registers.

        Examples:
            p   " Paste the current element from the YankRing after the cursor
            P   " Paste the current element from the YankRing before the cursor
           5p   " Paste the current element from the YankRing after the cursor
                  5 times
          "ap   " Ignore the YankRing and paste the contents of register "a
         5"ap   " Ignore the YankRing and paste the contents of register "a
                  5 times
            See also |yankring-tutorial|.

            
5.13 YRReplace                                   *YRReplace*
        The purpose of the YankRing is to gain access to previously yanked
        (or deleted) elements.  This command will replace the previously 
        paste  with a different entry from the yankring.
        By default, I choose <C-P> (P for previous) to replace the last paste
        while moving backwards through the yankring.  <C-N> (N for next)
        replaces the last paste while moving forward through the yankring. 

        Examples:
            See the |yankring-tutorial| for examples.

            
5.14 YRMapsCreate                                *YRMapsCreate*
        This public function is responsible for creating the maps which
        enable the yankring.  This function is called by the YRToggle 
        command.

            
5.15 YRMapsDelete                                *YRMapsDelete*
        This public function removes the YankRing maps and disables
        the yankring.  This function is called by the YRToggle command.

            
5.16 YRSearch                                    *YRSearch*
        This command is similar to |YRGetElem|.  The command takes
        one parameter which is a regular expression.  Similar to 
        YRGetElem, it will display all items in the YankRing that match
        the regular expression.  It is also interactive, and will 
        prompt you to enter which match you wish pasted.
        See also |YRSearch-example|.


==============================================================================
6. Tutorial                                      *yankring-tutorial*

To understand how to use the yankring, the following example will
demonstrate the various features.  Assume you have created the following
mapping: >
    nnoremap <silent> <F11> :YRShow<CR>
<
    Assume we have this buffer: >
        one
        two
        three
        four
        five
<                                                *YRShow-example*     
     Now yank (yy) each line separately starting at line 1.
     Display the contents of the YankRing by executing the command
     YRShow, or pressing <F11>.  The contents of the YankRing is
     displayed in a new buffer.  The size, location and type of buffer
     is configurable via various options.  See section 3 for more details. >
        :YRShow or F11 
            --- YankRing ---
            Elem  Content
            1     five^@
            2     four^@
            3     three^@
            4     two^@
            5     one^@
<    Since we yanked the text starting at line 1 and finishing at
     line 5, the most current YankRing element is the last one, the
     contents of line 5.  "five^@" is displayed, the "^@" is a 
     newline character (since we issued a "yy").
     
                                                 *yankring-window-example*     
     At this point, you have two options.  You can choose which element
     from the YankRing you wish to paste and press <CR> or 'p' or 'P' 
     and a variety of other options, see |yankring-window|. After pressing
     the key, the YankRing window will close (default behaviour).  Pressing
     '?' will display additional help for the commands that are active within
     the YankRing window.  Pressing '?' will toggle the help.

     You do not need to interact with the YankRing using the YankRing window.
     Using the window makes many tasks must easier, but for speed using some
     of the other maps can be preferrable if you know what you have yanked /
     deleted recently.  It was designed to work with Vim in the usual manner.
     You can press, 'p', to paste the last item in yanked or deleted.

     Close the YankRing window by pressing 'q' or F11 (which toggles it).

                                                 *YRReplace-example*     
     Now, go to the end of the file and press 'p'.  The resulting
     buffer appears as: >
        one
        two
        three
        four
        five
        five
<
     Assume you did not want 'five", but a different entry from within the
     yankring.  <C-P> moves backwards through the yankring, it will replace
     the previous pasted text with a different item from the yankring.  This
     allows you to quickly iterate through different elements.  <C-P> is the
     default mapping, this can be user defined. See the following options for
     more details: >
        yankring_replace_n_nkey, yankring_replace_n_pkey
<
     After pressing <C-P> the buffer results in: >
        one
        two
        three
        four
        five
        four
<    Now press 2<C-P>.  This would be the same as pressing 
     <C-P> two times in a row.  This results in: >
        one
        two
        three
        four
        five
        two
<    Now press <C-N> to move forwards through the yankring, 
     this results in: >
        one
        two
        three
        four
        five
        three
<    Display the contents of the yankring. >
        :YRShow  
            --- YankRing ---
            Elem  Content
            1     five^@
            2     four^@
            3     three^@
            4     two^@
            5     one^@
<
    Now lets yank some text with a key stroke that has not been 
    mapped to the yankring.  Place your cursor at the start of 
    line 4.  Press 'ytr', yank-to-(to the character r), which yanks
    the 'fou' letters (no newline character).  Now press p.  Here is
    the result: >
        one
        two
        three
        ffouour
        five
        three
<   This is good, even though the keys 'ytr' has not been mapped
    to YRYankCount, the YankRing still pasted the most recently 
    yanked text.  Since the text did not have a newline character
    the 'fou' was inserted after the 'f'.

    Now replace that previous paste with the current element from
    the YankRing by pressing <C-N>.  This is the result: >
        one
        two
        three
        four
        one
        five
        three
<   The #1 entry in the YankRing is still the line "five@".  When
    choosing the next entry, it wraps around to the last entry in
    the yankring, element #5.  The 'fou' was replaced with 'one^@'.
    Since it had a newline character in it (when it was yanked) the
    newline is included when it is pasted.

                                                 *YRPush-example*     
    Assume you need to paste text from the system clipboard, and this 
    is text you will need routinely.  We can simulate this by running
    this command (see |quote+|): >
        :let @+ = "From the clipboard\n"
        :echo @+

<   With the cursor at the start of the line with the word 'five', press 'p'.
    We still have pasted the 'fou' which is in the default paste buffer. >
        one
        two
        three
        four
        two
        ffouive
        three
<   We have the option of getting the text from the clipboard directly
    with the following. >
        First undo the previous change - u
        Next - "+p
<   The line changes since we bypassed the yankring, and specified
    which register to get the text from: >
        four
        five
        From the clipboard
        three
<   <C-P> replaces this with the #1 entry in the yankring: >
        four
        five
        five
        three
<   Now add the contents of the clipboard to the yankring: >
        :YRPush '+'
<   Move the cursor to the last row 'three' and press 'p'.  The result is: >
        four
        five
        one
        three
        From the clipboard
<   YRPush '+' adds the value of the register '+' to the yankring, but it
    also adds its contents to the default Vim paste buffer.  So pressing
    'p' pasted this text.  Adding a new value to the YankRing we have
    repositioned it which you can see with: >
        :YRShow or F11
            --- YankRing ---
            Elem  Content
            1     From the clipboard^@
            2     five^@
            3     four^@
            4     three^@
            5     two^@
            6     one^@
<                                                *YRClear-example*     
    Now we will clear the yankring, and begin over again.  Delete all lines
    from the buffer and replace them with the original rows: >
        one
        two
        three
        four
        five 
<   Now run this command to clear the YankRing to start over: >
        :YRClear
<
    Issue a 'yy' on each of the 5 lines.  If you run the YRShow command you
    should see the following: >
        :YRShow or F11
            --- YankRing ---
            Elem  Content
            1     five^@
            2     four^@
            3     three^@
            4     two^@
            5     one^@
<                                                *any-item-example*     
    If you need to quickly browse the YankRing to determine which element you
    wish to paste you can simply press 'p' or <CR> or <Enter> on any element
    displayed in the YankRing window.  Press '?' for more detailed description
    of the commands available.

    Using the YankRing window can be much faster if you do not want to cycle
    through the YankRing using <C-P> and <C-N> to find the element.   

                                                 *multiple-items-example*     
    There are times when you need to move through a buffer capturing many
    different lines (or snippets of code) and eventually want to switch 
    buffers and paste these elements.  With some advance planning you can do 
    this without the YankRing by issuing commands of the form: >
        "ayy
        "Ayy
<   When specifying the register using UPPERCASE, Vim appends the yanked text
    to register "a, instead of replacing it.  Many times you forget the
    advance planning (or didn't even know about this great feature) you can 
    use the YankRing window to do this easily.  If this is the current
    yankring: >
        :YRShow or F11
            --- YankRing ---
            Elem  Content
            1     five^@
            2     four^@
            3     three^@
            4     two^@
            5     one^@
<   The YankRing works in |visual-mode|.  To demonstrate move the cursor in
    the buffer to the line with 'two'.  Press 'F11' to display the yankring
    window.  Move the cursor to element 2, press 'V' to enable
    |linewise-visual| mode and then press 'j' twice.  This should have
    visually highlighted elements 2,3,4.  Press 'p' to paste all the
    highlighted elements: >
        one
        two
        four
        three
        two
        three
        four
        five 
<   You can see here it has pasted four, three, two after the second line of
    the buffer.  Now press 'u' to undo our last change.  Leave the cursor
    on the second line 'two'.  Press 'F11' to show the YankRing again.
    Visually select the same lines, but this time press 'r' instead of 'p'.
    'r' is for reverse, so it will paste the following: >
        one
        two
        two
        three
        four
        three
        four
        five 
<   
                                                 *YRGetMultiple-example*     
    The same behaviour listed above (by visually selecting items in the
    YankRing window) can be achieved using the YRGetMultiple command.
    Assume there are 10 elements in the YankRing. >
        :YRGetMultiple  4   " Will paste elements 1,2,3,4
        :YRGetMultiple! 4   " Will paste elements 4,3,2,1
        :YRGetMultiple      " Will paste element  1
        :YRGetMultiple  12  " Will paste elements 1,2,...,10
        :YRGetMultiple  99  " Will paste elements 1,2,...,10
        :YRGetMultiple  0   " Will paste element  1
<   
                                                 *YRSearch-example*     
    The default size of the YankRing is 100 elements.  It can be
    tedious searching through the YankRing to find the element you
    need.  YRSearch is similar to YRShow except it will limit the 
    items displayed to only those items matching the regex provided. >
        :YRShow 
            --- YankRing ---
            Elem  Content
            1     Three Mississippi
            2     Two Mississippi
            3     One Mississippi
            4     @", '\\/.*$^~[]' )
        :YRSearch Mississippi
            --- YankRing ---
            Elem  Content
            1     Three Mississippi
            2     Two Mississippi
            3     One Mississippi
<   Consider some items which require escaping the search string: >
        :YRSearch @", '\\
            --- YankRing ---
            Elem  Content
            1     @", '\\/.*$^~[]' )
<   Forward slashes and various other symbols require escapes, in this
    case the slash was not escaped enough: >
        :YRSearch @", '\\/
            --- YankRing ---
            Elem  Content
<   There are enough escapes this time: >
        :YRSearch @", '\\\\/
            --- YankRing ---
            Elem  Content
            1     @", '\\/.*$^~[]' )
<   Period, star, dollar and so on require one slash: >
        :YRSearch @", '\\\\/\.\*\$\^\~\[\]
            --- YankRing ---
            Elem  Content
            1     @", '\\/.*$^~[]' )
                                                 
<                                                *YRPop-example*     
    You can remove any element from the YankRing by pressing pressing 'd' from
    within the YankRing window.  Visual mode is also supported to remove more
    than one element at a time.  >
        :YRShow 
            --- YankRing ---
            Elem  Content
            1     four^@
            2     three^@
            3     two^@
            4     one^@
<   Visually select elements 2,3.  Press 'd', the result is: >
        :YRShow 
            --- YankRing ---
            Elem  Content
            1     four^@
            2     one^@

<                                                *yankring-visual-example*     
    There are 3 visual modes and all are supported.  Any visually selected 
    text is added to the yankring.  You can try the various modes.  Move 
    the cursor to inside the buffer (not the YankRing window).

    |characterwise-visual|
        Go to line 1, press 'v' and move using the cursor keys until you have
        highlighted some text.  Then press y to yank the visually selected
        area.  Pressing p with paste the yanked region.
    
    |linewise-visual|
        Go to line 2, press 'V' and move using the cursor keys until you have
        highlighted some text.  Notice the entire line is selected (including
        the carriage returns).  Then press y to yank the visually selected
        area.  Pressing p with paste the yanked region.
    
    |blockwise-visual|
        Go to line 3 column 4, press CTRL-V and move to the right using the
        cursor keys until you have highlighted some text.  Then press y to
        yank the visually selected area.  Pressing p with paste the yanked
        region.  Notice the pasted text retained its blockwise visual
        characteristics.
    
                                                 *YRYankRange-example*     
    YRYankRange is called during visual modes, but it is also possible to
    use this via the command line. >
        :1,4YRYankRange
        :3,$YRDeleteRange
        :YRShow 
<   
                                                 *global-example*     
    Using Vim's |:global| command can be very useful at times.  The example
    adds all rows (in a buffer) to the YankRing if they have a certain
    phrase: >
        :g/addme/YRYankCount 'yy'
<   This is the breakdown for the above command: >
        :g                  - for each line in the buffer
        /addme              - check if the string "addme" is in the line
        /YRYankCount 'yy'   - Ask the YankRing to execute the 'yy' command


==============================================================================
7. History                                       *yankring-history*

  11.0: August 09, 2010
         NF: Documented the global variables to customize the location
             of the YankRing menu.
         NF: The YankRing menu now shows the maps used for the default 
             actions to help learn them more easily.
         NF: Added g:yankring_menu_root and g:yankring_menu_priority 
             (David Barsam).
         NF: Added a warning indicating a stored value has been truncated 
             based on g:yankring_max_element_length and a new option to
             suppress this warning, g:yankring_warn_on_truncate (Hans-G�nter).
         BF: The YRAfterMaps() function (if it exists) was not re-run if 
             YRToggle was used to disable and enable the YankRing.
         BF: Multibyte strings may not have been pasted correctly (Dr. Chip).
         BF: When pasting a string of 1111's, and additional -1 could also 
             be included in the output.

  10.0: January 31, 2010
         NF: Change the buffer name to [YankRing] to resemble other
             non-user buffers.
         NF: Added g:yankring_min_element_length which can prevent 
             items from being added to the YankRing if they are too small.
             For example, single character deletes (Vedran M).
         BF: When shifting focus back to Vim, the YankRing may incorrectly
             report: "YR:Failed to change to the yankring buffer, 
             please contact author".
         BF: When entering Vim for the first time and hitting "p"
             nothing was pasted (Mark Huiskes).
         BF: When entering Vim for the first time and the
             yankring_clipboard_monitor = 1, the clipboard entry 
             was not automatically added to the yankring.
         BF: When overriding the default and setting 
             g:yankring_window_use_bottom = 0, the YankRing would
             report the error (Sergey Khorev): 
                 E21: Cannot make changes, 'modifiable' is off

  9.0: August 29, 2009: 
         BF: You cannot execute a macro with ":normal @a".  It is still
             not possible, but you can execute it with ":normal! @a"
             (A S Budden).  
         BF: When g:yankring_persist = 0 the YankRing could go into
             an infinite loop (A S Budden).  
         BF: When replaying a macro which used any of the zap
             keys (f,F,t,T,/,?) you were prompted again for the 
             string to match on (Ovidiu C).
         BF: When checking the clipboard for changes 
             (g:yankring_clipboard_monitor == 1) only add the item 
             if it is not already in the ring.  Previously, the item
             was moved to the top of the YankRing each time you flipped
             focus.

  8.0: December 21, 2008: 
         NF: Changed the implementation of YRGetSearch() (David Liang).
         BF: Under some unknown circumstances, the yankring can fail
             to change to the correct buffer.  Put in code to double
             check and abort.
         BF: Yanking and pasting a line which ends in a backslash 
             resulted in the backslash being replaced by "@@@".
         BF: When repeating a command (".") which used any of the zap 
             keys (f,F,t,T,/,?) you were prompted again for the 
             string to match on (Vasilii Pascal).

  7.0: November 14, 2008: 
         NF: Added support for the / and ? motions so that y/search is 
             supported (Vasilii Pascal).
         NF: When the YankRing window is displayed (or updated) an additional 
             check is made against the default register.  If it has changed
             since the YankRing recorded it, the value will be added to the 
             history.
         NF: Added support for more motions h, j, k, l, H, M, L, ^, 0, -, +, _.
             And a pile of g motions g_, g^, gm, g$, gk, gj, gg, ge, gE.
         NF: The YankRing window will display a message it is operating
             in a limited mode if not using Vim 7.2 or the correct patch 
             level.
         BF: Correction to some internal code which could lead to an 
             endless loop (John Beckett).
         BF: Opening and closing the YankRing window with "set report=0"
             reported "1 line less" messages (Bill McCarthy).
         BF: Changed the default value of g:yankring_paste_check_default_buffer
		     to check if the default paste buffer has changed when pressing
			 'p'.  For example, if a plugin has changed the default registers
			 it will be pasted rather than the top item from the YankRing.
         BF: YRMapsDelete did not remove all the maps created by the YankRing.
         BF: Under particular circumstances, yanking text with embedded @
             characters were not properly stored and retrieved from the
             YankRing (Andrew Long).
         BF: Changed to use xmaps instead of vmaps so that the maps only work
             in visual mode and not select mode (David Liang).

  6.1: October 31, 2008: 
         BF: If the g:yankring_history_dir contains spaces (default on
             Windows) an error was reported.  A simple work around was to 
             let g:yankring_history_dir = 'c:\Vim' or no spaces (Matt).  

  6.0: October 25, 2008: 
         NF: The YankRing now maintains the history in a file.  This means
             if you are running multiple instances of Vim, they all see
             the same yankring.
         NF: The location and name of the file is configurable by the user.
         NF: The g:yankring_separator is no longer used and has been removed.
         NF: The g:yankring_max_element_length can be used to limit the size 
             of an element in the yankring.
         NF: The g:yankring_share_between_instances can be used to indicate
             whether each instance of Vim running on a machine should share
             the history file or whether each should have their own 
             individual history file.
         NF: The g:yankring_clipboard_monitor can be used to indicate
             whether changes to the system clipboard should be added to the
             YankRing (default is on).
         NF: The YankRing window can toggle the clipboard monitor by pressing
             'c'.  See the help in the window by pressing ?.
         NF: Added some highlighting to the YankRing window (Marty Grenfell).

  5.0: September 21, 2008: 
         NF: The YankRing can recognize certain Vim commands which do not
             change the contents of a buffer and not attempt to capture it.
         NF: The global variables which allow you to customize the behaviour
             are now space separated instead of comma separated.  This
             provides greater flexibility but will require you to modify
             your vimrc (if you have customized it). (Andy Wokula)
         BF: If using <C-O> from within insert mode, the YankRing inserted
             characters into the buffer instead of capturing the changes,
             this was fixed by Andy Wokula (Agathoklis Hatzimanikas).
         BF: The YankRing did not properly account for all the different
             forms of counts "5yy" worked but "y5y" did not (Edwin Shao).

  4.1: August 9, 2008: 
         NF: The YankRing now allows you to override which operators should
             be ignored (yankring_ignore_operator).  By default this is
             set for the standard Vim operators which do not modify any
             registers (Examples: = and gu) (Andy Wokula).
         NF: The YankRing did not map v_x (Matt Tolton).
         BF: The expression register (quote=) was not accounted for correctly
             (Agathoklis Hatzimanikas).
         BF: Using the v:operator variable must be escaped when used in
             a regular expression.

  4.0: June 24, 2008: 
         NF: The YankRing by default now captures all |text-objects| and 
             all motions (|motion.txt|) which Vim supports.  Version 3.0 only
             supported a subset of the basic motion commands.
         NF: Prior to this version only predefined maps triggered the 
             capture of data into the yankring.  These maps only supported
             yanks and deletes.  The YankRing now also supports
             operator-pending mode, which allows a greater range of operations
             to be automatically captured and added to the yankring.  
             Operating pending mode functionality requires Vim 7.2 or Vim 7.1
             with patch #205.  If using Vim 7.1 you can determine this with: 
                echo has("patch205")
         NF: Prior to this version only yanks and deletes were registered
             in the yankring.  Changes are now also captured into the
             yankring.
         NF: The YankRing will also capture the system cliboard when focus is
             returned to the vim window.  This is useful if you copy text
             between applications.
         NF: The YankRing window always opened bottom horizontal.  Now it
             can be opened top or bottom and horizontal or vertically.
             This can be controlled via variables in your .vimrc.
         BF: The YankRing has an option to persist between instances
             of Vim by storing the values in global variables within
             the viminfo.  This has led to some unusual ordering of
             items in the ring from conflicts between instances.
             This option has been turn off by default.
         BF: Their was an issue with yanking using y$.

  3.1: September 10, 2007: 
         NF: YRClear will now unlet all global variables it uses to store
             the data if the persist storage is specified (the default).
             Large values in the viminfo file could possibly affect other
             applications.

  3.0: September 7, 2007: 
         NF: Converted the YankRing to use the new Vim7's List object which
             means it is no longer compatible with Vim6.
         NF: By default the YankRing will now maintain the yankring's items
             persistently by default.  It does this via the |viminfo| file.
             This means the contents of the YankRing rely on the internal
             variables of only 1 Vim instance.
         BF: YRToggle was not unmapping 'gp' and 'gP'.
         BF: YRSearch prompted the user for a regex even if one was provided
             on the command line.
         BF: If g:yankring_manage_numbered_reg is enabled, the "." operator
             did not correctly repeat the previous action (Pedro DeRose).

  2.2: November 1, 2005: 
         NF: Added 'x' to the list of yankring_n_keys.  This is very useful
             in visual mode since it can delete a lot of characters.

  2.2: October 19, 2005: 
         BF: If you pressed '?' to toggle the display of the help in the
             YankRing window, the window would close.  This also applied to
             'a', which allowed you to toggle the autoclose feature.

  2.1: October 11, 2005: 
         NF: Added the ability for the YankRing to override Vim's numbered 
             registers.  Instead of the numbered registers holding the last
             yanked value, and the 9 previous deletes, they will now reflect
             the top 10 items in the yankring.  This allows you to reference
             them directly with "5p.

  2.0: August 20, 2005: 
         NF: Much improved usability, the YankRing now has a "GUI" to service 
             the yankring.  If YRShow or YRSearch is used, a split buffer is
             opened which displays all the elements in the yankring.  There
             are a number of maps that allow you to interact with the
             contents.  The window can be positioned vertically or
             horizontally as well as being sized all through options 
             specified in your vimrc.
	     NF: YRPop can now delete any items from the yankring, rather 
		     that just from the top.
	     NF: YRSetTop has been removed, it is no longer required as the
		     internal representation of the YankRing has changed.
	     BF: If g:yankring_ignore_duplicate is set (which is the default)
		     you could get some unpredicable results when moving 
			 backwards and forwards (<C-P> and <C-N>) through the 
			 previous values.
 
  1.7: June 10, 2005: 
         BF: The expression register support added in version 1.6 used
             getreg('='), which has the side effect of executing the 
             expression register.  Depending on what was in the register
             this could have unusual results.  Changed to use histget().
 
  1.6: April 20, 2005: 
         NF: YRSearch is similar to YRGetElem.  Given a regular expression
             it will interactively display all the elements in the yankring
             that match the regular expression.  You can enter the number
             of the element to paste it.  If you have many elements within
             the yankring, this can help you identify them more easily.
         NF: Updated the default history size from 30 to 100, which is 
             partially the reason for the YRSearch command.
         NF: By default it supports "gp" and "gP", in addition to "p" and "P".
         NF: Added support for the expression register (:h quote=).  Here
             is an example of how it is used:
                "="X"<CR>P
 
  1.5: March 30, 2005: 
         NF: The YankRing now respects the cpoptions setting, if 'y' is
             included and you press '.', the previous yank command is executed
             and added to the yankring.  You can also add this behaviour by
             setting this in your |vimrc|: >
                let g:yankring_dot_repeat_yank = 1
<        NF: Duplicates will not be added to the YankRing by default.  If
             a duplicate is found, the element will be moved to the top
             of the yankring.  This can be controlled by setting this in 
             your |vimrc|: >
                let g:yankring_ignore_duplicate = 0 (1 is default)
<        BF: Regression from version 1.4, the '.' operator may incorrectly
             insert garbage.

  1.4: March 28, 2005: 
         NF: YRToggle has been updated.  If you toggle the YankRing off
             (disable) the maps it creates are removed.  Calling YRToggle
             again will recreate the maps.  This truly disables the yankring,
             where the previous version attempted to do this via code.
         BF: Using the '.' operator was not correctly replaying operations
             that did not move text in some way (g~t_) changed the case
             of the text but a '.' did not replay it.
         BF: When replacing previously pasted text the YankRing did not
             respect what key was used to paste the text originally.
             All replaced items were pasted using 'p', even if you had
             originally pasted the text with 'P'.

  1.3: March 16, 2005: 
         BF: The '.' operator did not handle the <<, >> shift operator.
             Pressing '.' would result in the previous YankRing operation
             instead of repeating the shift.

  1.2: March 14, 2005: 
         NF: Added support for '.' operator to repeat the last change.
         NF: Changed YRGetElem to show the contents of the yankring
             and allow you to choose which element you want pasted.
             It is only interactive if you do not provide a parameter.
         NF: Added 'ygg,dgg' default maps by extending the yankring_n_keys
             variable.

  1.1: March 09, 2005: 
         NF: Added support for the black hole register |quote_|.
         NF: Custom Maps allows the user to more finely tune the yankring
             maps to perform whatever action they require.  This function,
             YRRunAfterMaps(), is run automatically after the YankRing 
             creates it's default mappings.  See |yankring-custom-maps|.
         NF: Added some more default maps by extending the yankring_n_keys
             variable.  It now contains:
                yy,dd,yw,dw,ye,de,yE,dE,yiw,diw,yaw,daw,y$,d$,Y,D,yG,dG
             NOTE:  You can easily extend these default mappings by 
             creating this global variable in your |vimrc|, you do not
             have to wait for the plugin to be updated.
         NF: Added support for Dr. Chips GetLatestVimScripts plugin.
         BF: The check for g:yankring_n_keys was incorrect, so it was not
             possible to override the default maps.

  1.0: March 08, 2005: 
         NF: Initial release.

vim: ts=4 ft=help tw=78