Vim – Snabbare ESC

Något som varit irriterande när jag jobbat i Vim och tryckte på ESC så tog det en stund innan något hände. Jag bindade tangenterna JJ till att utföra <Esc> och då var det inga problem alls och det var respons på en gång. Men nu har jag äntligen hittat en lösning på problemet.

Genom att lägga in följande i .vimrc så kommer ESC vara så snabb som den ska vara:

if ! has('gui_running')
 set ttimeoutlen=10
 augroup QuickEscape
 autocmd!
 au InsertEnter * set timeoutlen=0
 au InsertLeave * set timeoutlen=1000
 augroup END
endif

Växla mellan Controller och Spec i Vim när du använder PhpSpec

PhpSpec kommer bli det jag använder under 2015 (och förmodligen en lång tid framåt) för att testa min kod på lite lägre nivåer än vad Codeception gör. Det som är fint med PhpSpec är att kod genereras åt dig medan du skriver och kör dina tester. Perfekt för att få en så smal kod som möjligt och spara lite tid.

Eftersom jag sitter och kodar på en ganska liten skärm och gärna inte kör med split screens i varken Vim eller Tmux så växlar jag mycket mellan mina php-filer och spec-filer. Därför tyckte jag det vore skönt med en function i Vim som gör detta på ett smidigt sätt.

Med det i bakhuvudet tryckte jag in följande i min .vimrc:

" switch between controller and spec file "
map <leader>sw :SwitchBetweenControllerAndSpec

command! SwitchBetweenControllerAndSpec call SwitchBetweenControllerAndSpec()

function! SwitchBetweenControllerAndSpec()
    let path = expand('%:p')
    let srcpath = './src'
    let specpath = './spec'
    " are we in a spec file? "
    let matches = matchlist(path, printf('^%s\(.\+\)Spec\.php$', fnamemodify(specpath, ':p')))
    if len(matches) > 0
      let file = fnamemodify(printf('%s/%s.php', srcpath, matches[1]), ':p')
      if bufexists(file)
        execute(printf('buffer %s', file))
        return
      endif
      execute(printf('edit %s', file))
    endif
    " are we in a php file? "
    let matches = matchlist(path, printf('^%s\(.\+\)\.php$', fnamemodify(srcpath, ':p')))
    if len(matches) > 0
      let file = fnamemodify(printf('%s/%sSpec.php', specpath, matches[1]), ':p')
      if bufexists(file)
        execute(printf('buffer %s', file))
        return
      endif
      execute(printf('edit %s', file))
    endif
    echo 'Current file is not a spec nor php file.'
endfunction

Detta är skrivet för att passa min Symfony2 setup men du kan enkelt bestämma vart din mapp för src och spec är genom att ändra värdet på srcpath och specpath. Om jag minns rätt så använder Laravel ./app och inte ./src och då skulle du kunna ändra srcpath till ./app för att allt ska rulla på igen.

Något jag ska göra framöver är att göra exakt samma sak fast för Behat och alla de olika filerna du vill växla mellan. Självklart kan du applicera detta på vilka filer som helst genom att bara ändra ändelserna i koden.

Tips på förbättringar? Skriv en kommentar!

Fixa multiple cursors bug i Vim vid användning av NeoComplete / NeoSnippets

Multiple cursors är ett väldigt användbart verktyg när du knackar kod. Däremot råkade jag ut för en liten bug efter jag bytte till neocomplete / neosnippets för autocompletion. Vad som hände var att när jag skulle ändra något så skrevs det bara in <Plug> om och om och om och om och om igen. Inte så bra kan man tycka…

multiple-cursors

Fixen var enkel när jag väl hittade den. Antingen använder du en fork av terryma’s repo som kristijanhusak har gjort som du hittar här. Eller så kan du ju kolla commiten som fixade problemet och implementera på egen hand.

Lycka till!

Halt and Catch Fire

Jag upptäckte nyligen den här serien från AMC som utspelar sig på 80-talet där IBM dominerar PC-marknaden och Apple börjar komma som en uppstickare. Det tog inte lång tid innan jag kollat på alla avsnitt (det var ju bara 10 stycken). Trevligt med en dramaserie på detta område, så det inte bara släpps komedier hela tiden.

”Madmen för nördar” läste jag någonstans och det stämde ganska bra eftersom serien fokuserar mycket på företagandet, ta chanser för att uppnå sina drömmar och jobba dygnet runt för att lyckas.

För fyra dagar sen gick de ut med att en andra säsong ska komma ut sommaren 2015 och det ser jag verkligen fram emot!

Uppdaterade dotfiles för Vim, Tmux och Bash

På Github hittar du mina dotfiles för Vim, Tmux och Bash som jag använder just nu. Det som är största skillnaden är att jag nu inkluderat ett script för att snabbt installera allt, inklusive plugins för Vim. Jag har även städat och tagit bort många av de filer jag inte längre använder, som t.ex de för I3WM med mera.

Du hittar allt på https://github.com/johndahlstrom/dotfiles. Enjoy!

Att byta ut Grunt mot Gulp

Av ren nyfikenhet skulle jag kolla på hur Gulp fungerade eftersom jag kört Grunt rätt länge nu. Alltid bra att jämföra olika verktyg då och då för du vill alltid ha det bästa när du jobbar med webdev (det vill i alla fall jag).

