Das neuen MacBook Pro, der ESC-Key und Vim

Da Apple wohl ein neues MacBook Pro ohne mechanischen ESC-Key vorstellen dürfte stellen sich viele die Frage, wie man jetzt den Insert-Mode in Vim wieder verlassen soll.

Da gibt es mehrere Antworten:

  • CTRL-[ benutzen
  • CTRL-c benutzen
  • Ein eigenes Mapping in die .vimrc einbinden z. B. inoremap jj <ESC> (dies mappt jj auf ESC)
  • Wer mindestens 10.12.1 hat, kann ESC auch auf Caps Lock mappen.

Also, wie man sieht gibt es keinen Grund zum Jammern und fortgeschrittene User benutzen ESC sowieso nicht direkt, oder doch? 🙂

Vim Plugins managen mit Pathogen und vimogen

Zugegeben, Pathogen ist zwar nicht der neuste Plugin-Manager für Vim (und davon gibt es einige), und es mag auch an meiner Bequemlichkeit liegen bisher nicht zu einem der anderen Plugin-Manager gewechselt zu haben. Jedoch habe ich vor kurzem das ShellScript vimogen von Ryan Kulla entdeckt, welches das Installieren, Updaten und Deinstallieren der Plugins sehr einfach macht. Mein bisheriger Workflow mit Pathogen war bisher folgender:

  • Via git clone Plugins in .vim/bundle installieren
  • ein kleines ShellScript zum Updaten der Plugins ausführen
  • Deinstallieren der Plugins durch direktes löschen der Plugin-Ordner

Mein ShellScript war sehr einfach:

#!/bin/bash

for D in *; do
if [ -d "${D}" ]; then
echo "${D}";
cd "${D}";
pwd;
git pull;
cd ..;
fi
done

Es ging einfach recursiv alle Untervereichnisse in .vim/bundle durch und aktualisierte mittels git pull und weil ich ja bekanntlich faul bin, lag das Script auch noch direkt in .vim/bundle/.

Vimogen macht das ganze nicht nur komfortabler, sondern auch portabler. Es nutzt eine Textdatei (~/.vimogen_repos), in der einfach alle GitHub-URL’s der zu installierenden Plugins enthalten sind. Somit kann man super schnell alle benötigten Plugins auch auf einem anden System installieren.

Das eigentliche ShellScript bietet nach dem Aufruf ein Menu an, man kann jedoch z. B. Updates auch direkt anstoßen, indem man vimogen mit dem Parameter update aufruft.

Da ich auf mein Update-Script noch nicht ganz verzichten wollte, habe ich vimogen geforkt damit es nicht abbricht, wenn eine Datei im Ordner .vim/bundle/ enthalten ist.

Übrigens… um das Script mit Neovim nutzen zu können muss man nur die Variable install_dir in Zeile 9 entsprechend anpassen. Eventuell werde ich das in meinem Fork noch entsprechend anpassen damit man sowohl Vim- als auch Neovim-Plugins updaten kann.

tmux plugin manager

Auf meiner Suche nach einer Möglichkeit auch im Fullscreen-Modus den Ladezustand der Batterie meines Computers im Terminal sehen zu können, bin ich auf das Plugin tmux-battery gestoßen und damit auch auf den Tmux Plugin Manger kurz TPM.

Wie man an dem Screenshot sehen kann, macht sich das Plugin in der rechten Statusleiste recht gut.

tmux-battery-neovim-gotham

Weitere nützliche Plugins für tmux findet man übrigens auf GitHub.

Battery Watcher FTW!

Ab und zu vergesse ich gerne mal die Steckerleiste in der das Kabel für mein MacBook steckt auch einzuschalten. Dann merke ich es irgendwann zufällig.

Dank Hammerspoon werde ich jetzt auch via Notifications informiert, wenn sich der Akku entleert. Mittels Tastenkombination kann ich die Benachrichtigungen auch ausschalten, falls ich mal unterwegs bin und den Mac nicht laden kann.

Sollte der Mac dann wieder Strom bekommen, wird die Benachrichtigung wieder eingeschaltet und es erfolgt auch eben diese bei 100% geladenem Akku.

Im Screenshot kann man das alles gut sehen.

battery-watcher

Ein Frontend Workflow

Folgendes Video zeigt meinen Frontent Workflow und wie ich meine Projekte beginne. Mein Grunt-Setup beinhaltet neben einem Dev-Build mit Lintern und BrowserSync auch einen Production-Build, der Kommentare entfernt und die Assets minifiziert. Der Autoprefixer sowie Sass dürfen natürlich auch nicht fehlen.

Besserer Workflow beim Datentransfer vom Lumia zum Mac

Meine Frau besitzt ein Lumia 630 und immer wenn Sie die Bilder auf dem Mac runterladen wollte ging beim Verbinden mit dem Mac zwar iPhoto auf, jedoch konnte man hiermit die Fotos und Videos nicht importieren. Man muss – zumindest für ihr Lumia – das Programm Nokia File Transfer öffnen und damit die Daten runterladen.

Da ich mich derzeit sowieso mit Lua beschäftige kam mir Hammerspoon gerade recht.

Mit Hammerspoon (v. 0.9.46) lassen sich sehr viele Dinge am Mac automatisieren und das unter Verwendung von Lua (eingebettet derzeit Version 5.3.2).

Gesagt – getan.

Das nachfolgende Script muss nur in die init.lua Datei mit eingebunden werden und schon starte es Nokia File Transfer beim Verbinden des Telefons mit dem USB-Kabel automatisch und beendet iPhoto.

Viel Spaß damit!

-- Open Nokia Phone Transfer and close iPhoto when connecting Lumia 630
local nokiaWatcher = nil

local function iPhotoCallback(appName, eventType, appObject)
  if (eventType == hs.application.watcher.activated) then
    if (appName == "iPhoto") then
      appObject:kill()
    end
  end
end

local iPhotoWatcher = hs.application.watcher.new(iPhotoCallback)

local function nokiaDeviceCallback(data)
  if (data["productName"]:match("Lumia 630")) then
    if (data["eventType"] == "added") then
      hs.application.launchOrFocus("Nokia Photo Transfer")
      iPhotoWatcher:start()
    elseif (data["eventType"] == "removed") then
      local ntf = hs.notify.new()
      ntf:title("Nokia Phone")
      ntf:informativeText("ausgeworfen")
      ntf:send()
      iPhotoWatcher:stop()
    end
  end
end

nokiaWatcher = hs.usb.watcher.new(nokiaDeviceCallback)
nokiaWatcher:start()

In Zeile 15 sollte man noch die eigene Modellnummer eingeben.

Static Analyzer und Linter für Lua

Wer in Lua entwickelt und dazu den Vim benutzt, dem sei neben dem super Plugin Syntasic auch gleich noch ein passender Linter empfohlen.

Mittels des Paketmanagers LuaRocks kann man sich ganz einfach den Linter Luacheck installieren:

$ luarocks install luacheck

In der .vimrc kann man diesen dann mittels folgender Zeile hinzufügen:

let g:syntastic_lua_checkers = ["luacheck"]

In Vim umgebende HTML-Tags entfernen

Ein gerade für Webentwickler nützliches Vim Plugin ist vim-surround von Tim Pope. Man kann nicht nur sehr schnell Texte in einfache bzw. doppelte Anführungszeichen setzten, wechseln oder gar diese löschen, sonder z. B. auch umgebende HTML-Tags entfernen.

Für die Normal mode Commands dst gibt es auch hier wieder eine super Eselsbrücke – delete surrounding tag.

Im animierten Gif kann man das ganze mal in Aktion sehen.

delete surrounding html-tag in vim

Nächstes Suchergebnis in Vim automatisch zentrieren

Wer öffter mal mittels Vim in Logfiles unterwegs ist oder aber in einer großen Datei etwas sucht und hierbei einige Suchergebnisse erwartet dem ist sicherlich der Normal Command n bzw. N bekannt.

Mittels n springt man zum nächsten Suchergbenis und falls eingestellt, wird das Ergebnis auch in der Datei farblich hervorgehoben.

Gerade bei Logfiles kann einem das hin- und hergespringe in den Zeilen etwas nerven. Schöner wäre es, wenn das nächste Ergebnis einfach – wenn möglich – immer mittig im Fenster dargestellt wird.

Hierfür kann man nach n einfach den Befehl zz verwenden, welcher die Zeile mittig im Fenster anzeigt.

Da ich das aber nicht immer manuell machen möchte, es jedoch auch nicht als Standardverhalten mappen wollte, habe ich mir eine kurze Funktion geschrieben, welche ich in meine .vimrc eingebunden habe.

Gemappt habe ich mir das ganze auf „Leader nz“ was bei mir die Tastenkombination <space>nz ist.

Nachfolgend die recht kurze vimscript-Funktion:

let g:ncttoggle = 1
function! NextCenterToggle()
  if g:ncttoggle
    nmap n nzz
    nmap N Nzz
    let g:ncttoggle = 0
  else
    nun n
    nun N
    let g:ncttoggle = 1
  endif
endfunc

nnoremap <silent> <leader>nz :call NextCenterToggle()<CR>

Kurz und bündig mappe ich n und N im Normal Mode einfach um und wenn ich es wieder deaktivere lösche ich auch das Mapping um das Standardverhalten wieder herzustellen.

Vim, tmux, iTerm2, OS X und die Zwischenablage

Als ich von MacVim auf die Version im Terminal umgestiegen bin habe ich gleichzeitig auch erstmals tmux verwendet. Das Setup war recht einfach und zu Beginn stellte ich kaum einen Unterschied zu MacVim fest. Das Kopieren von Text in den Vim innerhalb des Terminal ging einwandfrei.

Als ich jedoch versuchte Text aus Vim zu kopieren war dieser nicht in der Zwischenablage von OS X vorhanden.

Zum Glück hat Evert Pot in seinem Blog eine Lösung für eine funktionierende Zwischenablage zwischen Vim, tmux, iTerm2 und OS X, zumindest was die derzeit aktuelle Versionen der Tools angeht.