configuration - chimay/wheel GitHub Wiki
- Vim options
- Dictionary
- Mappings
- Prefix
- Locate database
- Grep ex command
- Project markers
- Auto chdir project
- Wheel folder
- Wheel name
- Autoread wheel
- Autowrite wheel
- Session folder
- Session name
- Autoread session
- Autowrite session
- Backups
- Max number of elements in history
- Max number of elements in input history
- Max number of elements in mru
- Max number of elements in yank ring
- Maximum number of lines of a yank
- Maximum size of a yank
- Max layers in dedicated buffers
- Max number of tabs
- Max number or horizontal splits
- Max number or vertical splits
- Completion
- Frecency
- Statusline in dedicated buffers
- Messages
- Filter prompt in dedicated buffers
- Selection marker
- Signs
- Tabline
- Example
To facilitate the navigation between buffers, the following vim options can be useful :
set hidden
set bufhidden=hideIf you don't want to activate these options, remember to write your files before using a wheel navigation tool.
To enable nice completion in prompting wheel functions :
set wildchar=<TAB>
set wildmode=longest,fullSee vim help on 'wildmode' to adapt it to your taste.
Customization is done using the g:wheel_config dictionary. You must
first initialize it :
let g:wheel_config = {}
let g:wheel_config.project = {}
let g:wheel_config.storage = {}
let g:wheel_config.storage.wheel = {}
let g:wheel_config.storage.session = {}
let g:wheel_config.maxim = {}
let g:wheel_config.completion = {}
let g:wheel_config.frecency = {}
let g:wheel_config.display = {}
let g:wheel_config.display.sign = {}Determine how many default mappings are available :
let g:wheel_config.mappings = 10See the mapping levels for more information.
Default : 0
Prefix for mappings of level 0, 1, 2 :
let g:wheel_config.prefix = '<my-wonderful-prefix>'See the mapping prefix for more information.
Default : <M-w>
If you want to use a custom database when using locate :
let g:wheel_config.locate_db = '~/my_locate.db'Default : empty
Whether to use internal :vimgrep or external :grep to grep files :
let g:wheel_config.grep = 'vimgrep'
" or
let g:wheel_config.grep = 'grep'Default : internal vimgrep, in case external grep is not available.
File(s) or directories(s) marking a project root. Can take a string or list value. :
let g:wheel_config.project.markers = '.git'
let g:wheel_config.project.markers = ['.git', '.my-project-root']If a list is given, the project directory is found as soon as one marker of the list is found in it
Default : '.git'
Try to change directory to project root if > 0 :
let g:wheel_config.project.auto_chdir = 1To find the right folder, the plugin looks at files or dirs listed in
g:wheel_config.project_markers.
Default : 0
The plugin can save your wheel catégories & groups in wheel files.
You can have as many wheel files as you want, they will be stored in a wheel folder.
Folder where your wheels will be saved :
let g:wheel_config.storage.wheel.folder = '~/.local/share/wheel'It is highly recommended to define this folder and regularly save the wheel, either manually or automatically, using the autowrite config.
- vim :
~/.vim/wheel - nvim :
~/.local/share/nvim/wheel
Name for the default wheel file :
let g:wheel_config.storage.wheel.name = 'wheel.vim'This file will be located in g:wheel_config.storage.wheel.folder
Default : wheel.vim
Auto read wheel file on startup if non null :
let g:wheel_config.storage.wheel.autoread = 1To enable it, you need to add an autocommand on vim enter :
autocmd VimEnter * call wheel#void#init()Default : 0
Auto write wheel file on exit if non null :
let g:wheel_config.storage.wheel.autowrite = 1To enable it, you need to add an autocommand on vim leave :
autocmd VimLeave * call wheel#void#exit()Default : 0
Wheel can save your tabs & windows layout in session files.
You can have as many session files as you want, they will be stored in a session folder.
Folder where your sessions will be saved :
let g:wheel_config.storage.session.folder = '~/.local/share/wheel/session'- vim :
~/.vim/wheel/session - nvim :
~/.local/share/nvim/wheel/session
Name for the default session file :
let g:wheel_config.storage.session.name = 'session.vim'This file will be located in g:wheel_config.storage.session.folder
Default : 'session.vim'
Auto read current or default session file on startup if non null :
let g:wheel_config.storage.session.autoread = 1To enable it, you need to add an autocommand on vim enter :
autocmd VimEnter * call wheel#void#init()Default : 0
Auto write current or default session file on exit if non null :
let g:wheel_config.storage.session.autowrite = 1To enable it, you need to add an autocommand on vim leave :
autocmd VimLeave * call wheel#void#exit()Default : 0
Number of backups for wheel & session files :
let g:wheel_config.storage.backups = 3Assuming your wheel file is wheel.vim, the backups will be named
wheel.vim.1, wheel.vim.2, wheel.vim.3, and so on.
It is recommended to use backups, in case things get messed up accidentally.
Default : 3
Maximum number of elements in the wheel history :
let g:wheel_config.maxim.history = 400Default : 500
Maximum number of elements in the input history :
let g:wheel_config.maxim.input = 200Default : 500
Maximum number of elements in mru :
let g:wheel_config.maxim.mru = 300Default : 500
Maximum number of elements in the yank ring :
Default : 500
Maximum number of elements in the yank ring for unnamed register :
let g:wheel_config.maxim.unnamed_yanks = 700Default : 500
Maximum number of elements in the yank ring for other registers :
let g:wheel_config.maxim.other_yanks = 100Default : 50
Maximum number of lines of a yank added in the yank ring :
let g:wheel_config.maxim.yank_lines = 50Default : 30
Maximum size of a yank added in the yank ring, in bytes :
let g:wheel_config.maxim.yank_size = 3000Default : 3000
Maximum size of layer ring in dedicated buffers :
let g:wheel_config.maxim.layers = 5Default : 5
Maximum number of tabs in tab layouts :
let g:wheel_config.maxim.tabs = 12Default : 15
Maximum number of horizontal splits in layouts :
let g:wheel_config.maxim.horizontal = 3Default : 3
Maximum number of vertical splits in layouts :
let g:wheel_config.maxim.vertical = 4Default : 4
To enable a kind of fuzzy-vowels completion :
let g:wheel_config.completion.vocalize = 1Default : 0
To enable a kind of fuzzy-word completion :
let g:wheel_config.completion.wordize = 1Overrrides g:wheel_config.completion.vocalize.
Default : 0
To enable full fuzzy completion :
let g:wheel_config.completion.fuzzy = 1Overrrides vocalize and wordize settings.
Default : 0
The frecency (frequent & recent) algorithm is very simple :
- when you jump to a location, its score is increased by a reward
- the scores of all the other locations of the frecency list are decreased by a penalty
- when a score dives below 0, the location is removed from the list
You can customize the reward :
let g:wheel_config.frecency.reward = 150and the penalty :
let g:wheel_config.frecency.penalty = 1The higher the reward/penaly ratio, the bigger your frecency list will be.
- reward : 50
- penalty : 1
By default, dedicated buffers status is displayed in the statusline. If you'd rather have it printed in the echo area, just set the option to zero :
let g:wheel_config.display.statusline = 0Default : 1
The highlight group is WheelStatusLine. You can customize it :
highlight WheelStatusLine guifg=#5b3c11 guibg=#0 gui=bold,reverseYou can ask wheel to print one-line messages when possible :
let g:wheel_config.display.dedibuf_msg = 'one-line'or to accept multi-line messages :
let g:wheel_config.display.dedibuf_msg = 'multi-line'Default : one-line
if you set this option to multi-line, I recommend you set 'cmdheight'
option to a minimum of 3 :
set cmdheight=3You can customize the filter prompt in dedicated buffers :
For regular dedicated buffer, without BufWriteCmd autocommand :
let g:wheel_config.display.prompt = 'wheel $ 'Default : '☯ '
For writable dedicated buffer, with BufWriteCmd autocommand :
let g:wheel_config.display.prompt_writable = 'wheel # 'Default : '☈ '
You can customize the selection marker in dedicated buffers :
let g:wheel_config.display.selection = '-> 'Default : '☰ '
By default, signs are displayed at :
- wheel locations
- cursor line after a native jump
You can disable it if you want :
let g:wheel_config.display.sign.switch = 0The sign settings for wheel location can be modified :
let g:wheel_config.display.sign.settings = { 'text' : '@' }Default : { 'text' : '☯' }
Sign settings for native navigation :
let g:wheel_config.display.sign.native_settings = { 'text' : '*' }Default : { 'text' : '✻' }
See also sign.txt and :sign in vim help.
If you want wheel to manage your tabline, use this function :
set tabline=%!wheel#status#tabline()The format is :
- tabnumber:filename
- tabnumber:filename[+] if at least a file is modified
- tabnumber:filename(win_num) if there is more than one window
If you are using gui tabs in gvim, you can ask wheel to manage the labels :
set guitablabel=%{wheel#status#guitablabel()}If you find a way to customize gui tabs labels for nvim-qt, feel free to describe it in a github issue.
If you prefer using text tabs even in nvim-qt, simply put :
GuiTabline 0in your ginit.vim.
Here is an example of a complete configuration :
if ! exists("g:wheel_loaded")
" ---- DONT FORGET TO INITIALIZE DICTS BEFORE USING THEM
let g:wheel_config = {}
let g:wheel_config.project = {}
let g:wheel_config.storage = {}
let g:wheel_config.storage.wheel = {}
let g:wheel_config.storage.session = {}
let g:wheel_config.maxim = {}
let g:wheel_config.completion = {}
let g:wheel_config.frecency = {}
let g:wheel_config.display = {}
let g:wheel_config.display.sign = {}
" ---- The bigger it is, the more mappings available
let g:wheel_config.mappings = 10
" ---- Prefix for mappings
let g:wheel_config.prefix = '<M-w>'
" ---- Locate database ; default one if left empty
let g:wheel_config.locate_db = '~/index/locate/home.db'
" ---- Grep command : :grep or :vimpgrep
let g:wheel_config.grep = 'grep'
" Marker of project root
"let g:wheel_config.project.markers = '.git'
"let g:wheel_config.project.markers = '.project-root'
" List of markers
" The project dir is found as soon as one marker is found in it
let g:wheel_config.project.markers = ['.hg' , '.git', '.project-root']
" Auto cd to project root if > 0
let g:wheel_config.project.auto_chdir = 1
" The folder where toruses and circles will be stored and read
let g:wheel_config.storage.wheel.folder = '~/.local/share/wheel'
" Name of the default wheel file
let g:wheel_config.storage.wheel.name = 'wheel.vim'
" Auto read wheel file on startup if > 0
let g:wheel_config.storage.wheel.autoread = 1
" Auto write wheel file on exit if > 0
let g:wheel_config.storage.wheel.autowrite = 1
" The folder where sessions will be stored and read
let g:wheel_config.storage.session.folder = '~/.local/share/wheel/session'
" Name of the default session file
let g:wheel_config.storage.session.name = 'session.vim'
" Auto read default session file on startup if > 0
let g:wheel_config.storage.session.autoread = 1
" Auto write default session file on exit if > 0
let g:wheel_config.storage.session.autowrite = 1
" Number of backups for wheel & session files
let g:wheel_config.storage.backups = 5
" ---- Maximum number of elements in history
let g:wheel_config.maxim.history = 400
" ---- Maximum number of elements in input history
let g:wheel_config.maxim.input = 200
" ---- Maximum number of elements in mru
let g:wheel_config.maxim.mru = 300
" ---- Maximum number of elements in yank ring
let g:wheel_config.maxim.default_yanks = 700
let g:wheel_config.maxim.other_yanks = 100
" ---- Maximum lines of yank to add in yank ring
let g:wheel_config.maxim.yank_lines = 30
" ---- Maximum size of yank to add in yank ring
let g:wheel_config.maxim.yank_size = 3000
" ---- Maximum size of layer ring
let g:wheel_config.maxim.layers = 10
" ---- Maximum number of tabs in layouts
let g:wheel_config.maxim.tabs = 12
" ---- Maximum number of horizontal splits
let g:wheel_config.maxim.horizontal = 3
" ---- Maximum number of vertical splits
let g:wheel_config.maxim.vertical = 4
" ---- Completion
let g:wheel_config.completion.vocalize = 1
let g:wheel_config.completion.wordize = 1
let g:wheel_config.completion.fuzzy = 0
let g:wheel_config.completion.scores = 1
" ---- Frecency
let g:wheel_config.frecency.reward = 120
let g:wheel_config.frecency.penalty = 1
" ---- Mandala & leaf status in statusline ?
let g:wheel_config.display.statusline = 1
" ---- Wheel dedibuf message : one-line or multi-line
let g:wheel_config.display.dedibuf_msg = 'one-line'
" ---- Filter prompt in dedicated buffers
"let g:wheel_config.display.prompt = 'wheel $ '
"let g:wheel_config.display.prompt_writable = 'wheel # '
" ---- Selection marker in dedicated buffers
"let g:wheel_config.display.selection = '-> '
" ---- Signs
let g:wheel_config.display.sign.switch = 1
" ---- Signs at wheel locations
"let g:wheel_config.display.sign.settings = { 'text' : '@' }
" ---- Signs after using Wheel interface to native navigation (buffer, marker, jump, change, tag, ...)
"let g:wheel_config.display.sign.native_settings = { 'text' : '*' }
let g:wheel_config.debug = 0
endif
augroup wheel
" Clear the group
autocmd!
" On vim enter, for autoreading
autocmd VimEnter * call wheel#void#init()
" On vim leave, for autowriting
autocmd VimLeave * call wheel#void#exit()
" Update location line & col before leaving a window
autocmd BufLeave * call wheel#vortex#update()
" Executed before jumping to a location
autocmd User WheelBeforeJump call wheel#vortex#update()
" Executed before organizing the wheel
autocmd User WheelBeforeOrganize call wheel#vortex#update()
" Executed before writing the wheel
autocmd User WheelBeforeWrite call wheel#vortex#update()
" Executed after jumping to a location
"autocmd User WheelAfterJump norm zMzx
" For current wheel location to auto follow window changes
autocmd WinEnter * call wheel#projection#follow()
" For current wheel location to follow on editing, buffer loading
"autocmd BufRead * call wheel#projection#follow()
" For current wheel location to follow on entering buffer
"autocmd BufEnter * call wheel#projection#follow()
" Executed after using Wheel interface to a native jump (buffer, marker, jump, change, tag, ...)
"autocmd User WheelAfterNative call wheel#projection#follow()
" Add current non-wheel file to MRU files
autocmd BufRead * call wheel#attic#record()
" To record your yanks in the yank ring
autocmd TextYankPost * call wheel#codex#add()
augroup END