Prerequisites Link to heading
- Start a docekr container:
docker run --rm -it alpine sh
- Run some random commands in that shell:
ls -la
pwd
cd ~
uname -a
Problem Link to heading
Try to navigate the history with Ctrl + p
and notice it is broken. When you
press it the first time it does nothing, press it a second time it jumps 2
commands.
Reason Link to heading
- The first time you press
Ctrl + p
, it waits to see if you pressCtrl + q
to detach from the docker container. - The second time you press
Ctrl + p
, it notices you did not pressCtrl + q
, so it issues both escape sequences to the shell, navigating you 2 positions back in the command history.
Pause Link to heading
Yes I know, docker
devs should have chosen a sequence not already reserved by
literally all shells ever, but don’t blame just them, vim
, emacs
, tmux
,
and more, do this sort of common sense clobbering too. And they won’t change
defaults because they’re too big and arrogant to care.
Solution Link to heading
Add this key to your ~/.docker/config.json
:
"detachKeys": "ctrl-@"
It should look something like:
{
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.13-ce (linux)"
},
"detachKeys": "ctrl-@"
}
Now you:
- Press
Ctrl + p
and what should have always happened, will happen. - Hit
Ctrl + Shift + @
to detach, instead ofCtrl + p | Ctrl + q
.