About
fv_2007
Agile innovative developer with deep insight into lots of platforms, technologies and protocols. Absolute “early adopter” in Web 2.0 technologies and more. Large professional network and eagerly talking about architecture, strategy, design patterns, restful ressources, object-oriented thinking and modeling languages such as PML. Special interest in programminglanguages constructs, knowledge on languages like Smalltalk, Erlang, Java, Clojure, Scala, Ruby... read more
Comments
Language

Vim as Clojure IDE December 30, 2011 12:55 4 months ago

At vælge et integreret udviklingsmiljø (IDE) burde være et frit valg for enhver seriøs udvikler. En IDE er et stykke værktøj hvormed en programmør kan skrive kildekode. Når kildekoden er komponeret og leveret til versionsstyringssystem er processen færdig og IDE’s betydning er overstået.

Gennem tiden har jeg benyttet flere forskellige integrerede udviklingsmiljøer som fx Eclipce, Intellij, Netbeans og TextMate. Fælles for de værktøjer er at de indeholder tusindvis af features mod en eller flere platforme og de tilbyder en række at services der gør dem ret komplekse.

De fleste udviklere har en favorit IDE. Den bedste IDE er ofte den man kender fordi det er altid en fordel at kende sit værktøj. Desværre er det ikke altid at man kan komme til at bruge det fortrukne. Mange kender til at ledelsen skifter et produkt ud med et andet pga. en forbigående tro på procesoptimering eller kontrol.

For mig har det været vigtigt at veksle mellem de forskellige udgaver på baggrund af disse to krav/spørgsmål:

  1. Hvor er grænsen mellem programmeringssprog og værktøj?
  2. Hvor kan jeg som programmør bidrage med reel værdi?

Er det nok at være god til at bruge sit værktøj eller skal man være god til at sit programmeringssprog? En god håndværker bør kunne sætte et køkken, selv med en dårlig hammer.

En række undersøgelser påviser at produktivitet og IDE er tæt forbundnede. Hvad der er mindre kendt er at den valgte IDE hænger sammen med medarbejdertilfredshed og er blandt de tre motivationsfaktorer.

En simpel IDE er måske nem at bruge mens en avanceret er svær at komme i gang med. Over tid er de måske lige produktive men der er en tendens til at udviklere gerne vil bruge nye ting og dermed er det måske ikke smart at bruge et værkstøj med en lang indlæringskurve.

Hvis man ser en IDE som abstraktion over et programmeringssprog, er rigdom af features lig med ineffektiviteten af programmeringssproget

Der er sikkert nogen der vil argumentere at emacs brugere ville være uenig i dette udsagn. Men der er en forskel på et IDE og rene text editorer som fx Vim og Emacs.

Det glæder mig at flere og flere igen vil bruge text editorer som Emacs og Vim. Fordelen er at man udbygger base editoren med de features man ønsker ud fra en empirisk model. Lige en advarsel. Overtag aldrig en andens opsætning. En essentielle ved en individuel opsætning er at man forstår alle elementer.

VIM editor

Vim er en konfigurerbar teksteditor der muliggør effektiv tekst redigering med tastaturet alene. Man kan navigere og give en mængde command’s samtidigt med at man skriver. Derfor har Vim flere input modes og man skifter mellem dem ustandseligt. Der udvikles stadig på Vim og den har et rigt plugin miljø. Det er normal at Vim brugeren konfigurere og fintuner specifikt til de use cases man arbejder på.

Vim er en gamle editor. Den er over 20 år gammel men stadig den mest moderne og langt mere moderne end mange bloaded Java udviklings værktøj. Vim myter

Vim plugin Pathogen

Pathogen.vim er en slags “mikro organisme” eller plugin manager for vim. For at installere den skal man bruge to nye libs, .vim/bundle og .vim/autoload Derefter hentes pathogen sådan:

curl -so ~/.vim/autoload/pathogen.vim https://raw.github.com/tpope/vim-pathogen/HEAD/autoload/pathogen.vim 

Pathogen virker ved at gøre .vim/bundle lib til plugin basen. Hvis du har fundet et plugin du vil checke ud, fx The NERD tree – packages explorer med bookmarking, kan du:

cd .vim/bundle 
git clone https://github.com/scrooloose/nerdtree.git
git log --oneline

Den sidste linje giver en historik over de seneste ændringer i plugin. Start Vim i command mode og skriv :NERDTree eller :help NERD_tree.txt

Vim er god som standart men har også tusindvis af instilleringer. Opstartskonfigurationer kan placeres i .vimrc Bemærk den sidste linje som får plugin manageren pathogen til at køre.

VIM Clojure plugin

