Jeg lærer meg vim fordi BetterSnapTool har sluttet å virke
BetterSnapTool
Jeg har så lenge jeg har brukt Mac vært avhengig av et verktøy for vindushåndtering. Et verktøy som kan plassere et vindu på halvparten av skjermen, flytte det uten å måtte dra i tittel-rammen, og endre størrelse uten å treffe de 3 pixlene som utgjør rammen.
Det første verktøyet jeg brukte var Zooom2, som sluttet å virke etter en eller annen oppgradering, og som det nå knapt finnes spor av på internett. Jeg gikk da over til Magnet som hjalp meg med å plassere et vindu på halvparten av skjermen, men ikke med flytting og resizing.
Fra Magnet gikk jeg over til BetterSnapTool, som løste akkurat det samme som Zooom2.
Men etter en oppgradering av OS X eller BetterSnapTool sluttet også dette å virke. Det virker fremdeles på de fleste applikasjoner, men den vil ikke forstørre Firefox-vinduet til fullskjerm, og vil ikke alltid fylle høyre halvdel av skjermen med terminalen uten at jeg sender den til venstre halvdel først.
Det er med andre ord på tide å skifte ut BetterSnapTool.
Tiling Window Manager
Samtidig med at BetterSnapTool begynte å krangle, lekte jeg meg med zellij, som er en slags blanding av screen/tmux og en tiling window manager for terminalen.

Da jeg skulle bytte ut BetterSnapTool, gikk det opp for meg at en tiling window manager kunne løse både BetterSnapTool-problemene og gi meg funksjonaliteten som appellerte til meg med zellij - bare for hele skrivebordet.
Jeg fant to gode alternativer: Yabai og Aerospace.
Valget falt på Aerospace fordi den så ut til å ha mest traction og være under aktiv utvikling (selv om den fortsatt er i beta).

Jeg installerte Aerospace vha homebrew.
brew install aerospace
Aerospace kan startes fra kommandolinjen og avsluttes med ctrl-c,
så det føles slett ikke så forpliktende ut å teste den.
Problem 1: Vanskelig å se hva som er i fokus
Når alle vinduer ligger kant i kant er det vanskelig å se hva som er i fokus. Dette er et problem som flere brukere av Aerospace kjenner til, og en løsning er JankyBorders.
JankyBorders tegner en tykk, farget ramme rundt vinduet som er i fokus, og lar deg konfigurere både farge, tykkelse og stil.

Installeres vha homebrew med følgende kommando:
brew install borders
Problem 2: Aerospace fyller opp menu-baren
Aerospace har virtuelle workspaces, og du kan vise hvilket workspace du er i på menu-baren. Men menu-baren på Mac er ikke særlig stor, og på Mac med notch blir det enda trangere.
En måte å organisere alle tingene man har i menu-baren er:
- Koble til en større ekstern skjerm (uten notch)
- Trekk de viktigste tingene i menu-baren til høyre
- Koble av ekstern skjerm
Ice løser dette på en bedre måte ved å la deg skjule og organisere ikoner i menu-baren. Du kan bestemme hva som skal være synlig til enhver tid og hva som skal gjemmes bort.

brew install --cask jordanbaird-ice
Problem 3: Shortcut-jungelen
Aerospace kan konfigureres til å bruke akkurat de shortcut'ene du selv ønsker, men neste problem blir å finne shortcuts som ikke kolliderer med eksisterende shortcuts på Mac'en.
Jeg har lenge ønsket at det fantes konvensjoner for hvilke shortcuts som er forbeholdt operativsystemet og hvilke som kan brukes av applikasjoner. Uten slike konvensjoner må jeg kartlegge alt jeg allerede bruker.
Den applikasjonen som beslaglegger flest shortcuts hos meg er uten tvil IntelliJ.
Hvis jeg rydder opp i IntelliJ-shortcuts, frigjør jeg både shortcuts til Aerospace OG får bedre kontroll i editoren jeg bruker 90% av arbeidsdagen.
Problem 4: Shortcuts i IntelliJ
Det var sikkert en god plan med tanke på tildeling av shortcuts i IntelliJ fra starten, men idag oppleves det som at features har fått shortcuts basert på hva som var ledig og ikke hva som er intuitivt.
Det hadde vært deilig å få ryddet opp i dette. Jeg er villig til å bruke en lenger shortcut hvis den hadde vært bygd opp på en logisk måte slik at den var lettere å huske (mnemonic).
Men å skifte ut alle shortcuts i IntelliJ ville gått kraftig ut over flyten min i hverdagen.
Jeg begynte derfor på å lage et nytt keymap i IntelliJ (som bygger videre på det jeg allerede bruker).
Første kandidat for nye shortcuts var alt som har med Refactoring å gjøre.
cmd-r r - Rename
cmd-r i - Inline
cmd-r v - extract Variable
cmd-r m - extract Method
cmd-r o - mOve
Dette så ut som en lovende start, og lett å lære seg!
Dessverre viste det seg at cmd-r allerede er brukt til replace.
Og når jeg vil lage lignende logiske oppbygde shortcuts for Compile (cmd-c c, cmd-c p, osv),
støter jeg på samme problem, ettersom cmd-c allerede er i bruk.
Jeg kan da pøse på med modifiers og si at jeg bytter ut cmd-r med cmd-opt-shift-ctrl-r (også kalt meh-r) eller
lignende, men dette vil gjøre det ganske så tungt å bruke på mine tastaturer med home row modifiers.

