mirror of
https://github.com/mhinz/vim-galore.git
synced 2025-02-24 01:59:28 +08:00
Quirks: delay when using escape key in terminal
This commit is contained in:
parent
21c53ad9a2
commit
cef43d0bb0
@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Debugging: [Debugging syntax files](README.md#debugging-syntax-files)
|
- Debugging: [Debugging syntax files](README.md#debugging-syntax-files)
|
||||||
- Quirks: [Editing small files is slow](README.md#editing-small-files-is-slow)
|
- Quirks: [Editing small files is slow](README.md#editing-small-files-is-slow)
|
||||||
- Quirks: [Editing huge files is slow](README.md#editing-huge-files-is-slow)
|
- Quirks: [Editing huge files is slow](README.md#editing-huge-files-is-slow)
|
||||||
|
- Quirks: [Delays when using escape key in terminal](README.md#delays-when-using-escape-key-in-terminal)
|
||||||
- Misc: [Additional resources](README.md#additional-resources)
|
- Misc: [Additional resources](README.md#additional-resources)
|
||||||
- Misc: [Easter eggs](README.md#easter-eggs)
|
- Misc: [Easter eggs](README.md#easter-eggs)
|
||||||
- Misc: [Why hjkl for navigation?](README.md#why-hjkl-for-navigation)
|
- Misc: [Why hjkl for navigation?](README.md#why-hjkl-for-navigation)
|
||||||
|
62
README.md
62
README.md
@ -1230,9 +1230,65 @@ bracketed paste mode automatically if the terminal emulator supports it.
|
|||||||
|
|
||||||
#### Delays when using escape key in terminal
|
#### Delays when using escape key in terminal
|
||||||
|
|
||||||
If you live in the command-line, you probably don't use a real dumb terminal
|
If you live in the command-line, you probably use a so-called _terminal
|
||||||
emulator anymore, but a so-called _terminal emulator_ like xterm,
|
emulator_ like xterm, gnome-terminanal, iTerm2, etc. (opposed to a real
|
||||||
gnome-terminal, iTerm2 etc. instead.
|
[terminal](https://en.wikipedia.org/wiki/Computer_terminal)).
|
||||||
|
|
||||||
|
Like their ancestors, terminal emulators use [escape
|
||||||
|
sequences](https://en.wikipedia.org/wiki/Escape_sequence) (or _control
|
||||||
|
sequences_) to control things like moving the cursor, changing text colors, etc.
|
||||||
|
They're simply strings of ASCII characters starting with an escape character
|
||||||
|
(displayed as `^[`). When such a string arrives, the terminal emulator looks up the
|
||||||
|
accompanying action in the [terminfo](https://en.wikipedia.org/wiki/Terminfo)
|
||||||
|
database.
|
||||||
|
|
||||||
|
To make the problem clearer, I'll explain mapping timeouts first. They always
|
||||||
|
happen when there's ambiguity between mappings:
|
||||||
|
|
||||||
|
```viml
|
||||||
|
:nnoremap ,a :echo 'foo'<cr>
|
||||||
|
:nnoremap ,ab :echo 'bar'<cr>
|
||||||
|
```
|
||||||
|
|
||||||
|
Both mappings work as expected, but when typing `,a`, there will be a delay of 1
|
||||||
|
second, because Vim waits whether the user keys in another `b` or not.
|
||||||
|
|
||||||
|
Escape sequences pose the same problem:
|
||||||
|
|
||||||
|
- `<esc>` is used a lot for returning to normal mode or quitting an action.
|
||||||
|
- Cursor keys are encoded using escape sequences.
|
||||||
|
- Vim expects <kbd>Alt</kbd> (also called _Meta key_) to send a proper 8-bit
|
||||||
|
encoding with the high bit set, but many terminal emulators don't support it
|
||||||
|
(or don't enable it by default) and send an escape sequence instead.
|
||||||
|
|
||||||
|
You can test the above like this: `vim -u NONE -N` and type `i<c-v><left>` and
|
||||||
|
you'll see a sequence inserted that starts with `^[` which denotes the escape
|
||||||
|
character.
|
||||||
|
|
||||||
|
Putting it in a nutshell, Vim has a hard time distinguishing between a typed
|
||||||
|
`<esc>` character and a proper escape sequence.
|
||||||
|
|
||||||
|
By default Vim uses `:set timeout timeoutlen=1000`, so it delays on ambiguity of
|
||||||
|
mappings _and_ key codes by 1 second. This is a sane value for mappings, but you
|
||||||
|
can define the key code timeout on its own which is the most common workaround
|
||||||
|
for this entire issue:
|
||||||
|
|
||||||
|
```viml
|
||||||
|
set timeout " for mappings
|
||||||
|
set timeoutlen=1000 " default value
|
||||||
|
set ttimeout " for key codes
|
||||||
|
set ttimeoutlen=10 " unnoticeable small value
|
||||||
|
```
|
||||||
|
|
||||||
|
Under `:h ttimeout` you find a small table showing the relationship between
|
||||||
|
these options.
|
||||||
|
|
||||||
|
If you're using tmux between Vim and your terminal emulator, also put this in
|
||||||
|
your `~/.tmux.conf`:
|
||||||
|
|
||||||
|
```tmux
|
||||||
|
set -sg escape-time 0
|
||||||
|
```
|
||||||
|
|
||||||
## List of colorschemes
|
## List of colorschemes
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user