boydaihungst/relative-motions.yazi
relative-motions.yazi (fork)
A Yazi plugin based about vim motions.
relative_motions_scale.mp4
(Moved) Smart truncate feature (moved to smart-truncate.yazi)
Requirements
- Yazi >= v25.5.31
- Smart-truncate.yazi: If you want to use smart truncate feature. Which is now disabled by default.
Installation
ya pkg add boydaihungst/relative-motionsConfiguration
If you want to use the numbers directly to start a motion add this to your keymap.toml:
Details
[[mgr.prepend_keymap]]
on = [ "1" ]
run = "plugin relative-motions -- 1"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "2" ]
run = "plugin relative-motions -- 2"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "3" ]
run = "plugin relative-motions -- 3"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "4" ]
run = "plugin relative-motions -- 4"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "5" ]
run = "plugin relative-motions -- 5"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "6" ]
run = "plugin relative-motions -- 6"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "7" ]
run = "plugin relative-motions -- 7"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "8" ]
run = "plugin relative-motions -- 8"
desc = "Move in relative steps"
[[mgr.prepend_keymap]]
on = [ "9" ]
run = "plugin relative-motions -- 9"
desc = "Move in relative steps"Alternatively you can use a key to trigger a new motion without any initial value, for that add the following in keymap.toml:
[[mgr.prepend_keymap]]
on = [ "m" ]
run = "plugin relative-motions"
desc = "Trigger a new relative motion"Additionally there are a couple of initial configurations that can be given to the plugin's setup function:
| Configuration | Values | Default | Description |
|---|---|---|---|
show_numbers |
relative, absolute, relative_absolute or none |
none |
Shows relative or absolute numbers before the file icon |
show_motion |
true or false |
false |
Shows current motion in Status bar |
only_motions |
true or false |
false |
If true, only the motion movements will be enabled, i.e., the commands for delete, cut, yank and visual selection will be disabled |
smart_truncate (new) |
true or false |
false |
Truncate filename/folder and symlink, but keep extension. i.e, long_named_file….mkv |
line_numbers_styles (new) |
{hovered = ui.Style():fg("#61afef"), normal = ui.Style():fg("#494D56")} |
none | Set styles for hovered file/folder or normal file/folder |
If you want, for example, to enable relative numbers as well as to show the motion in the status bar,
add the following to Yazi's init.lua, i.e. ~/.config/yazi/init.lua:
-- ~/.config/yazi/init.lua
require("relative-motions"):setup({ show_numbers="relative", show_motion = true })Note
The show_numbers and show_motion functionalities overwrite Current:render
and Status:children_render respectively.
If you have custom implementations for any of this functions
you can add the provided Entity:number and Status:motion to your implementations, just check here how we are doing things.
Usage
This plugin adds the some basic vim motions like 3k, 12j, 10gg, etc.
The following table show all the available motions:
| Command | Description |
|---|---|
j/<Down> |
Move n lines down |
k/<Up> |
Move n lines up |
gj/g<Down> |
Go n lines down |
gk/g<Up> |
Go n lines up |
gg |
Go to line |
Furthermore, the following operations were also added:
| Command | Description |
|---|---|
v |
visual select |
y |
Yank |
x |
Cut |
d |
Delete motion |
This however must be followed by a direction, which can be j/<Down>, k/<Up> or repeating the command key,
which will operate from the cursor down, e.g. 2yy will copy two files.
Finally, we also support some tab operations:
| Command | Description |
|---|---|
t |
create n tabs |
H |
Move n tabs left |
L |
Move n tabs right |
gt |
Go to the n tab |
w |
Close tab n |
W |
Close n tabs right |
< |
Swap current tab with n tabs left |
> |
Swap current tab with n tabs right |
~ |
Swap current tab with tab n |
