5 eksempler på den bedste brug af Ruby
Har du nogensinde undret dig over, hvad vi kan gøre med Ruby? Det er nok kun fantasien, der sætter grænser, men vi fortæller gerne om nogle mere eller mindre kendte tilfælde...
For et par år siden grillede jeg med nogle af mine venner, som alle var Java-udviklere. Jeg er ikke sikker på, hvordan det kom frem, men vi begyndte at tale om vores kodemiljøer. Jeg fortalte dem, at jeg laver al min udvikling med Vim og terminaler. Det udløste nogle vittigheder og sjove spørgsmål, f.eks. om jeg stadig bruger hulkort 🙂 .
Siden da har jeg prøvet nogle "rigtige" IDE'er, men er altid vendt tilbage til Vim og terminaler, da det er en meget hurtig metode, har alle de værktøjer, jeg har brug for, og jeg kan simpelthen godt lide at arbejde i teksttilstand.
Her er nogle detaljer om min arbejdsgang. Det er værd at nævne, at jeg arbejder på Linux, men du kan uden problemer sætte det op på Mac eller Windows.
Jeg starter min arbejdsdag med at åbne en terminal, cd ~/Projects/XYZ og køre tmuxså lad os starte der.
Hvad er TMUX? Som forfatterne siger:
TMUX er en terminal-multiplexer. Den gør det nemt at skifte mellem flere programmer i en terminal, afkoble dem (de kører videre i baggrunden) og koble dem til igen i en anden terminal.
Jeg bruger den til at skifte mellem flere ting i én terminal. Så i en TMUX vindue, har jeg Skinner server kører, i den anden har jeg min Vim åbnet, og hver gang jeg skal gøre noget i terminalen, som at tjekke ruter, køre migreringer eller tests, åbner jeg bare et nyt vindue med CTRL-A C
og gør det.
Jeg bruger ikke TMUX ruder, kun vinduer, og skifter meget (jeg har CTRL + dobbelt-A bundet til at skifte mellem de sidste vinduer).
En anden meget praktisk funktion ved TMUX er, at den giver mig mulighed for at finde og kopiere tekst fra en terminal uden at bruge en mus.
Det er den vigtigste del af min arbejdsgang. Jeg vil ikke komme ind på detaljer om, hvad VIM er, og hvordan det adskiller sig fra andre editorer. Der er mange gode artikler og videoer om det. Med nogle få ord, Vim er en modal editor. Den har to tilstande, indsæt-tilstand og normal-tilstand. Insert er til at skrive tekst ind i et dokument, og normal er til at udføre forskellige operationer på dokumentet, som at flytte markøren, slette tekstfragmenter, ændre den osv. Det lyder mærkeligt, men efter noget tid føles det meget naturligt, og det er meget svært at vende tilbage til din almindelige editor.
Det, jeg gerne vil vise dig, er, hvordan jeg kombinerer Vim med andre værktøjer for at få alt det, jeg har brug for som webudvikler.
Jeg er ikke fan af tunge plugins Vim konfigurationer, så jeg bruger kun nogle få. Her er listen:
NERDtree - Det er en filudforsker. Det giver dig mulighed for nemt at udføre nogle grundlæggende filsystemoperationer, som at flytte filer, omdøbe, oprette nye filer og mange andre,
vim-endwise - Jeg er Ruby-udvikler, så jeg bruger det til at tilføje slut
efter hvis
, gøre
, def
og flere andre nøgleord,
vim-skinner - Det er en Skinner power-plugin. Det kender strukturen i en Rails-app. Vil du tjekke den delvise tekst under din markør? Bare tryk på gf
og den åbner den i dit nuværende vindue. Den har mange andre muligheder, men det er den, jeg oftest bruger,
vim-surround - Fantastisk plugin, som gør det meget nemt at arbejde med omgivelser. Med det kan du ændre tekstens omgivelser fra () til [] med nogle få tastetryk,
vim-gentagelse - komplementær til Vim-surround. Det giver mulighed for en gentagen ændring af omgivelserne med .
(gentag den sidste ændring i Vim),
vimwiki- min måde at tage noter på,
fzf.vim+ fzf - den centrale del af min webudvikling arbejdsgang.
Det er de værktøjer, der definerer den måde, jeg koder på. Jeg har indset, at når jeg koder, bruger jeg normalt det meste af min tid på at finde ud af, hvordan tingene fungerer. For at gøre det er jeg nødt til hurtigt at tjekke forskellige dele af kodebasen, metodedefinitioner, klasser og andre ting.
Fzf er et interaktivt Unix-filter til kommandolinjen, som kan bruges med alle lister (filer, kommandohistorik, git-kommitteringer, proceslister); med andre ord er det en fuzzy finder.
Ripgrep er et alternativ til grep, men det er den lynhurtige.
Når de to kombineres, kan jeg hurtigt finde alt, hvad jeg vil have i min projekt.
Jeg har to indstillinger i min Vim config-fil til at hjælpe mig med dette:
nnoremap :Filer
nnoremap :Rg
Den første lader mig hurtigt finde de rigtige filer ved hjælp af fuzzy finding på filstier (CTRL-P). Den anden kører fuzzy finder på alle stier og indholdet af filer i mit projekt ved hjælp af Ripgrep (CTRL-F).
Så lad os sige, at jeg vil finde migration, hvor jeg har tilføjet en kolonne til brugere
bord. Jeg trykker på CTRL-F og skriver noget i retning af adcolusnam
og det vil matche add_column :users, :name, :string
.
Når jeg leder efter en metodedefinition, kører jeg ofte CTRL-F def metode_navn
.
Det er meget nyttigt, da det søger gennem filsti + indhold. Det er især praktisk, når jeg ved, at det indhold, jeg leder efter, befinder sig i en bestemt del af projektet. Jeg vil f.eks. gerne finde ud af, hvor vi opdaterede et brugernavn, og jeg kan huske, at det var et sted i controllerne. Jeg trykker på CTRL-F
conupdname
for at matche linjen app/controllers/users_controller: @user.update(navn: nyt_navn)
.
Hvis du kender dit projekt og kodebasens struktur, kan du nemt konstruere fuzzy find-forespørgsler, så du hurtigt kan finde næsten alt, hvad du vil.
Klik her for at se en kort optagelse af mig, hvor jeg leger med `discourse`-kodebasen (440k LOC på min i5, 16GB desktop) og viser, hvordan jeg normalt bevæger mig rundt i projektet.
Jeg håber, du blev interesseret i mit setup og besluttede dig for at give Fzf et forsøg i dine kodningsbestræbelser. Det har virkelig ændret den måde, jeg bruger Vim som en Kode redaktør.