Eftersom Gulp var lätt att sätta sig in i blev processen inte så lång. Det jag behövde i nuläget var bara funktionerna för att köra linting och uglify på JavaScript, Sass/Compass på min CSS samt kombinera mina filer så det bara blir en fil av varje filtyp istället för flera. Jag inkluderade även Livereload eftersom det underlättar arbetet vid redigering av CSS.

Min gulpfile.js ser idag ut så här:

var gulp = require('gulp');
var sass = require('gulp-ruby-sass');
var autoprefixer = require('gulp-autoprefixer');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var gutil = require('gulp-util');
var jshint = require('gulp-jshint');
var livereload = require('gulp-livereload');

gulp.task('css', function() {
  return gulp.src('src/css/*.sass')
  .pipe(concat('styles.min.sass'))
  .pipe(gulp.dest('destination/css'))
  .pipe(sass({ style: 'compressed', compass: true, trace: true }))
    .on('error', handleError)
  .pipe(autoprefixer('last 15 version'))
  .pipe(gulp.dest('destination/css/'))
  .pipe(livereload())
});

gulp.task('js', function() {
  return gulp.src('src/js/*.js')
    .pipe(concat('scripts.min.js'))
    .pipe(gulp.dest('destination/js'))
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
      .on('error', handleError)
    .pipe(uglify())
      .on('error', handleError)
    .pipe(gulp.dest('destination/js'))
    .pipe(livereload())
});

gulp.task('default', function() {
  gulp.run('css');
  gulp.run('js');
   gulp.watch('src/css/*.sass', function() {
     gulp.run('css');
   });
  gulp.watch('src/js/*.js', function() {
    gulp.run('js');
  });
});

function handleError(err) {
  console.log(err.toString());
  this.emit('end');
}

Notera funktionen ”handleError” längst ner i filen. Den är där för att Gulp stoppar watch processen vid ett fel. Så om jag skriver fel syntax i min js eller sass-fil så kommer den inte köra när jag rättar den – om jag inte använder den här funktionen och binder den till ”error” på följande vis:

.pipe(uglify())
  .on('error', handleError)

Jag antar att det är en bug för det kan omöjligt vara meningen att det ska vara så. Men med tanke på att Gulp är så pass nytt blir jag inte förvånad.

Det jag blev förvånad över däremot är att jag upplever att Gulp är snabbare än Grunt. Det hade jag inte väntat mig, utan jag trodde mer att det Gulp skulle vara bra på var att ha bättre syntax för samma saker som Grunt gör och på så vis vara lättare att hantera.

Så från att vara en snubbe som använder Grunt är jag nu en snubbe som använder Gulp! Det finns säkert mycket mer att göra med Gulp, men i nuläget behöver jag inte fler saker än dessa. Bara detta lilla hjälper mig väldigt mycket när jag utvecklar.

Har du tips på vad du använder Gulp (eller Grunt för den delen) så skriv gärna en kommentar!

Hitta funktioner blixtsnabbt i Vim med hjälp av Ctrl-P

Dagens lilla tips för er som använder Vim är att binda t.ex Ctrl-F (om du inte använder det till att scrolla vilket är default för Ctrl-F) för att göra en fuzzy tag search med Ctrl-P för att blixsnabbt hitta funktioner i din nuvarande fil.

Först behöver du Ctrl-P som du hittar här: https://github.com/kien/ctrlp.vim.

Efter det skriver du följande i din .vimrc:

map <C-f> :CtrlPBufTag<CR>

Sen är du redo för att blixtsnabbt hitta funktioner i dina filer, mycket bättre än att göra en vanlig sökning i filen.

UPPDATERING: Något som jag glömde nämna var att ctags behöver vara installerat för att det ska fungera. Hur du gör det enklast på din maskin hittar du enkelt på en Google sökning.

Lär dig grunderna för TDD och BDD

Jag hittade en bra kurs för dig som vill veta mer om grunderna för TDD och BDD på tutsplus.com som går igenom hur du testar din PHP-kod med hjälp av PHPUnit, Codeception och Behat – allt i videoformat så du behöver inte läsa något! Kursen ger dig även kunskap om varför du ska testa din kod och köra TDD eller BDD.

phptddcourse

Det enda du behöver göra är att besöka den här länken, registrera dig på tutsplus.com om du inte gjort det och sedan är du redo för att kika på alla delarna i kursen.

Mer seriesnack om Silicon Valley

Denna gången heter faktiskt serien Silicon Valley. Gissa vad den handlar om! Inte så svårt kanske… Ett gäng grabbar som har en ny het ”grej” på gång som de tänker utveckla och kränga i Silicon Valley för att få in de stora pengarna. Serien är en komedi och innehåller en hel del ”nördhumor” så den rekommenderas att se på.

Kika på trailern nedan och kolla sen på serien:

Betas – en serie om Silicon Valley

Jag kollar väldigt mycket på tv-serier och en av de senaste jag kom över var Betas. Denna serie handlar om ett gäng vänner som försöker ta sig upp till toppen med sin nya app. Eftersom de är belägrade i Silicon Valley finns det en hel del investerare att välja på och självklart ännu fler konkurrenter.

Se på trailern här och välj själv om du ska se den: