Fronteers — vakvereniging voor front-end developers

Het is al goud wiens cursor blinkt

Een pijnlijk vergezochte titel voor een alledaags onderwerp: de opdrachtregel of terminal. Die tekstinterface voor je computer mag dan wel al meegaan van toen de mainframes nog op stoom werkten, tegenwoordig is hij hipper dan ooit. (Een zwart scherm is het nieuwe, euh, zwart.)

Wie al wat langer in dit wereldje meedraait (hier, neem nog een Werthers Echte), heeft de verandering van "slicer" naar "front-end developer" meegemaakt. Vroeger zat er vaak niemand tussen de designer en de ontwikkelaar van een website. Alles was mooi afgelijnd: de designer leverde een hoop geslicete afbeeldingen op en de ontwikkelaar trok er z'n plan mee. Nu komt daar steeds vaker nog een front-ender bij kijken, en die moet van alle markten thuis zijn. In de praktijk betekent dat bijvoorbeeld overweg kunnen met bronbeheersoftware als Subversion en Git, of met allerlei minifiers voor JS en CSS met tal van opties—allemaal uit te voeren op de opdrachtregel.

Om maar te zeggen: het is belangrijk dat je comfortabel je werk kan doen, zonder writer's block. Daarom enkele tips die je het leven in de terminal gemakkelijker maken. Mac- en Linux-gebruikers zitten goed; Windows-gebruikers installeren best eerst Cygwin.

1. Word een TiEnErTyPeR

De Tab-toets is een van de toetsen die je het meest op prijs zal stellen bij het werken op de opdrachtregel. Autocomplete voor map- en bestandsnamen is onmisbaar om snel te werken. Alleen: standaard is die hoofdlettergevoelig, terwijl je Mac- of Windows-schijf daar niet flauw over doet, en je mappen en bestanden ook namen met Hoofdletters hebben. Dus als je cd dow typt, en dat vervolgens met <Tab> automatisch wil aanvullen tot cd Downloads, kom je bedrogen uit.

Bash, de standaardshell, gebruikt de Readline-bibliotheek om je invoer in te lezen. Wat dat precies inhoudt, is niet zo belangrijk. Je moet alleen weten dat je die bibliotheek kan configureren via een .inputrc-bestandje in je gebruikersmap. (De zogenaamde "dot files" zijn configuratiebestanden uit de UNIX-wereld. Je ziet ze standaard niet via de GUI of met een gewone ls, maar met bijvoorbeeld ls -alF wel.)

Zet de volgende regel in je .inputrc zodat cd dOwN<Tab> netjes wordt aangevuld tot cd Downloads:

set completion-ignore-case On

Daarbij aansluitend zet je dit in je .bashrc, zodat ls -alF *.jpg zowel IMG_1234.JPG als Screenshot 2011-12-01.jpg toont:

shopt -s nocaseglob

Als die bestandjes nog niet bestaan, kan je ze gewoon aanmaken. De volgende keer dat je je shell (of je terminal) start, worden ze ingelezen.

2. Word een geschiedenisprof

Hoe meer tijd je in de terminal doorbrengt, hoe vaker je bepaalde commando's zal herhalen. Gelukkig houdt Bash standaard een aardige geschiedenis bij. Je kan door die geschiedenis bewegen met de pijltjestoetsen: pijltje omhoog toont het vorige commando; pijltje omlaag het volgende. Je kan vorige commando's ook opzoeken door eerst Ctrl+R te drukken en dan een woord in te voeren. Als je bijvoorbeeld Ctrl+R drukt en dan git com typt, zie je je vorige git commit-commando verschijnen. Je kan dan nogmaals op Ctrl+R drukken voor het commando daarvoor, en zo blijven teruggaan in het verleden.

Ikzelf vind het wel gemakkelijk als de pijltjes omhoog en omlaag zich wat intelligenter gedragen. Als je onderstaande code toevoegt aan je inputrc, houdt Readline rekening met wat je al getypt hebt:

# Use more intelligent Up/Down behaviour: use the text that has already been
# typed as the prefix for searching through commands, like in Vim.
"\e[B": history-search-forward
"\e[A": history-search-backward

Concreet: als je nu git com typt, en dan pijltje omhoog, heb je meteen je vorige git commit te pakken. Of curl what en je krijgt curl whatismyip.org—ervan uitgaande dat je dat al ooit getypt had. (Handige tip, overigens: zo zie je meteen je externe IP-adres.)

Ook in .bashrc voor geschiedenis zijn er enkele handige instellingen. Ik hou wel van deze:

# Als je twee keer `foo` typt, hoeft dat niet twee keer in de geschiedenis.
# Zo vervuil je minder en kan je sneller door de geschiedenis navigeren.
export HISTCONTROL=ignoredups;

