Refresh generated neovim config
This commit is contained in:
@ -1,21 +1,24 @@
|
||||
# 🚪better-escape.nvim
|
||||
# better-escape.nvim
|
||||
|
||||
This plugin is the lua version of [better_escape.vim](https://github.com/jdhao/better-escape.vim),
|
||||
with some additional features and optimizations
|
||||

|
||||
|
||||
A lot of people have mappings like `jk` or `jj` to escape insert mode.
|
||||
The problem with this mappings is that whenever you type a `j`, neovim wait about 100-500ms (depending on your timeoutlen) to see, if you type a `j` or a `k` because these are mapped.
|
||||
Only after that time the `j` will be inserted.
|
||||
Then you always get a delay when typing a `j`.
|
||||
A lot of people have mappings like `jk` or `jj` to escape insert mode. The
|
||||
problem with this mappings is that whenever you type a `j`, neovim wait about
|
||||
100-500ms (depending on your timeoutlen) to see, if you type a `j` or a `k`
|
||||
because these are mapped. Only after that time the `j` will be inserted. Then
|
||||
you always get a delay when typing a `j`.
|
||||
|
||||
This looks like this (see below for a gif):
|
||||
An example where this has a big impact is e.g. telescope. Because the characters
|
||||
which are mapped aren't really inserted at first the whole filtering isn't
|
||||
instant.
|
||||
|
||||

|
||||

|
||||
|
||||
## ✨Features
|
||||
|
||||
- Escape without getting delay when typing in insert mode
|
||||
- Customizable mapping and timeout
|
||||
- Write mappings in many modes without having a delay when typing
|
||||
- Customizable timeout
|
||||
- Map key sequences and lua functions
|
||||
- Use multiple mappings
|
||||
- Really small and fast
|
||||
|
||||
@ -24,8 +27,8 @@ This looks like this (see below for a gif):
|
||||
Use your favourite package manager and call the setup function.
|
||||
|
||||
```lua
|
||||
-- lua with packer.nvim
|
||||
use {
|
||||
-- lua with lazy.nvim
|
||||
{
|
||||
"max397574/better-escape.nvim",
|
||||
config = function()
|
||||
require("better_escape").setup()
|
||||
@ -33,31 +36,107 @@ use {
|
||||
}
|
||||
```
|
||||
|
||||
## ❗Rewrite
|
||||
|
||||
There was a big rewrite which allows much more flexibility now. You can now
|
||||
define mappings in most modes and also use functions.
|
||||
|
||||
The biggest change was that the `mapping` config option was removed. Check the
|
||||
default configuration below to see the new structure.
|
||||
|
||||
This also deprecated the `clear_empty_lines` setting. You can replicate this
|
||||
behavior by setting a mapping to a function like this:
|
||||
|
||||
```lua
|
||||
-- `k` would be the second key of a mapping
|
||||
k = function()
|
||||
vim.api.nvim_input("<esc>")
|
||||
local current_line = vim.api.nvim_get_current_line()
|
||||
if current_line:match("^%s+j$") then
|
||||
vim.schedule(function()
|
||||
vim.api.nvim_set_current_line("")
|
||||
end)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## ⚙️Customization
|
||||
|
||||
Call the setup function with your options as arguments.
|
||||
|
||||
After the rewrite you can also use any function. So you could for example map
|
||||
`<space><tab>` to jump with luasnip like this:
|
||||
|
||||
```lua
|
||||
i = {
|
||||
[" "] = {
|
||||
["<tab>"] = function()
|
||||
-- Defer execution to avoid side-effects
|
||||
vim.defer_fn(function()
|
||||
-- set undo point
|
||||
vim.o.ul = vim.o.ul
|
||||
require("luasnip").expand_or_jump()
|
||||
end, 1)
|
||||
end
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Disable mappings
|
||||
To disable keys set them to `false` in the configuration.
|
||||
You can also disable all default mappings by setting the `default_mappings` option to false.
|
||||
|
||||
<details>
|
||||
<summary>Default Config</summary>
|
||||
|
||||
```lua
|
||||
-- lua, default settings
|
||||
require("better_escape").setup {
|
||||
mapping = {"jk", "jj"}, -- a table with mappings to use
|
||||
timeout = vim.o.timeoutlen, -- the time in which the keys must be hit in ms. Use option timeoutlen by default
|
||||
clear_empty_lines = false, -- clear line after escaping if there is only whitespace
|
||||
keys = "<Esc>", -- keys used for escaping, if it is a function will use the result everytime
|
||||
-- example(recommended)
|
||||
-- keys = function()
|
||||
-- return vim.api.nvim_win_get_cursor(0)[2] > 1 and '<esc>l' or '<esc>'
|
||||
-- end,
|
||||
timeout = vim.o.timeoutlen,
|
||||
default_mappings = true,
|
||||
mappings = {
|
||||
i = {
|
||||
j = {
|
||||
-- These can all also be functions
|
||||
k = "<Esc>",
|
||||
j = "<Esc>",
|
||||
},
|
||||
},
|
||||
c = {
|
||||
j = {
|
||||
k = "<Esc>",
|
||||
j = "<Esc>",
|
||||
},
|
||||
},
|
||||
t = {
|
||||
j = {
|
||||
k = "<Esc>",
|
||||
j = "<Esc>",
|
||||
},
|
||||
},
|
||||
v = {
|
||||
j = {
|
||||
k = "<Esc>",
|
||||
},
|
||||
},
|
||||
s = {
|
||||
j = {
|
||||
k = "<Esc>",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## API
|
||||
|
||||
`require("better_escape").waiting` is a boolean indicating that it's waiting for
|
||||
a mapped sequence to complete.
|
||||
|
||||
<details>
|
||||
<summary>statusline example</summary>
|
||||
<summary>Statusline example</summary>
|
||||
|
||||
```lua
|
||||
function escape_status()
|
||||
@ -68,28 +147,15 @@ end
|
||||
|
||||
</details>
|
||||
|
||||
## 👀Demo
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 🎓How it works
|
||||
|
||||
With the mappings there are two tables created.
|
||||
One contains all first characters and one all second characters.
|
||||
Whenever you type a character the plugin checks if it's in any of the two tables
|
||||
If it is in the first one, the plugin starts a timer.
|
||||
If it is in the second, the plugin checks whether the character you typed before is in the table with the first characters.
|
||||
|
||||
If this is the case the plugin gets all the indices where the characters are in the tables, then is searches for matches.
|
||||
If there is a match, that means that there is a mapping which has the typed character as second and the previous typed character as first character.
|
||||
The plugin then checks if the time passed since the first character was types is smaller than `timoutlen`.
|
||||
If this is the case the two characters get deleted and `keys` get feed or executed.
|
||||
|
||||
Like this it is possible that the characters really get inserted and therefore you have no delay after typing one of the characters of your mapping.
|
||||
With the `timeoutlen` it's still possible to type the characters of your mappings.
|
||||
|
||||
## ❤️ Support
|
||||
If you like the projects I do and they can help you in your life you can support my work with [github sponsors](https://github.com/sponsors/max397574).
|
||||
Every support motivates me to continue working on my open source projects.
|
||||
|
||||
If you like the projects I do and they can help you in your life you can support
|
||||
my work with [github sponsors](https://github.com/sponsors/max397574). Every
|
||||
support motivates me to continue working on my open source projects.
|
||||
|
||||
## Similar plugins
|
||||
|
||||
The old version of this plugin was a lua version of
|
||||
[better_escape.vim](https://github.com/jdhao/better-escape.vim), with some
|
||||
additional features and optimizations. This changed with the rewrite though. Now
|
||||
it has much more features.
|
||||
|
||||
Reference in New Issue
Block a user