Ideavim to the rescue!
Ideavim er en plugin i IntelliJ som gir deg vim-oppførsel i IntelliJ, og gir deg muligheten til å lage lange shortcuts som starter med leader-key. Noe som igjen betyr "navnerom" for shortcuts!
Ideavim lar meg konfigurere shortcuts akkurat slik jeg vil, og gir meg mulighet til en gradvis overgang.
I tillegg vil løsningen med et eget navnerom gjøre det mulig å kvitte seg med en haug med shortcuts som er mer eller mindre tilfeldig spredd ut over f-tasteraden.
Success!
Lære seg vim
Men for å kunne bruke Ideavim effektivt, må jeg faktisk lære meg vim ordentlig.
Vim har en ganske bratt læringskurve, noe som illustreres med mengden av "how to exit vim"-memes.


Heldigvis er dette noe vim-miljøet er klar over og det finnes en mengde lær-deg-vim-verktøy.
Jeg har testet:
-
https://vim-adventures.com/
- har bare testet det som er gratis, men det er veldig bra!
-
https://vimdrill.com/
- virket lovende, stoppet å virke på norsk tastatur da jeg kom til ^
-
vimtutor
- følger med vim og er en god start
-
vim be good
- I håp om å slippe å installere neovim og lære meg hvordan plugins fungerer i neovim prøvde jeg å bruke docker-imaget; som ikke virket på Mac med Apple Silicon
-
vim be better
-
krøp til korset og installerte neovim og "vim be better" via lazy.nvim-plugin-manager
- Dette er uten tvil det beste verktøyet for å lære seg vim av de jeg har testet
-
krøp til korset og installerte neovim og "vim be better" via lazy.nvim-plugin-manager
Resultatet så langt
Jeg har foreløpig installert shortcuts for refactor, compile og execute i Ideavim:
" -----------------------------------------------------------------------------
" COMPILE/BUILD CATEGORY (Space+c)
" -----------------------------------------------------------------------------
" Mnemonic: c = Compile/Build
"
" Space+c, p = Build Project (p = Project)
" Space+c, r = Rebuild Project (r = Rebuild)
" Space+c, f = Compile File (f = File)
" Space+c, m = Make Module (m = Module)
" Space+c, x = Cancel Build (x = Cancel)
" Space+c, w = Build Window (w = Window)
" -----------------------------------------------------------------------------
" -----------------------------------------------------------------------------
" REFACTORING CATEGORY (Space+r)
" -----------------------------------------------------------------------------
" Mnemonic: r = Refactor
"
" Space+r, r = Rename (r = Rename)
" Space+r, m = Extract Method (m = Method)
" Space+r, v = Variable (v = Variable)
" Space+r, c = Constant (c = Constant)
" Space+r, f = Field (f = Field)
" Space+r, p = Parameter (p = Parameter)
" Space+r, i = Inline (i = Inline)
" Space+r, s = Signature (s = Signature)
" Space+r, o = Move (o = mOve)
" Space+r, Space = Menu (Space = Show all refactoring options)
" -----------------------------------------------------------------------------
" -----------------------------------------------------------------------------
" RUN/EXECUTE CATEGORY (Space+x)
" -----------------------------------------------------------------------------
" Mnemonic: x = eXecute
"
" Space+x, r = Run (r = Run)
" Space+x, d = Debug (d = Debug)
" Space+x, t = Rerun Tests (t = Test)
" Space+x, c = Choose Config (c = Choose)
" Space+x, s = Stop (s = Stop)
" -----------------------------------------------------------------------------
Jeg fortsetter med å definere nye shortcuts og lære meg vim ved behov (og overskudd).
Neste problem: colemak-dh
I vim brukes hjkl for navigering. På de fleste av mine tastaturer bruker jeg ikke qwerty men colemak-dh

Som du sikkert kan se så ligger ikke hjkl like godt i høyrehånda med denne layouten.
Jeg kan jo da mappe om disse til å bruke neio, men i brukes jo til å gå fra normal-mode til insert-mode i
vim....
Hva er det jeg egentlig prøver å løse?

:qw!
Ressurser
- Magnet - https://magnet.crowdcafe.com/index.html
- BetterSnapTool - https://www.folivora.ai/bettersnaptool
- zellij - https://zellij.dev/
- Yabai - https://github.com/koekeishiya/yabai
- Aerospace - https://github.com/nikitabobko/AeroSpace
- JankyBorders - https://github.com/FelixKratz/JankyBorders
- Ice - https://github.com/jordanbaird/Ice
- home row mods - https://precondition.github.io/home-row-mods
- Ideavim - https://lp.jetbrains.com/ideavim/
- vim be good - https://github.com/ThePrimeagen/vim-be-good
- vim be better - https://github.com/szymonwilczek/vim-be-better
- colemak-dh - https://colemakmods.github.io/mod-dh/
