75 Zsh-kommandoer, plugins, aliaser og værktøjer
Jeg bruger en stor del af min dag i terminalen, og min foretrukne shell er Zsh – en Unix-shell, der kan tilpasses i høj grad, og som indeholder nogle meget effektive funktioner. Da jeg er en doven udviklerTM, er jeg altid på udkig efter måder at skrive mindre og automatisere alle tingene på. Heldigvis er dette noget, som Zsh egner sig godt til.
I dette indlæg vil jeg dele 75 kommandoer, plugins, aliaser og værktøjer med dig, som forhåbentlig vil spare dig for nogle tastetryk og gøre dig mere produktiv i dit daglige arbejde.
Hvis du ikke har Zsh installeret på din maskine, så tjek dette indlæg, hvor jeg viser dig, hvordan du kommer i gang.
15 ting Zsh kan gøre out of the box
Zsh deler en masse praktiske funktioner med Bash. Ingen af de følgende er unikke for Zsh, men de er ikke desto mindre gode at kende. Jeg opfordrer dig til at begynde at bruge kommandolinjen til at udføre operationer som dem, der er anført nedenfor. Det kan i starten virke som mere arbejde end at bruge en GUI, men når du først får styr på tingene, vil du aldrig se dig tilbage.
- Indtastning af
cd
fra et hvilket som helst sted i filsystemet bringer dig direkte tilbage til din hjemmemappe. - Indtastning af
!!
bringer dig frem til den sidste kommando. Dette er praktisk, hvis en kommando mislykkes, fordi den kræver administratorrettigheder. I dette tilfælde kan du skrivesudo !!
. - Du kan bruge
&&
til at kæde flere kommandoer. F.eks.mkdir project && cd project && npm init -y
. - Den betingede udførelse er mulig ved hjælp af
||
. F.eks.git commit -m "whatever..." || echo "Commit failed"
. - Hvis du bruger et
-p
-switch med kommandoenmkdir
, kan du oprette overordnede mapper efter behov. Ved at bruge udvidelse af parenteser reduceres gentagelser. F.eks.mkdir -p articles/jim/sitepoint/article{1,2,3}
. - Sæt miljøvariabler pr. kommando på følgende måde:
NODE_DEBUG=myapp node index.js
. Eller på et grundlag pr. session som f.eks:export NODE_DEBUG=myapp
. Du kan kontrollere, at den blev indstillet ved at skriveecho $<variable-name>
. - Pipe output fra en kommando ind i en anden kommando. For eksempel
cat /var/log/kern.log | less
for at gøre en lang log læsbar, ellerhistory | grep ssh
for at søge efter alle historikposter, der indeholder “ssh”. - Du kan åbne filer i din editor fra terminalen. F.eks.
nano ~/.zshrc
(nano),subl ~/.zshrc
(Sublime Text),code ~/.zshrc
(VS Code). Hvis filen ikke findes, vil den blive oprettet, når du trykker på Gem i editoren. - Navigation er en vigtig færdighed at mestre. Du skal ikke kun stole på dine piletaster. Ctrl + a fører dig f.eks. til begyndelsen af en linje.
- Hvorimod Ctrl + e fører dig til slutningen.
- Du kan bruge Ctrl + w til at slette et ord (baglæns).
- Ctrl + u fjerner alt fra markøren til begyndelsen af linjen.
- Ctrl + k rydder alt fra markøren til slutningen af linjen. Disse tre sidste kan fortrydes med Ctrl + y.
- Du kan kopiere tekst med Ctrl + Shift + c. Det er meget mere elegant end at højreklikke og vælge Kopier.
- Omvendt kan du indsætte kopieret tekst med Ctrl + shift + v.
Forsøg at lære disse tastekombinationer udenad. Du vil blive overrasket over, hvor ofte de er nyttige.
15 brugerdefinerede alias til at øge din produktivitet
Aliaser er terminalgenveje for almindelige kommandoer. Du kan tilføje dem til din ~/.zshrc
-fil og derefter genindlæse din terminal (ved hjælp af source ~/.zshrc
) for at få dem til at træde i kraft.
Syntaksen for at deklarere et (simpelt) alias er som følger:
alias =''
Aliaser er gode til ofte brugte kommandoer, lange kommandoer eller kommandoer med en syntaks, der er svær at huske. Her er nogle af dem, jeg bruger jævnligt:
- Et
myip
alias, som udskriver din aktuelle offentlige IP-adresse til terminalen:alias myip='curl http://ipecho.net/plain; echo'
. - A
distro
alias, der udsender oplysninger om din Linux-distribution:alias distro='cat /etc/*-release'
. - A
reload
alias, da jeg aldrig kan huske, hvordan jeg skal genindlæse min terminal:alias reload='source ~/.zshrc'
. - Et
undo-git-reset
alias:alias undo-git-reset-head="git reset 'HEAD@{1}'"
. Dette ophæver virkningerne af at køregit reset HEAD~
. - An alias for at opdatere pakkelister:
alias sapu='sudo apt-get update'
. - Et alias til at genudføre den foregående kommando med
sudo
:alias ffs='sudo !!'
. - Da jeg er doven, har jeg givet
y
et alias tilyarn
-kommandoen:alias y='yarn'
. Det betyder, at jeg kan klone et repo, og derefter bare skrive y for at trække alle afhængigheder ind. Jeg lærte denne fra Scott Tolinski på Syntax. - Det er ikke en af dem, jeg bruger, men dette alias blæser mappen
node_modules
væk og fjerner filenpackage-lock.json
, før jeg geninstallerer et projekts afhængigheder:alias yolo='rm -rf node_modules/ && rm package-lock.json && yarn install'
. Som du sikkert ved, står yolo for You Only Live Once. - Et alias til at åbne min
.zshrc
-fil til redigering:alias zshconfig='subl $HOME/.zshrc'
. - Et alias til at opdatere listen over Ruby-versioner, som rbenv kan installere:
alias update-available-rubies='cd ~/.rbenv/plugins/ruby-build && git pull'
- Et alias til at starte en server i din aktuelle mappe (ingen npm-pakker påkrævet):
alias server='python -m SimpleHTTPServer 8000'
. - Du kan også oprette et alias til at åbne dokumentation i din browser:
alias npmhelp='firefox https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/npm'
. - Et globalt alias til at lede en kommandos output til
less
:alias -g L='| less'
. Du kan bruge det på følgende måde:cat production.log L
. - Et globalt alias til at lede en kommandos output til
grep
:grep
:alias -g G='| grep'
. Du kan bruge det på følgende måde:history G ssh
. - Du kan også bruge funktioner til at oprette aliaser. Følgende (taget herfra) opretter et alias, der tilføjer, committerer og skubber kode til GitHub:
bash
function acp() {
git add .
git commit -m ""
git push
}
Der er masser af steder, hvor du kan finde flere idéer til aliasser online. For eksempel denne diskussion i Hacker News eller dette indlæg om produktivitet på kommandolinjen med Zsh.
15 fede ting, du kan gøre med (Oh My) Zsh
Oh My Zsh er en fællesskabsdrevet ramme til administration af din Zsh-konfiguration og leveres med tusindvis af nyttige funktioner, hjælpere, plugins og temaer. Hvis du vil gøre Z-shellen til din daglige driver, bør du virkelig installere Oh My Zsh.
Her er femten nyttige ting, som Oh My Zsh kan gøre for dig:
- Kommandoen
take
opretter en ny mappe og skifter ind i den.take my-project
erstattermkdir my-project && cd my-project
. -
zsh_stats
giver dig en liste over de 20 største kommandoer og hvor mange gange de er blevet kørt. - Oh My Zsh forenkler navigationen i dit filsystem. F.eks. er
..
et alias forcd ..
. - På samme måde flytter
...
dig to mapper op,....
flytter dig tre mapper op, og.....
flytter dig fire mapper op. - Du kan udelade
cd
, når du navigerer. Hvis du f.eks. skriver/
, kommer du direkte til din filsystemrod. - Partiel matching er også understøttet. Hvis jeg f.eks. skriver
/h/j/De
og trykker på TAB og derefter på Return, kommer jeg til/home/jim/Desktop/
. -
rd
er et alias forrmdir
, ogmd
er et alias formkdir -p
. - Du kan skrive
d
for at få en liste over de senest anvendte mapper fra en terminalsession. - Du kan derefter navigere til en hvilken som helst af disse mapper ved hjælp af
cd -n
, hvorn
er mappenummeret. - Tab completion er en anden god funktion. Hvis du f.eks. skriver
ls -
og trykker på TAB, får du en liste over alle kommandoens muligheder sammen med en nyttig beskrivelse af, hvad de gør. Dette virker også forcap
,rake
,ssh
ogkill
. - Typning af
alias
viser alle dine aktuelle aliasser. - Med globbing (en Zsh-funktion) kan du liste filer med en bestemt udvidelse. F.eks. vil
ls *.html
liste alle HTML-filer i den aktuelle mappe. Hvis du vil inkludere undermapper, skal du ændre til:ls **/*.html
. - Glob-kvalifikatorer giver dig mulighed for at vælge filtyper ved hjælp af flag. F.eks. vil
ls -l **/*(.x)
finde alle eksekverbare filer i den aktuelle mappe og alle undermapper. - Du kan søge efter filer efter dato for ændring. F.eks. vil
ls *(m-7)
vise alle filer, der er ændret inden for den sidste uge. - Du kan søge efter filer efter størrelse. For eksempel,
ls *(Lm+1)
vil finde alle filer med en størrelse større end 1 MB.
Brug af plugins for sjov og profit
Oh My Zsh leveres med en masse plugins. Du bør kigge dem igennem og investere noget tid i at lære dem, der vil hjælpe din arbejdsgang.
Her er tre plugins, som jeg bruger regelmæssigt, og som giver et væld af praktiske genveje og aliaser.
10 Nifty Git Aliases
Git-plugin’et giver mange aliaser og flere nyttige funktioner. Hvorfor ikke gennemgå disse og forsøge at lære dine ti bedste udenad? Her er dem, jeg bruger oftest.
g
er et praktisk alias for git
. Det betyder, at du kan skrive ting som g clone <whatever>
i stedet for git clone <whatever>
. Det er måske kun to tastetryk, men de løber hurtigt op. gaa
er et alias for git add all
. Jeg bruger den hele tiden. gb
er et alias for git branch
, som oplister alle grene i det aktuelle repo og viser dig, hvilken gren du befinder dig på. gcb
er et alias for git checkout -b
, kommandoen, der giver dig mulighed for at oprette en ny gren. gcm
er et alias for git checkout master
. Dette returnerer dig til mastergrenen.gdca
er et alias for git diff --cached
. Dette giver dig mulighed for at diff’e alle filer, som du har lagt op til commit.gf
er et alias for git fetch
.gm
er et alias for git merge
.gp
er et alias for git push
. For at synkronisere en fork af et repo kan du gøre følgende: gf upstream
, gm upstream/master
, efterfulgt af gp
.glog
er et alias for git log --oneline --decorate --graph
, hvilket vil give dig en smuk git branch-graf.10 Praktiske npm-aliaser
Npm-plugin’et giver også færdiggørelse samt en masse nyttige aliaser.
-
npmg
er et alias fornpm install --global
, som du kan bruge til at installere afhængigheder globalt på dit system. F.eks. ernpmg nodemon
. -
npmS
et alias fornpm install --save
, som du bruger til at installere afhængigheder og tilføje dem tildependencies
-afsnittet i dinpackage.json
. Bemærk, at fra npm 5.0.0.0 er dette standard, når du kørernpm i <package>
. -
npmD
er et alias fornpm install --save-dev
, som du bruger til at installere afhængigheder og tilføje dem til afsnittetdevDependencies
i dinpackage.json
. -
npmO
er et alias fornpm outdated
, som kontrollerer registret for at se, om nogen (eller, specifikke) installerede pakker i øjeblikket er forældede. -
npmL
er et alias fornpm list
, som opregner installerede pakker. -
npmL0
er et alias fornpm list --depth=0
, som opregner pakker på øverste niveau. Dette er især nyttigt for at se, hvilke moduler der er installeret globalt uden at oversvømme din terminal med et stort afhængighedstræ:npmL0 -g
. -
npmst
er et alias fornpm run start
, et npm-script, der ofte bruges til at starte et program. -
npmt
er et alias fornpm run test
, der, som du nok kan gætte, bruges til at køre dine tests. -
npmR
er et alias fornpm run
. Denne kommando vil i sig selv liste alle et projekts tilgængelige npm-scripts op sammen med en beskrivelse af, hvad de gør. Hvis den bruges sammen med et scriptnavn, vil den køre det pågældende script, F.eks. ernpmR build
. -
npmI
et alias fornpm init
. Dette vil stille dig en masse spørgsmål og derefter oprette enpackage.json
baseret på dine svar. Brug-y
-flaget for at automatisere processen. For eksempelnpmI -y
.
10 Tidsbesparende Rails/Rake-aliaser
Dette plugin tilføjer færdiggørelse for Ruby on Rails-rammen og Rake-programmet samt nogle aliaser for logfiler og miljøvariabler.
-
rc
er et alias forrails console
, som giver dig mulighed for at interagere med din Rails-app fra CLI’en. -
rdc
er et alias forrake db:create
, som (medmindreRAILS_ENV
er indstillet) opretter udviklings- og testdatabaserne for din app. -
rdd
er et alias forrake db:drop
, som dropper udviklings- og testdatabaserne for din app. -
rdm
er et alias forrake db:migrate
, som vil køre alle verserende databasemigrationer. -
rds
er et alias forrake db:seed
, som kører filendb/seeds.rb
for at fylde din udviklingsdatabase med data. -
rgen
er et alias forrails generate
, som genererer boilerplate-kode. F.eks:rgen scaffold item name:string description:text
. -
rgm
er et alias forrails generate migration
, som vil generere en databasemigrering. F.eks:rgm add_description_to_products description:string
. -
rr
er et alias forrake routes
, som viser en liste over alle en apps definerede ruter. -
rrg
er et alias forrake routes | grep
, som giver dig mulighed for at liste og filtrere de definerede ruter. For eksempel errrg user
. -
rs
et alias forrails server
, som starter Rails’ standardwebserver.
.
Udviduelle ressourcer
Den vigtigste opgave for de ovenfor anførte plugins er at levere aliaser til ofte anvendte kommandoer. Vær opmærksom på, at der findes mange flere plugins, der udvider din shell med yderligere funktioner.
Her er fire af mine favoritter:
- sudo giver dig mulighed for nemt at give dine nuværende eller tidligere kommandoer et præfiks med
sudo
ved at trykke to gange på ESC. - autosuggestions foreslår kommandoer, mens du skriver, baseret på historik og afslutninger. Hvis forslaget er det, du leder efter, skal du trykke på →-tasten for at acceptere det. En rigtig tidsbesparelse!
- command-not-found: Hvis en kommando ikke genkendes i
$PATH
, vil dette bruge Ubuntus command-not-found-pakke til at finde den eller foreslå stavefejl. - z er et praktisk plugin, der opbygger en liste over dine mest hyppige og seneste mapper (den kalder dem “frecent”) og giver dig mulighed for at springe til dem med én kommando.
Og glem ikke, hvis du bruger meget tid i terminalen, er det værd at investere en indsats i at gøre den visuelt tiltalende. Heldigvis leveres Oh My Zsh med en hel masse temaer, som du kan vælge imellem. Mit valg af dem er Agnoster.
Du kan få mere at vide om temaer i min artikel 10 Zsh Tips & Tricks: Konfiguration, tilpasning & Brug.
Konklusion
Så der har vi det: 75 Zsh-kommandoer, plugins, aliaser og værktøjer. Jeg håber, at du har lært et trick eller to undervejs, og jeg opfordrer dig til at komme ud af dine GUI’er og ind i terminalen. Det er nemmere end det ser ud og en god måde at øge din produktivitet på.
Hvis jeg har overset dit yndlings-plugin eller dit tidsbesparende alias/kommando, så lad mig vide det på Twitter.
Vil du få endnu mere ud af din værktøjskasse? Tjek Visual Studio Code ud: End-to-End Editing and Debugging Tools for Web Developers fra Wiley.