Pisz z Vim’em


logo vimWszyscy używają jakiegoś edytora. Z moich obserwacji wynika, że na Windowsie przeważają Notepad++ i NotH. Nie wiem jak to jest z GNU/Linux ale przypuszczam, że mogą być to pico, nano, gedit, ed, emacs, vi lub vim bo są one instalowane wraz z systemem zależnie od dystrybucji.

Mi osobiście do gustu przypadł Vim i o nim chciałbym napisać parę słów.

Vim, czyli co?

Vim nie jest pierwszym edytorem, o tak specyficznej obsłudze. Źródłem dla niego jest edytor Vi z systemu UNIX, którego autorem był Billy Joy. Oficjalnym rozwinięciem akronimu Vim jest Vi improved i został on stworzony w 1991 przez Brama Moolenaara. Co takiego czyni Vim edytorem innym niż reszta? Tryby pracy, których jest aż 11. Podstawowe 3 to NORMAL, INSERT i COMMAND-LINE/EX. Według twórcy Vim-a można wyróżnić aż 6 trybów podstawowych (basic modes) i 5 dodatkowych (additional modes). Ich opis znajduje się w bardzo obszernej dokumentacji podręcznej, dostępnej z poziomu Vim-a.

Nauka trudna jest

Jak to bywa z każdym nowym edytorem tekstu z jakim zaczynamy mieć do czynienia, trzeba się go nauczyć. Co prawda, według legend Vim stoi na drugim miejscu pod względem trudności nauczenia się go. Tylko czy aby na pewno? Vim posiada wbudowany tutorial, którego ukończenie zajmuje około 30 min. A po tym czasie pozostają już tyko , parafrazując pewnego martwego terrorystę,: używać, używać, używać. Wiadome jest, że ukończenie tego małego kursu nie pozwoli nowemu użytkownikowi na szybką pracę ale na zrozumienie ideologii korzystania z tego narzędzia. A to dopiero początek zalet jakie posiada ten edytor.

Modularność

Czymże byłby jakikolwiek program, jeżeli nie dałoby się go dostosować do własnych potrzeb. Zgodnie ze stroną domową Vim’a, na której znajdują się również pluginy do niego, istnieje ponad 4000 wtyczek. Za ich pomocą możemy przeistoczyć nasz edytor w pełni funkcjonalne środowisko programistyczne łącznie z obsługa kompilatora wybranego języka czy uruchamiania testów.

Dla przykładu jednym z nich jest NERDTree, który umożliwia poruszanie się po strukturze dysku oraz manipulowanie plikami.

Vim plugin : NERDTree

Z kolei inną przydatną wtyczką dla programistów jest TagList. Tworzy on listę listę tagów (funkcje, klasy, zmienne itp.) na podstawie otwartych już plików.

Vim plugin : TagList

Przenośność i konfiguracja

Kolejną z zalet Vim’a jest jego przenośność. Raz skonfigurowany na wybranej platformie działa tak samo na innej. Przy przesiadce na inny komputer/system jest nam potrzebny katalog domowy. Na GNU/Linux, OSX jest to ~/.vim a na Windowsie $VIM\_vimrc z katalogu w którym został on zainstalowany. Konfiguracja jest zapisywana w pliku vimrc, którego nazwa różni się pierwszym znakiem zależnie od platformy. Dobrą zasadą jest posiadanie jak najbardziej minimalnego pliku vimrc, ponieważ pozwala to przyswoić sobie Vim’a takim jaki jest. Zbyt rozbudowany plik konfiguracyjny może przytłoczyć ogromem dodatkowych opcji i skrótów do wykorzystania. Przykładowa minimalistyczna konfiguracja:

" Używaj ustawień Vim zamiast Vi
" Musi być w pierwszej linii ponieważ mogą wystapić efekty uboczne
" w innych komendach ustawień
set nocompatible

" Backspace zyskuje normalną funkcjonalność
set backspace=indent,eol,start

" Podświetlanie składni
syntax on

" Numerowanie linii
set number

" Wcięcia w w kodzie, zależnie od typu pliku
filetype plugin indent on

Rozbudowywanie tego pliku nie powinno być szybkie. Pozwala to na zrozumienie modyfikacji jakie wprowadzamy do Vim’a. Każda zmiana powinna być dobrze opisana komentarzem, jest to szczególnie ważne jeśli w przyszłości zaczniemy dzielić się sowim vimrc. Udostępnianie swojego vimrc jest rzeczą ciekawą, ponieważ inni użytkownicy Vim’a często posiadają rozwiązania, których sami szukamy.

Zgodnie z tym co przed chwilą napisałem, też podzielę się z wami swoją konfiguracją 🙂


set nocompatible " noncompatible mode

syntax on " syntax highlighting
set number " number lines
set numberwidth=5 " how we can see 99999 lines
colorscheme Desert " text colors
set incsearch " highlight search results as you type
set laststatus=2 " 2 height status line
set list listchars=precedes:<,extends:> " show > and < when line is wider that window
set list listchars=tab:>-,trail:. " show tabs
set showmatch " show matching bracket
set matchtime=5 " blinking matching bracket
set nostartofline " leave cursor where it was
set novisualbell " dont blink
set ruler " cursor position at the bottom
set scrolloff=10 " keep 10 lines from top/bottom
set sidescroll=10 " keel 10 letters from left/right
set showcmd " show cmd as you type

set fenc=iso-8859-2
set filetype=html,php
filetype plugin indent on " filetype based indenting
set smartindent
set autochdir " switching to current file directory
set backspace=indent,eol,start " backspace more usable
set nobackup " no backups
set fileformats=unix,dos,mac " file formats
set mouse=a " mouse everywhere

set expandtab " no real tabs
set formatoptions=rq " follow new lines with a comment
set ignorecase " case insensitive by default
set nowrap " no wraping lines
set smartcase " if caps use case-sensitive
set shiftwidth=3 " width of autoindenting
set softtabstop=3 " delete right amount of indenting
set tabstop=3 " tab width

set splitbelow
set splitright

" NERDTree auto-open
autocmd vimenter * NERDTree
autocmd vimenter * if !argc() | NERDTree | endif
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
imap ,t <Esc>:tabnew<Cr>

" indent more/less
vnoremap > >gv
vnoremap < <gv

inoremap <F2> <Esc>:w<CR>a
noremap <F2> :w<CR>i

" auto indent file
noremap ,i <Esc>ggVG=<Esc>

" autobrackets
inoremap {<Space> {}<Left>
inoremap {;<Space> {};<Left><Left>
inoremap {<Return> {<Return>}<Esc>O
inoremap {;<Return> {<Return>};<Esc>O

inoremap (<CR> (<Return>)<Esc>O
inoremap (<Space> ()<Left>

" save on <Esc>
inoremap <Esc> <Esc>:w!<Return>
noremap <Esc> <Esc>:w!<Return>

" file engoding queue
set fileencodings=uce-bom,utf-8,latin2

A Ty jakiego edytora używasz do pracy z kodem? Jeżeli też jest to Vim, może znajdę coś przydatnego w Twoim vimrc 😀 Dzielenie się jest dobre!

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s