Remapping Caps Lock to Control and Escape in macOS Big Sur

For more better text editing and great success.

I’m a big fan of VIM modal editing and keeping keyboard shortcuts as close to the home row as possible. This philosophy allows fluid text editing and staying in the “programming flow state”.

Remapping the Caps Lock key to Control and Escape is a big part of this workflow. Pressing and releasing sends the Escape key, while pressing and holding emulates the Control Key.

In macOS, I’d been using Karabiner Elements to enable this remapping, however with macOS Big Sur I could no longer get the configuration to work. This was a serious annoyance, since the VIM shortcuts are burned into my fingertips.

Enter HammerSpoon! Using the ControlEscape plugin, I am now back in remapping bliss. Below are the System Preference settings required to make this setup work.

Vim is not TextMate

When I first discovered Vim I wasted a lot of time trying to bend it backwards into a traditional editor. The below quote sums it up perfectly:

Vim is not TextMate or whatever other editor you have used before. There is no way to transfer all your old habits seamlessly, point blank.

Instead of wasting your time trying to make Vim and your terminal into something that it’s not and can’t be you should learn how to use and customize Vim wisely. All your Cmd+Shift+Ctrl+Alt combos won’t lead you anywhere. Especially in a terminal where Alt is often problematic and Cmd unusable.

Consider using leader(:help leader):

  • it’s portable on every platform
  • it’s less prone to conflicts with your OS or terminal emulator
  • it opens a lot of easy to remember possibilities

— romainl

Adding gobs of plugins instead of learning Vim’s native functionality is another common trap, so I maintain a secondary lightweight Vim config called Ninjarc with minimal plugins to keep me sharp.

Finally, Tim Pope’s philosophy of favouring commands over leader key combos yields a more cohesive configuration. I’m experimenting with Spacemacs-style command mnemonics in my Aetherwolf Vim config. For example, instead of binding Leader+T to open NerdTree, :tn is used (Toggle NerdTree). This allows :tt for Toggle Tagbar and so on – a nice memorable taxonomy rather than a flat multitude of somewhat arbitrary leader combos.

I might eventually move this into Denite menus à la SpaceVim, but for now I’m digging the simplicity of using :ex commands.

neovim: macos tmux and netrw/vinegar clipboard errors

So it looks like MacOS Sierra broke pbcopy/pbpaste for tmux. This manifests as clipboard errors when using netrw/vinegar in neovim under tmux. (Dunno why netrw is writing to the clipboard but anyways).

The solution is to use Homebrew to reinstall a patched version of reattach-to-user-namespace:

brew uninstall reattach-to-user-namespace
brew install reattach-to-user-namespace --with-wrap-pbcopy-and-pbpaste

Although this was annoying, it did lead to running brew cleanup which reclaimed 3.8GB of disk space. Jinkies!

vim: render plantuml

When using the plugin plantuml-syntax, add the following one-liner in .vimrc to render a PNG in the current directory when ‹leader›b is pressed:

autocmd FileType plantuml nnoremap <buffer> <leader>b :!java -jar ~/bin/plantuml.jar -o %:p:h %<cr>

This assumes Linux and that plantuml.jar lives in ~/bin. If working from a Dropbox directory, the image can then easily be viewed in a web browser.