Accidentally triggering a destructive command is one of the worst feelings
during daily development. Keybindings that alter remote branch history—like
git push --force—should require deliberate intent so they aren’t hit by a
stray keypress.
Inspired by a commit in thallada’s neovim-config, shifting keymaps for
destructive operations from lowercase to uppercase (<Leader>gf →
<Leader>gF) adds a crucial layer of friction.
The Problem with Lowercase Shortcuts for Destructive Actions
When mapping Git commands inside NeoVim, it is common to group them under a
<Leader>g prefix:
<Leader>gp: Standardgit push<Leader>gl:git pull<Leader>gf:git push --force
The issue with <Leader>gf is proximity and muscle memory. In standard Vim
keybindings, gf (“goto file”) is a standard movement key. In addition, typing
a lowercase f right after g requires no modifier keys, making it trivial to
accidentally force push when you simply meant to perform a regular push (gp)
or inspect a file.
The Fix: Requiring an Explicit Shift (<Leader>gF)
By remapping the force push command to uppercase F, the shift modifier
acts as a conscious safeguard:
-- Force push requires holding Shift to prevent accidental destructive operations
vim.keymap.set("n", "<Leader>gF", "<cmd>Git push --force<CR>", { desc = "Git: Force Push" })