Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yuttie/comfortable-motion.vim
Brings physics-based smooth scrolling to the Vim world!
https://github.com/yuttie/comfortable-motion.vim
neovim physical-based plugin smooth-scrolling vim
Last synced: 6 days ago
JSON representation
Brings physics-based smooth scrolling to the Vim world!
- Host: GitHub
- URL: https://github.com/yuttie/comfortable-motion.vim
- Owner: yuttie
- License: mit
- Created: 2016-10-02T12:01:05.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-08-11T10:57:47.000Z (about 2 years ago)
- Last Synced: 2024-08-01T16:56:22.068Z (3 months ago)
- Topics: neovim, physical-based, plugin, smooth-scrolling, vim
- Language: Vim script
- Homepage:
- Size: 17.6 KB
- Stars: 633
- Watchers: 10
- Forks: 19
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# comfortable-motion.vim
Brings physics-based smooth scrolling to the Vim/Neovim world!
This is highly motivated by the lack of a plugin similar to my favorite Emacs package [emacs-inertial-scroll](https://github.com/kiwanami/emacs-inertial-scroll).
Scroll with `C-d`/`C-u`:
![Scroll with `C-d`/`C-u`](https://cloud.githubusercontent.com/assets/158553/21579969/841ab468-d013-11e6-8ce6-aa5442d52b6b.gif)Scroll with `C-f`/`C-b`:
![Scroll with `C-f`/`C-b`](https://cloud.githubusercontent.com/assets/158553/21579968/841929ea-d013-11e6-82fb-e0f3d3e8e896.gif)## Requirements
This plugin depends on the timer API, which requires Vim/Neovim to be at least the following version:- Vim 7.4.1578 or above
- Neovim 0.1.5 or aboveHowever, currently, this plugin is only tested on Vim 8.0 and Neovim 0.1.7, i.e. my current development environment.
## Installation
For example, with [vim-plug](https://github.com/junegunn/vim-plug):
```vim
Plug 'yuttie/comfortable-motion.vim'
```## Configuration
Please note that the following mappings for `` and `` are not ones for you if you expect they scroll a buffer just half a window.
### Scrolling Method
This plugin relies on `` and `` by default to actually scroll a window.
You can customize these keys to other combinations like `j` and `k` as follows:```vim
let g:comfortable_motion_scroll_down_key = "j"
let g:comfortable_motion_scroll_up_key = "k"
```This results in:
![Different scrolling method](https://cloud.githubusercontent.com/assets/158553/24331179/ebc5b106-1269-11e7-90c2-747a68dec44b.gif)
Please note that you cannot choose complex keys consisting of multiple motions, e.g. `$j`.
This is because the current implementation prepends the number of scroll amount to the keys, e.g. `5$j`, and executes it once per simulation tick.### Keys and Mouse Wheel
By default, the following key mappings are defined.
```vim
nnoremap :call comfortable_motion#flick(100)
nnoremap :call comfortable_motion#flick(-100)nnoremap :call comfortable_motion#flick(200)
nnoremap :call comfortable_motion#flick(-200)
```To prevent the plugin from defining those default key mappings,
you can set `g:comfortable_motion_no_default_key_mappings` to 1.```vim
let g:comfortable_motion_no_default_key_mappings = 1
```Additionally, if your Vim/NeoVim has mouse support, you can get mouse wheel to scroll a window by the following mappings:
```vim
noremap :call comfortable_motion#flick(40)
noremap :call comfortable_motion#flick(-40)
```You may need to enable the `mouse` option for the above to work, for example, by `set mouse=a`.
### Simulation Parameters
There are three configurable parameters:
* `g:comfortable_motion_interval` [default: 1000.0 / 60]
* `g:comfortable_motion_friction` [default: 80.0]
* `g:comfortable_motion_air_drag` [default: 2.0]For example, with any of the following configurations, you can get ``/`` (with the
default impulse value of `-100`/`100`) to scroll a window about 25 lines, but
tastes are different.### Friction & Air Resistance
```vim
let g:comfortable_motion_friction = 80.0
let g:comfortable_motion_air_drag = 2.0
```### Friction Only
```vim
let g:comfortable_motion_friction = 200.0
let g:comfortable_motion_air_drag = 0.0
```### Air Resistance Only
```vim
let g:comfortable_motion_friction = 0.0
let g:comfortable_motion_air_drag = 4.0
```## Advanced Configurations
If you would like to use scrolling proportional to the window height,
you may use settings such as these:
```vim
let g:comfortable_motion_no_default_key_mappings = 1
let g:comfortable_motion_impulse_multiplier = 1 " Feel free to increase/decrease this value.
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * 2)
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * -2)
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * 4)
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * -4)
```## License
MIT License