Clojure plugin til “Vim kan downloades fra vim.org”: http://www.vim.org/scripts/script.php?script_id=2501 men jeg vil hellere udnytte pathogen plugin som manager. Det giver også den fordel at jeg letter kan updatere plugin gennem git.

cd .vim/bundle 
git clone https://github.com/vim-scripts/VimClojure.git
git log 

Desværre kan man se at github versionen er ældre end den version der ligger på vim.org note to self: Tror jeg vil be Meikel Brandmeyer om at lave et push? Anyway, nu kan man åbne en clojure fil med extension .clj og se koden i farver at matche parenteserne.

VIM conf

frank@dreyfus:~\> cat .vimrc
set nocompatible          " compatible with vi

au BufWinLeave * mkview
au BufWinEnter * silent loadview

filetype on               " filetype detection
filetype indent on        " filetype-specific indenting
filetype plugin on        " filetype-specific plugins
syntax on                 " syntax highlighting

call pathogen#infect()    " pathogen plugin manager

set shiftwidth=2          " space auto indent
set backupdir=~/          " where to put backup files
set dir=~/                " default swapfiles   
set clipboard+=unnamed    " share windows clipboard
set background=dark       " we plan to use a dark background
set lazyredraw            " don't update while executing macros
set showmode              " active mode 
set cursorline            " highlight current line
set number                " line numbers
set ruler                 " current positions 
set number                " line numbers
set showmatch             " show matching brackets 
set hidden                " hide buffers when abandoned
set nowrap                " do not wrap line
set wildmenu              " command line completion wild style 
set incsearch             " incremental search
set ignorecase            " search ignoring case
set hlsearch              " highlight the search

set laststatus=2          " always show the status line
set statusline=%<%F%h%m%r%h%w%y\ %{&ff}\ %{strftime(\"%c\",getftime(expand(\"%:p\")))}%=\ lin:%l\,%L\ col:%c%V\ pos:%o\ ascii:%b\ %P


map zn ]s                 " next bad word
map zp [s                 " last bad word
map <c-o> :Sex<return>                 " mnemonic sequence mapping
map <silent> <c-n> :NERDTreeToggle<return>
map <silent> ,ev :e $MYVIMRC<return>  " mnemonic sequence mapping
map <silent> ,sv :so $MYVIMRC<return> " mnemonic sequence mapping  


" Spelling 
if v:version >= 700
  set spell               "Sets in-line spellchecking
 
  setlocal spell spelllang=en_us " set local language en 
  " setlocal spell spelllang=da    " set local language da  
endif

VIM command mode

Her er de mest almindelige taste kombinationer jeg bruger til hverdag. Der er mange flere, og man behøver at kigge i VIM hjælpe sider en gang i mellem.

frank@dreyfus:~\> cat box/vim_hints.txt 

<c-W s>     " horizontal splitting
<c-W v>     " vertical splitting
<c-w q>     " close one 
<c-w + R>   " rotate windows up/left.
<c-w + r>   " rotate windows down/right.
<c-w L>     " current window to the "far right"
<c-w H>     " current window to the "far left"
<c-w J>     " current window to the "very top"
<c-w K>     " current window to the "very bottom"
<c-w w>     " cycle to next window:
 
<c-a>       " insert efter current letter 

<shift-a>   " indsæt efter bogstav 
<shift-A>   " indsæt efter linje 
<shift-i>   " indsæt  
<shift-I>   " indsæt start of line

<shift-o>   " indsæt under linje
<shrft-O>   " indsæt over linje

h, l, k, j = left, right, up, down

<:30>       " gå til linje 30 

<c-f>       " side ned
<c-b>       " side op

$           " linje slut 
0           " linje start 

w           " frem et ord
b           " back et ord
x           " slet en bogstav
dw          " slet ord 
db          " slet ord bagud
dd          " slet linje 
d$          " slet til linje slut 
d^          " slet til linje start 

:10,25 w fil " skriver linje 10-25 til fil 

yy          " yank linje 
y$          " yank linje slut
yw          " yank ord
5yy         " yank 5 linjer
5yw        " yank 5 ord

p           " indsæt under cursor
P           " indsæt over cursor
2p          " indsæt fra buffer 2 
            " vis all buffers

:%!xxd      " txt to hex 
:%!xxd -r   " hex to text 

u           " undo
U           " restore 
J           " join næste linje 

cw          " udskift ord 
r           " udskift 
R           " udskift mode
:/          " søge pattern 
:?          " søge pattern 
n           " søge næste

zn          " hop til næste ord
zp          " hop til forrige ord
zg          " gem ord i ordbog
zw          " slet ord i ordbog
z=          " se ord i ordbog

frank@dreyfus:~\> 


By Frank Vilhelmsen - 2 tags: clojure vim - Add comment