With a change in job, I recently shifted from my primary work computer being a Lenovo X1 Carbon running GNU/Linux to using an Apple Macbook Pro Retina 15″ running MacOS.
It’s not the first time that I’ve used MacOS as my primary workstation, but I’ve spent the vast majority of my IT life working in a purely GNU/Linux environment so it was interesting having to try and setup my usual working habits and flow with this new platform.
I’m going to do a few blog posts addressing my thoughts and issues with this platform and how I’ve found it compared to my GNU/Linux laptops. I’m going to look at both hardware and software and note down a few fixes and tricks that I’ve learnt along the way.
Part 4: Terminals and adventures with keybindings
I’ve already written about the physical issues with the Macbook keyboard, but there’s another issue with this input device – keybindings.
As mentioned previously, the Macbook lacks various useful keys, such as home and end, instead, you need to use a key combination such as Apple + Left/Right to achieve the same result. However for some inexplicable reason, Apple decided that the Terminal should have it’s own special behaviour, so it does not obey the same keybindings. In any other MacOS program, using these key combinations will achieve the desired results. But with Terminal, it results in random junk appearing in the terminal – or nothing at all.
For an engineer like myself this is the single most frustrating issue I’ve had with MacOS to date – having the Terminal essentially broken out of the box on their own hardware is quite frankly unacceptable and I suspect a reflection on how Apple cares far more about consumer users than power users.
Whilst Apple’s Terminal offers the ability to configure keybindings, it has two major problems that make it unusable:
- Whilst there is an entry for keys called “Home” and “End”, these entries seem to map to actual physical Home/End keys, but not the key combinations of Apple + Home/End, which appear as-is to the OS. So any configuration done for the Home/End won’t help.
- Instead we need to configure a key combination with a modifier of Apple key. But MacOS Terminal doesn’t allow the Apple key to be used as a modifier.
The result is, there’s no way to properly fix the MacOS Terminal and in my view, it’s essentially useless. Whilst if I was using an external keyboard with a physical home/end key it wouldn’t be too much of a problem since I can set a keybinding, there are times I do actually want to be able to use the laptop keyboard effectively!
I ended up fixing it by installing the popular iTerm2 third party terminal application- in many ways it’s similar to the stock terminal, but it offers various additional configuration options.
For me the only thing that I really care about is the fact that it adds the ability to setup keybindings with the Apple + Home/End key options.
Setting the above and then creating an ~/.input.rc file (as per these instructions) resolved the keybinding issues for me, and made iTerm2 consistent with all the MacOS applications.
"\e[1~"
: beginning-of-line "\e[4~"
: end-of-line "\e[5~"
:
history
-search-backward "\e[6~"
:
history
-search-forward "\e[3~"
: delete-char "\e[2~"
: quoted-insert "\e[5C"
: forward-word "\e[5D"
: backward-word "\e\e[C"
: forward-word "\e\e[D"
: backward-word set
completion-ignore-
case
On
The key combinations work correct in the local shell, Vim and also via SSH connections to other systems. Perfect! I just wish I didn’t have to do this in the first place…
See other posts in this series via the jethro does mac tag as I explore using MacOS after years of GNU/Linux only.
Look seriously the real problem here is that you’re trying to use a UNIX terminal like Windows, and that’s always going to make you fail and, if taken to extremes, possibly even losing interest in flocks of sheep. Instead, I strongly recommend this:
echo set -o vi >> $HOME/.bashrc
All problems: solved.