# Als je ooit een uitroepteken gebruikt en een onbegrijpelijke foutmelding
# terugkrijgt, is dit commando een redder. Hiermee verschijnt je "foute"
# opdracht netjes opnieuw, zodat je hem gemakkelijk kan bewerken.
shopt -s histreedit;

# Standaard houdt Bash de laatste 500 opdrachten bij. Dat mag meer zijn.
export HISTSIZE=4096;

3. Word een controlefreak

De shell biedt een heel krachtige manier om je computer te bedienen. Dat is erg prettig, maar missen is menselijk. Daarom, voor je eigen veiligheid, voeg je best een extra controle toe voor je bestanden onherroepelijk verneukt. Immers, als je een bestand kopieert naar een map waar al een bestand met dezelfde naam staat, zal een GUI je wel vragen of je zeker bent, maar de terminal niet. Je moet dat expliciet instellen. Voor cp ("copy"), mv ("move" en hernoem) en natuurlijk rm ("remove") doe je dat als volgt in .bashrc:

alias cp='cp -i';
alias mv='mv -i';
alias rm='rm -i';

Als je nu een keer rm final.css doet, zal je deze vraag krijgen:

remove final.css?

Deze controle vereist dat je y ingeeft (of yes, of you betcha!, of eender wat met een y vanvoor), of het bestand wordt niet verwijderd.

4. Word vrolijk

De standaardprompt (het tekstje dat verschijnt voor jij kan beginnen typen) is niet bepaald geïnspireerd: <computernaam>:<huidige map> <gebruikersnaam>. Dat is op zijn zachtst gezegd beknopt. Het is ook niet handig om te zien waar de uitvoer van je commando's begint en eindigt. Daarom gebruik ik wat kleur. In je .bashrc ziet dat er zo uit:

export PS1="\[$(tput setaf 4; tput bold)\](\t) \u@\h \W\n\$ $(tput sgr0)"

Dat is een hele boterham, en in tegenstelling tot wat je moeder altijd zei tijdens het mosselen eten, is het wél nuttig om je voedsel te ontleden:

  • PS1 is de omgevingsvariabele die je prompt instelt.
  • tput setaf 4 zorgt ervoor dat de verdere tekst blauw wordt.
  • tput bold maakt de tekst vet, wat meestal neerkomt op helder gekleurd.
  • \t toont de huidige tijd, zodat je die niet uit het oog verliest.
  • \u@\h is de gebruikersnaam en de computernaam.
  • \W is de huidige map.
  • \n is een nieuwe regel: zo heb je meer plaats voor jouw commando.
  • \$ toont de $ voor jou en # voor de "root"-gebruiker.
  • tput sgr0 zorgt ervoor dat je niet in het blauw zit te smurf—euh, typen.

Je kan veel verder dan dit gaan. En dat brengt me naadloos bij de laatste tip.

5. Word een profiteur

Deze en vele andere instellingen die je leven in de terminal verbeteren, zijn overal beschikbaar. Gebruik daarom het werk van mensen die je zijn voorgegaan. Enkele bekende voorbeelden van "dot files" beschikbaar op GitHub, zijn die van Gianni Chiappetta, Gary Bernhardt, en Mathias Bynens. Ondergetekende heeft ook zijn eigen, totaal onbekende verzameling, met de tips uit dit artikel, en veel meer: Tilde.

"Good artists copy; great artists pull."

Reacties

1 Wiebe Cnossen op 12-12-2011 om 05:09 uur:
Ik voel als Windows gebruiker helemaal niet de behoefte om cygwin te installeren: powershell heeft zich door veel goede dingen van bash laten inspireren (sommige mensen zouden dat jatten noemen) en is op het gebied van Object-Orientatie zelfs superieur.
2 Jan! op 12-12-2011 om 08:51 uur:
Wiebe: goed punt. Ik heb zelf geen praktijkervaring met PowerShell, maar het handige aan Cygwin is dat ik overal dezelfde hulpprogramma's kan gebruiken. Dus op mijn werk- of thuiscomputer kan ik Mac of Windows draaien, en op de server een UNIX-achtig besturingssystemen, zonder dat ik me ergens volledig vreemd vind.
3 Mallory op 12-12-2011 om 11:29 uur:
Zonder terminal en POSIX tools zou ik helemaal verloren zijn.

En ja, geef maar dat stoom-werkende mainframe.
Of zoiets. W00t.
4 Roy Tomeij op 12-12-2011 om 11:34 uur:
Paar erg mooie tips, vooral case insensitive tabben!
5 Anthony op 12-12-2011 om 11:55 uur:
Bedankt voor de productiviteitswinst!
Plaats een reactie