When I was first starting out in software engineering, it felt like there was a never-ending barrage of tooling to learn. After more than a decade in CLI environments, I still find myself constantly learning new features and fun facts - but it’s fairly rare that I learn something new that I end up using day-to-day.
I wanted to share some things I learned at relatively late stages in the game that ended up being significant productivity boosters for me - perhaps some of them are well-known, but in the spirit of this XCKD, I hope that someone reading this might pick up something new.
Ctl-U to delete everything on the line before cursor.
Ctl-E to skip to end of line.
Ctl-A to skip to beginning of line.
Or, just use Home and End like they were intended! Kids these days….
These Ctrl keys are shortcuts from Emacs - there’s a Bash settings to switch to vi-mode if you so wish. Anyway, the first Emacs was written in 1981, probably on a PDP-11, which did not have Home and End! Same reason Neovim uses “yank” instead of “copy”.
ctrl-c
/ctrl-v
did not exist as a shortcut back when vi was being written!I know you didn’t intend to be mean or anything, but maaaaaan kids these days don’t know their history (not entirely your fault, btw)😆
This tip is super useful to me because not everyone is using a PC. On a PC sure, I would use the Home and End keys all the time. Now I’m using a laptop as my main computer and the Home and End keys are in a weird position that even to this day, 4ish years of laptop use, I still have to actually look at the keys to find them.
That’s horrible for muscle memory, every time I switch desk/keyboard I have to re-learn the position of the home/end/delete/PgUp/PgDn keys.
I got used to
Ctrl-a
/Ctrl-e
and it became second nature, my hands don’t have to fish for extra keys, to the point that it becomes annoying when a program does not support that. Some mapCtrl-a
to “Select all” so, for input fields where the selection is one line, I’d ratherCtrl-a
thenleft
/right
to go to the beginning/end than fish forhome
/end
, wherever they are.If you’re a VIM motions fan, you can always install the zsh-vi-mode: https://github.com/jeffreytse/zsh-vi-mode.
ctrl-b: move cursor back one character
ctrl-f: move cursor foward one character
ctrl-d: delete character under cursor
But that’s more key presses than just using existing keys
I find it easier using my pinky to hit ctrl than taking my fingers off the home row to use the arrow keys.
Alt-delete
deletes the whole word before cursorAlt-d
deletes the whole word after cursorCtrl-k
deletes (kill) everything after the cursorWhatever is deleted is stored in the “killring” and can be pasted(yanked) back with
Ctrl-y
(like someone else already mentioned), consecutive uses ofAlt-delete
/Alt-d
add to the killring.Alt-b
/Alt-f
moves one word backwards / forwardsAlt-t
swaps (translocates) the current word with the previous oneCtrl-_
undo last edit operationAll those bindings are the same as in emacs.
Also, normally
Ctrl-d
inserts the end-of-file character, and typically can be used to close an active shell session or when you have some other interpreter open in the terminal for interactive input.