-
Notifications
You must be signed in to change notification settings - Fork 1
/
wheel.txt
4637 lines (3376 loc) · 169 KB
/
wheel.txt
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
*wheel.txt* File Group Manager for Vim and Neovim
==============================================================================
CONTENTS *wheel*
Introduction |wheel-introduction|
Step by step |wheel-step-by-step|
Workflow |wheel-workflow|
Straightforward functions |wheel-straightforward-functions|
Prompting functions |wheel-prompting-functions|
Dedicated buffers |wheel-dedicated-buffers|
Commands |wheel-commands|
Functions |wheel-functions|
Configuration |wheel-configuration|
Autocommands |wheel-autocommands|
Mappings |wheel-mappings|
Examples |wheel-examples|
Files |wheel-files|
==============================================================================
INTRODUCTION *wheel-introduction*
What is it ? |wheel-introduction-what|
File groups |wheel-introduction-file-groups|
Features |wheel-introduction-features|
History |wheel-introduction-history|
Prerequisites |wheel-introduction-prerequisites|
------------------------------------------------------------------------------
WHAT IS IT *wheel-introduction-what*
Wheel is a :
- file group manager
- navigation plugin
- refactoring tool
for Vim and Neovim.
Our favorite editor has already plenty of nice navigation functions. Wheel
enhances their interface by using :
- intuitive completion with multi-pattern support for prompting functions
- dedicated buffers, in which you can filter and select elements, besides using
the full power of your editor
- a meta-command with subcommands, actions and completion
- edit modes, that allow you to reflect your changes in a dedicated buffer to
wheel elements, or into file(s)
All is written in lightweight, classical Vimscript.
------------------------------------------------------------------------------
FILE GROUPS *wheel-introduction-file-groups*
Wheel let you organize your files by creating as many file groups as
you need, add the files you want to it and quickly navigate between :
- files of the same group
- file groups
Note that :
- a location contains a name, a filename, as well as a line & column number
- a file group, in fact a location group, is called a circle
- a set of file groups is called a torus (a circle of circles)
- the list of toruses is called the wheel
Why do you need three levels of grouping ?~
At first glance, managing groups with circles in a torus seems to
be sufficient. But with time, the torus grows big, and a third level
helps you to organize your files by groups and categories:
- the wheel contains all the toruses
- each torus contains a category of files, e.g.:
+ configuration, development, publication
- each circle contains a project, e.g.:
+ kitty or vifm circles in configuration torus
+ shell or vimscript in development torus
+ tea or art in publication torus
You can also organize a torus in subprojects. For instance, in the wheel
torus, I have the following groups :
- plugin/ dir files
- autoload/ dir files
- doc files
- wiki files
- test files
A wheel that follows you~
~
Wheel is designed to follow your workflow : you only add the files
you want, where you want. For instance, if you have a `organize` group
with agenda & todo files, you can quickly alternate them, or display
them in two windows. Then, if you suddenly got an idea to tune vim,
you switch to the `vim` group with your favorites configuration files in
it. Same process, to cycle, alternate or display the files. Over time,
your groups will grow and adapt to your style.
------------------------------------------------------------------------------
FEATURES *wheel-introduction-features*
- add
+ files from anywhere in the filesystem
+ a file in more than one group
+ file:line-1 and file:line-2 in the same group
- may be saved in wheel file (recommended)
- on demand loading of files
+ no slowdown of (neo)vim start
- easy navigation
+ switch to matching tab & window if available
+ next / previous location, circle or torus
+ single or multi-pattern completion in prompting functions
+ choose file, group or category in dedicated buffer
* filter candidates
* selection tools
* preview
* folds matching wheel tree structure
* context menus
+ auto |:lcd| to project root of current file
+ history of wheel files
* anywhere
* in same group
* in same category
+ signs displayed at wheel locations
- search files
+ using locate
+ using find
+ MRU files not found in wheel
+ opened buffers
+ visible buffers in tabs & windows
- search inside files
+ grep on group files
* navigate
* edit mode : edit and propagate changes by writing the dedicated buffer
+ outline
* folds headers in group files (based on fold markers)
* markdown headers
* org mode headers
+ tags
+ markers
+ jumps & changes lists
- narrow
+ current file
+ all circle file with a pattern
- yank ring using TextYankPost event
+ paste before or after, linewise or characterwise
+ switch register ring
- reorganizing
+ wheel elements
+ tabs & windows
- undo list
+ diff between last & chosen state
- command output in buffer
+ :ex or !shell command
+ async shell command
+ result can be filtered, as usual
- dedicated buffers ring to save your searches
+ layer ring in each dedicated buffer
- batch operations
- autogroup files by extension or directory
- save tabs & windows in minimal session file
- display files
+ split levels : torus, circle, location
+ split
* vertical, golden vertical
* horizontal, golden horizontal
* main left, golden left
* main top, golden top
* grid
+ mix of above
* circles on tabs, locations on split
* toruses on tabs, circles on split
------------------------------------------------------------------------------
HISTORY *wheel-introduction-history*
This project is inspired by :
- torus : https://github.com/chimay/torus, a similar plugin for Emacs,
itself inspired by MTorus : https://www.emacswiki.org/emacs/MTorus
- ctrlspace : https://github.com/vim-ctrlspace/vim-ctrlspace, a similar
plugin for Vim
- unite : https://github.com/Shougo/unite.vim, a search & filter plugin
for arbitrary sources
- quickfix-reflector : https://github.com/stefandtw/quickfix-reflector.vim,
for the grep edit mode
- NrrwRgn : https://github.com/chrisbra/NrrwRgn, for the narrow dedicated buffers
- YankRing : https://github.com/vim-scripts/YankRing.vim, whose name is
self-explanatory
------------------------------------------------------------------------------
PREREQUISITES *wheel-introduction-prerequisites*
- vim >= 8.2
- neovim >= 0.6
Basically, it assumes the existence of |:map-cmd| and `#{...}` syntax
for dictionaries, see |literal-dict|.
If your distribution uses an older version, you can resort to appimages :
- https://github.com/vim/vim-appimage
- https://appimage.github.io/neovim/
These are fast evolving pieces of software, it's worth upgrading anyway.
Operating system~
Some outer rim functions assume a Unix-like OS, like Linux or BSD :
- async functions
- external commands, like locate
- mirror the wheel structure in a filesystem tree
Most of it should work out of the box on other OSes, however. If you
encounter some problem, please let me know.
==============================================================================
STEP BY STEP *wheel-step-by-step*
Prefix |wheel-sbs-prefix|
One map to ring them all |wheel-sbs-one-map-to-ring-them-all|
One command to launch them all |wheel-sbs-one-command-to-launch-them-all|
First circles |wheel-sbs-first-circles|
Moving around |wheel-sbs-moving-around|
Square the circle |wheel-sbs-square-the-circle|
Tags |wheel-sbs-tags|
------------------------------------------------------------------------------
PREFIX *wheel-sbs-prefix*
In the following discussion, I assume that you have kept the default
mapping prefix : >
let g:wheel_config.prefix = '<M-w>'
<
------------------------------------------------------------------------------
ONE MAP TO RING THEM ALL *wheel-sbs-one-map-to-ring-them-all*
To get an overview of the Wheel, I suggest you take a look at the main
menu. Press `<M-w><M-m>` and a new window will appear, listing the actions
you can perform. Insert mode is used to filter the lines. Press enter
in normal mode to trigger an action (if you know what you're doing),
or `q` to quit the menu.
To learn more about menus, see |wheel-dedicated-buffers-menus|.
------------------------------------------------------------------------------
ONE COMMAND TO LAUNCH THEM ALL *wheel-sbs-one-command-to-launch-them-all*
The |:Wheel| command can be used to launch any wheel functionality. The
general syntax is : >
:Wheel {subcommand}
" or
:Wheel {subcommand} {action}
<
To see all possibilities, just hit tab after a space, e.g. : >
:Wheel <tab>
" or
:Wheel {subcommand} <tab>
<
For example, you can use : >
:Wheel dedibuf menu-main
<
to launch the main menu.
------------------------------------------------------------------------------
FIRST CIRCLES *wheel-sbs-first-circles*
Let's say we have the files `Juice`, `Tea`, `Coffee` and we want to
group them. So, we go to `Juice` and type `<M-w>a` to add a location to
the wheel. If no category (no torus) is present in the wheel, it will
create it and ask for a name. Let's say we name it `Food`. If no group
(no circle) is found in the torus, it will be created and prompt for a
name. Let's say we choose `Drinks`. Finally, we are asked to choose a
name for our location. A completion is available : if we press `<Tab>`,
we can choose between different flavours of the current filename :
- without extension
- with extension
- relative path
- absolute path
In this case, we simply choose `Juice`, and our location is added to
the group.
Then, we go to `Tea` and type `<M-w>a` again. This time, it will just
ask us if we want to keep the default location name. Press enter, and
`Tea` is added to the `Drinks` group.
Same process with `Coffee`. We now have a circle `Drink` containing
three files.
A group can contain more than one location of the same file. Suppose
that in the `Juice` file, you have a Pineapple and a Mango sections,
and you want to add both of them in the circle. Just go to the Pineapple
section, and use `<M-w>a` ; we give it the `Juice-Pineapple` name. The
location `Juice:pineapple-line:pineapple-col` is added to the current
circle. Then, go to the Mango section, and do the same. Let's say
we give it the `Juice-Mango` name. The `Juice:mango-line:mango-col`
is also added to the circle.
If you want to create another group (circle), let's say `Fruits`,
simply launch `<M-w><C-a>`, and answer `Fruits` to the prompt. You can
then add the files `Apple`, `Pear` and `Orange` to it. You can even also
add `Juice`: a file can be added to more than one circle.
If you want to create another category (torus), let's say `Books`,
simply launch `<M-w><S-a>`, and answer `Books` to the prompt.
Adding quicker~
If you want to edit a file and add it at the same time, you can use
`<M-w>+f` ; a file completion is available at the prompt. This map can
also be used to edit a new file and add it to the wheel at once.
If you want to add a buffer, you can use `<M-w>+b` ; a buffer completion
is available.
What happens if you have a lot of files ? Let's say the `novels`
folder, located in the current directory, contains dozen of novels
in plain text format. You can add all of them at once with the
`add_glob` function. Press `<M-w>*` and wheel will ask you to enter a
glob pattern. You can answer `novels/*` to add all files in there. If
there are more levels of subdirs and you want to include all of them,
you can enter `novels/**/*` instead. Then, it will ask if you want to
add the files in a new circle. You can answer yes and call this circle
`Novels`. And voilà, your new `Novels` group contain all the files in
the `novels` folder.
Don't forget to |:cd| to the right directory before launching this
function.
------------------------------------------------------------------------------
MOVING AROUND *wheel-sbs-moving-around*
Cycling~
You can cycle the files of a circle with `<M-w><PageUp>` and
`<M-w><PageDown>`. These are often used bindings, so I suggest you map
them to more convenient keys, like `<M-PageUp>` and `<M-PageDown>`. See
|wheel-mappings-level-10|.
To cycle the circles, use `<M-w><C-PageUp>` and `<M-w><C-PageDown>`. You
can also map them to more convenient keys, like `<C-PageUp>` and
`<C-PageDown>`.
To cycle the toruses, use `<M-w><S-PageUp>` and `<M-w><S-PageDown>`
or map them to `<S-PageUp>` and `<S-PageDown>`.
Switching~
You can also switch wheel element by name :
- `<M-w><Enter>` : switch location by name
- `<M-w><C-Enter>` : switch circle by name
- `<M-w><S-Enter>` : switch torus by name
A completion is available, see |wheel-prompting-functions-completion|.
If you want to go to a far place in the wheel, use the wheel index :
- switch to any location in the wheel index with `<M-w>x`
- switch to any circle in the wheel index with `<M-w><C-x>`
As usual, name completion is available at the prompt.
Let's say you have these entries in the wheel :
| torus | circle | location |
| ------ | ------- | ----------- |
| config | browser | w3m |
| config | browser | elinks |
| config | browser | qutebrowser |
| config | edit | vim |
| config | edit | neovim |
| config | edit | emacs |
| script | shell | autostart |
| script | shell | autostop |
If you launch the "switch in index" action with `<M-w>x`, and pre-fill
the prompt with "ed vi" before hitting `<Tab>`, the plugin will give
you this completion candidates :
- config > edit > vim
- config > edit > neovim
If you pre-fill the prompt with "ed vi neo" before hitting `<Tab>`,
the plugin will only give you "config > edit > neovim".
As usual, hit enter to validate you choice.
Switching using a dedicated buffer~
You can also switch location, circle or torus by chosing it in a wheel
navigation buffer. See |wheel-dedicated-buffers-navigation|.
------------------------------------------------------------------------------
SQUARE THE CIRCLE *wheel-sbs-square-the-circle*
Over time, the number of circles will grow. Completion is great, but if
you just want to alternate the last two locations in history, you'll
probably prefer the alternate functions :
| Default map | Function |
| -------------- | --------------------------------------------- |
| <M-w><C-^> | alternate anywhere |
| <M-w><M-^> | alternate in the same circle |
| <M-w><M-C-^> | alternate in in same torus but another circle |
| <M-w>^ | alternate menu |
I strongly suggest you map a convenient key, like `<C-^>`, to
alternate-anywhere, it's one of the most often used binding. Same
thing with `<M-C-^>` and alternate-same-torus-other-circle.
See |wheel-mappings-level-10| for more information.
A common case is to alternate two files in the same circle, and two
circles in the same torus. So, you have the square :
Alternate | File 1 | File 2
--------------|-----------------|-----------------
Circle Drinks | Juice | Tea
Circle Fruits | Apple | Pear
at your fingertips.
------------------------------------------------------------------------------
TAGS *wheel-sbs-tags*
If you use a tags file, you can jump to any tag with `<M-w>t`.
Completion is available at the prompt.
For instance, `pro fol<Tab>` gives me the function
`wheel#projection#follow` straight away. Warp speed, Scotty.
You can also search for a tag in a dedicated buffer with `<M-w><M-t>`.
There are also functions for buffers, marks, jumps or changes.
See |wheel-prompting-functions-switch|.
==============================================================================
WORKFLOW *wheel-workflow*
Interfaces |wheel-workflow-interfaces|
Mappings |wheel-workflow-mappings|
Autoread & write wheel |wheel-workflow-auto-read-write|
------------------------------------------------------------------------------
INTERFACES *wheel-workflow-approach*
Wheel has four main interfaces :
- straightforward functions : for action that does not require any user input
- prompting functions : require user input at prompt
+ advanced completion is available
- dedicated buffers : for more advanced operations
+ full power of (neo)vim buffer
+ filter
+ selection
+ context menus
+ edit mode
- meta-command : with subcommands, actions and advanced completion
See :
- |wheel-straightforward-functions|
- |wheel-prompting-functions|
- |wheel-dedicated-buffers|
- |wheel-commands|
------------------------------------------------------------------------------
MAPPINGS *wheel-workflow-mappings*
To avoid conflict with your personal bindings, wheel mappings until level
2 included are all using a generic prefix. The first step is to choose
a prefix you are comfortable with. Here are some ideas you could use : >
" default
let g:wheel_config.prefix = '<M-w>'
" works on nvim-qt, not on gvim or in terminal
let g:wheel_config.prefix = '<D-w>'
" great if you don't use space as map leader
let g:wheel_config.prefix = '<Space>'
" if you don't use backslash as map leader
let g:wheel_config.prefix = '\'
<
This is fine, but can quickly become tedious for often used functions. In
that case, prefix-less shortcuts are welcome.
A whole set of these shortcuts is defined in level 10. There is a lot
of them, so they would most likely interfere with your config. However,
they can be used to choose functions you're interested in, or as a source
of inspiration.
So, two solutions :
- you're happy with all of them : you can set `g:wheel_config.mappings` to 10
- you set `g:wheel_config.mappings` to 2 or less, and cherrypick in level 10
Define your own maps~
Two possibilities here, either you use the plugs, like this : >
nmap <silent> <M-m> <plug>(wheel-menu-main)
<
or the meta-command : >
nnoremap <silent> <M-m> :Wheel dedibuf menu-main<cr>
<
Seel also |wheel-mappings-define-your-own-maps|.
If you're looking for a specific Wheel function, see
|wheel-mappings-exhaustive-list|.
------------------------------------------------------------------------------
AUTO READ AND WRITE *wheel-workflow-auto-read-write*
You probably want to make your files groups persistent. For that, you
need to enable auto read & write of the wheel file : >
let g:wheel_config.autoread = 1
let g:wheel_config.autowrite = 1
augroup wheel
autocmd!
autocmd VimEnter * call wheel#void#init()
autocmd VimLeave * call wheel#void#exit()
augroup END
>
Don't worry about the size : I have 1000+ files in my groups, and it is
still fluid, thanks to on-demand file loading.
Generally speaking, this plugin is designed to let the user control the flow.
If you want to automate more, take a look at |wheel-autocommands|.
==============================================================================
STRAIGHTFORWARD FUNCTIONS *wheel-straightforward-functions*
Navigation |wheel-straightforward-functions-navigation|
Info |wheel-straightforward-functions-info|
Sync |wheel-straightforward-functions-sync|
------------------------------------------------------------------------------
NAVIGATION *wheel-straightforward-functions-navigation*
Next~
- location : `<M-w><PageDown>`
- circle : `<M-w><C-PageDown>`
- torus : `<M-w><S-PageDown>`
Previous~
- location : `<M-w><PageUp>`
- circle : `<M-w><C-PageUp>`
- torus : `<M-w><S-PageUp>`
History~
- older location in history : `<M-w><Home>`
- newer location in history : `<M-w><End>`
- older location in same circle : `<M-w><C-Home>`
- newer location in same circle : `<M-w><C-End>`
- older location in same torus : `<M-w><S-Home>`
- newer location in same torus : `<M-w><S-End>`
------------------------------------------------------------------------------
INFO *wheel-straightforward-functions-info*
Display a dashboard indicating the wheel state : >
current torus > current circle > current location
<
Default mapping : `<M-w>i`
------------------------------------------------------------------------------
SYNC *wheel-straightforward-functions-sync*
Sync down : wheel -> vim state~
The `jump` function loads the current file & position of the wheel in
the current window. If the file is already displayed in another window,
jump to it instead.
This sync-down process is automatically run by every navigation map
that deals with elements in the wheel.
Sometimes however, you want to quickly edit a file that has nothing to
do with your usual groups. You can then go back by manually launching
the sync-down. The default binding is : >
<M-w>$
<
This process can be partly automated, see :
Sync up : current file & position -> wheel~
The `follow` function try to find the closest location in the wheel that
matches the current file & position. If found, the wheel current location
is synced with the current file.
Let's say you edit a file, load a buffer or go to a tab or window
without using a wheel map. The wheel state will then be distinct from
your current file. You can ask the wheel to follow the current file by
manually launch the sync-up process. The default mapping is : >
<M-w><M-$>
<
This process can be partly automated, see :
- |wheel-autocommands-auto-follow|.
- |wheel-autocommands-after-native|.
Sync up : update current location line & column~
The `update` function updates the current location to match cursor line
& column. It is called by the `follow` routine, so you can also use
`<M-w><M-$>` to launch it.
This process can be partly automated, see :
- |wheel-autocommands-auto-update|.
- |wheel-autocommands-before-jump|.
==============================================================================
PROMPTING FUNCTIONS *wheel-prompting-functions*
Completion |wheel-prompting-functions-completion|
Switch |wheel-prompting-functions-switch|
Search |wheel-prompting-functions-search|
Add |wheel-prompting-functions-add|
Delete |wheel-prompting-functions-delete|
Rename |wheel-prompting-functions-rename|
Copy |wheel-prompting-functions-copy|
Move |wheel-prompting-functions-move|
Yank ring |wheel-prompting-functions-yank|
------------------------------------------------------------------------------
COMPLETION *wheel-prompting-functions-completion*
When a wheel function needs to prompt the user for input, it offers
completion wherever possible. The completion type depends of course on
the nature of the asked entry :
- location, circle or torus
- file, directory, buffer
- tag
- and so on
Hitting |'wildchar'| (most likely `<Tab>`), will trigger the completion.
If `pum` is in |'wildoptions'|, the choices will be displayed in a nice
pop-up menu.
Multi-pattern~
You can enter one or more patterns before hitting |'wildchar'| to narrow
the completion list :
- a space between two patterns is a logical and. So, `one two` will
display candidates containing both `one` and `two`
- a pipe `|` between two patterns is a logical or. So, `one|two` will
display candidates containing `one` or `two`
- a bang `!` beginning a filtering pattern is a logical not : all candidates
matching this pattern will be removed from the list
Here, `one` and `two` can be any vim regex. Most of the time, they are
simply litteral parts of the wanted result.
For example, if you have the completion list `small flower`, `big flower`,
`small fruit` and `big fruit` :
- the pattern `fl` will narrow down to `small flower`, `big flower`
- the pattern `sm` will narrow down to `small flower`, `small fruit`
- the patterns `sm fl` will narrow down to `small flower`
- the patterns `all !ower` will narrow down to `small fruit`
- the patterns `al|owe` will narrow down to `small flower`, `small fruit`, `big flower`
Builtin patterns~
All builtin patterns remain available.
If you want a classic completion matching only at the beginning of the
string, you can use |/^|. For example, if you have the completion list
`small flower`, `sunflower`, `flower`, `small fruit`, `big fruit` and
`fruit` :
- the pattern `^f` will narrow down to `flower`, `fruit`
- the pattern `^s` will narrow down to `small flower`, `sunflower`, `small fruit`
Vowels fuzzy~
If `g:wheel_config.completion.vocalize` is greater than 0, the plugin adds
vowels patterns between the chars you enter, to enable a kind of vowels-fuzzy
completion.
This way, if you have the completion list `profile`, `proof`, `wheel`
and `organize` :
- the pattern `prf` will narrow down to `profile`, `proof`
- the pattern `hl` will narrow down to `wheel`
- the pattern `gn` will narrow down to `organize`
Word fuzzy~
If `g:wheel_config.completion.wordize` is greater than 0, the plugin
adds word-characters patterns between the chars you enter, to enable
a kind of word-fuzzy completion.
This way, if you have the completion list `profile`, `proof`, `wheel`
and `organize` :
- the pattern `pof` will narrow down to `profile`, `proof`
- the pattern `we` will narrow down to `wheel`
- the pattern `oai` will narrow down to `organize`
Scores~
If `g:wheel_config.completion.scores` is greater than 0, scores are computed,
and matching results are sorted accordingly.
Fuzzy~
If `g:wheel_config.completion.fuzzy` is greater than 0, a full fuzzy
completion is enabled, using |matchfuzzy()|. Beware that the or `|` operator
is not available in this mode.
File completion~
Files and directories completes in different ways depending on the
beginning fo your input :
| Beginning of input | Completion list | Pattern(s) |
| ------------------ | --------------------------------------- | ---------- |
| ./ | files and subdirs in current directory | single |
| ../ | files and subdirs in parent directory | single |
| / | files and subdirs in root directory | single |
| ~ or ~/ | files and subdirs in home directory | single |
| anything else | current directory tree, recursive | multi |
------------------------------------------------------------------------------
SWITCH *wheel-prompting-functions-switch*
Switch element in the wheel~
| Function | Completion list | Default binding |
| ------------------------ | ---------------------------- | --------------- |
| switch location | locations of current circle | <M-w><Enter> |
| switch circle | circles of the current torus | <M-w><C-Enter> |
| switch torus | toruses in the wheel | <M-w><S-Enter> |
| multi switch | toruses, circles & locations | <M-w><M-Enter> |
| switch location in index | index locations | <M-w>x |
| switch circle in index | index circles | <M-w><C-x> |
| switch in history | history entries | <M-w>h |
| switch in frecency | frecency entries | <M-w>e |
Switch buffer~
| Function | Completion list | Default binding |
| ---------------- | --------------------------------- | --------------- |
| switch buffer | listed buffers | <M-w>b |
| switch tabwin | visible buffers in tabs & windows | <M-w>v |
Switch in (neo)vim lists~
| Function | Completion list | Default binding |
| ---------------- | ------------------ | --------------- |
| switch marker | markers | <M-w>' |
| switch in jump list | jumps | <M-w>j |
| switch in change list | changes | <M-w>, |
| switch tag | tags | <M-w>t |
Switch dedicated buffer~
The default mapping is `<M-w><Up>`.
See |wheel-dedicated-buffers-ring|.
Switch layer in ring~
You must be in a dedicated buffer to launch it. The local mapping is
`<M-l>`, or `<C-Down>`.
See also |wheel-dedicated-buffers-layers|.
------------------------------------------------------------------------------
SEARCH *wheel-prompting-functions-search*
Search file~
| Function | Completion list | Default binding |
| ---------------- | ------------------------------------ | --------------- |
| find file | find file in current dir tree | <M-w>f |
| mru file | most recently used, non wheel files | <M-w>u |
Search inside file~
| Function | Completion list | Default binding |
| ------------------- | ---------------------------------------- | --------------- |
| occur : switch line | lines of current buffer | <M-w>o |
| outline | outline for folds, markdown, org, vimwiki | <M-w><C-o> |
------------------------------------------------------------------------------
ADD *wheel-prompting-functions-add*
Add a new torus~
The default mapping is `<M-w><S-a>`.
Add a circle to the current torus~
The default mapping is `<M-w><C-a>`.
When you add a circle, you are prompted for a name. The completion is
based on the current file directory. Different flavours are available :
- simple : just the directory of the current file
- path relative to the current local directory
- absolute path
You can of course adapt the completed name before confirming with
`<Enter>`. In fact, the name you choose can be anything you want, as
long as it is not already in the current torus.
Add a location to the current circle~
The default mapping is `<M-w>a`.
When you add a location, you are prompted for a name. The completion is
based on the current file name. Different flavours are available :
- file name without extension
- file name with extension
- file name with relative path
- file name with absolute path
You can of course adapt the completed name before confirming with
`<Enter>`. In fact, the name you choose can be anything you want, as
long as it is not already in the current circle.
You can also add :
- a file with `<M-w>+f`
- a buffer with `<M-w>+b`
- all files matching a glob with `<M-w>*`
------------------------------------------------------------------------------
DELETE *wheel-prompting-functions-delete*
Default mappings :
- `<M-w>d` : delete location
- `<M-w><C-d>` : delete circle
- `<M-w>D` : delete torus
------------------------------------------------------------------------------
RENAME *wheel-prompting-functions-rename*
Rename the current torus~
The default mapping is `<M-w><S-n>`.
Rename the current circle~
The default mapping is `<M-w><C-n>`.
The completion is the same as for adding a circle.
Rename the current location~
The default mapping is `<M-w>n`.
The completion is the same as for adding a location.
Rename current location & file~
The default mapping is `<M-w><M-n>`.
------------------------------------------------------------------------------
COPY *wheel-prompting-functions-copy*
- `<M-w>c` : copy location to another circle
- `<M-w><M-c>` : copy circle to another torus
- `<M-w>C` : copy torus
------------------------------------------------------------------------------
MOVE *wheel-prompting-functions-move*
- `<M-w>m` : copy location to another circle
- `<M-w>M` : copy circle to another torus
------------------------------------------------------------------------------
YANK RING *wheel-prompting-functions-yank*
- `<M-w><C-y>` : switch default register to use in yank functions
- `<M-w>y` : paste from yank ring linewise, after the sursor
- `<M-w>p` : paste from yank ring charwise, after the sursor
- `<M-w>Y` : paste from yank ring linewise, before the sursor
- `<M-w>P` : paste from yank ring charwise, before the sursor
Linewise means that the paste is inserted after the current line.
Charwise means that the paste is inserted into the current line.
See also |linewise| and |charwise|.
Each candidate of the completion list is one of your yanks, represented
as a string.
==============================================================================
DEDICATED BUFFERS *wheel-dedicated-buffers*
Introduction |wheel-dedicated-buffers-introduction|
Selection |wheel-dedicated-buffers-selection|
Filtering |wheel-dedicated-buffers-filtering|
Input history |wheel-dedicated-buffers-input-history|
Preview |wheel-dedicated-buffers-preview|
Folds |wheel-dedicated-buffers-folds|
Non writable |wheel-dedicated-buffers-non-writable|
Writable |wheel-dedicated-buffers-writable|
Dedicated buffers ring |wheel-dedicated-buffers-ring|
Layer ring |wheel-dedicated-buffers-layers|
Menu |wheel-dedicated-buffers-menus|
Context menus |wheel-dedicated-buffers-context|
Navigation |wheel-dedicated-buffers-navigation|
Within the wheel |wheel-dedicated-buffers-within-wheel|
Buffers |wheel-dedicated-buffers-buffers|
Tabs & windows in tree mode |wheel-dedicated-buffers-tabwin-tree|
Tabs & windows |wheel-dedicated-buffers-tabwin|
Find |wheel-dedicated-buffers-find|
Async find |wheel-dedicated-buffers-async-find|
MRU files |wheel-dedicated-buffers-mru|
Locate |wheel-dedicated-buffers-locate|
Occur |wheel-dedicated-buffers-occur|
Grep |wheel-dedicated-buffers-grep|
Outline |wheel-dedicated-buffers-outline|
Markers |wheel-dedicated-buffers-markers|
Jumps |wheel-dedicated-buffers-jumps|
Changes |wheel-dedicated-buffers-changes|
Tags |wheel-dedicated-buffers-tags|
Reorder |wheel-dedicated-buffers-reorder|
Rename |wheel-dedicated-buffers-rename|
Delete |wheel-dedicated-buffers-delete|
Copy and move |wheel-dedicated-buffers-copy-move|
Reorganize |wheel-dedicated-buffers-reorganize|
Reorganize tabs & windows |wheel-dedicated-buffers-reorg-tabwin|
Grep edit mode |wheel-dedicated-buffers-grep-edit|
Narrow current file |wheel-dedicated-buffers-narrow-file|
Narrow all circle files |wheel-dedicated-buffers-narrow-circle|
Yank ring |wheel-dedicated-buffers-yank|
Undo list |wheel-dedicated-buffers-undolist|
Batch buffer |wheel-dedicated-buffers-batch|
Command output buffer |wheel-dedicated-buffers-command|
------------------------------------------------------------------------------
INTRODUCTION *wheel-dedicated-buffers-introduction*
Wheel dedicated buffers, aka mandalas, allow you to perform Wheel
operations intuitively, using full power of your editor : search, yank,
paste, completion, and so on.
The available actions depend on the buffer type :
- menu buffers allow you to launch a wheel function
- navigation buffers allow you to go to a :
+ location, circle or torus
+ buffer, window, tab
+ MRU file, locate file
+ grep result
+ and so on
- reorganizing buffers allow you to
+ reorder locations, circles or toruses
+ rename locations, circles or toruses
+ rename files
+ move, copy or delete locations, circles and toruses
+ perform fine grain operation
+ change locations settings like name, line, col