in Go

Vim ile Go Programlama Dili Geliştirme Ortamı

Masaüstü olarak genelde Windows kullanıyorum. Go geliştirme ortamım için LiteIDE , terminal için Cmder ve bilimum go tool’u kullanarak kendi çapımda bir confort zone oluşturdum. (Alternatif Visual Studio Code + delve + vscode-go + Cmder)

Geçtiğimiz aylarda MaestroPanel’in Linux versiyonundan mütevellit X ortamı olamayan minimal bir Debian kullanmaya başlamıştım, e tabi Go ile geliştirdiğim için Windows’daki kadar rahat bir ortam yaratmak için biraz uğraştım. Sonuçta aşağıda detaylarını verdiğim bir yapı çıktı.

Gereksinimler

Minimal kurulmuş güncel bir Debian (8.7)
Son paket güncellemeleri yapılmış.
Aşağıdaki paketlerin kurulum olması gerekiyor.

apt-get install git curl wget build-essential liblua5.1-dev luajit libluajit-5.1-dev libperl-dev python-dev ruby-dev exuberant-ctags sudo

Go

Konu Go olduğu için burası önemli.
Debian’da Go paketine bakmak hiç aklıma gelmedi, muhtemelen son versiyon geliyordur.
Direkt manual kurulumdan aşağıdaki şekilde ilerleyebilirsiniz.

wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz

sistem değişkenini tanımlayalım.

export PATH=$PATH:/usr/local/go/bin

Çalışma alanımızı tanımlayalım. tool’lar, paketler buraya kurulacak varsayılan. (1.8’den sonra kalkacak mış ama)

export GOPATH=$HOME/projects

“go version” dediğinizde düzgün cevap geldiyse mesele yok.

Not: Export değişkenlerin bash’deki ~/.profile dosyasınızın için ekleyin ki tekrar login olduğunuzda çalışsın.

Vim

apt-get install vim” dediğinizde vim 7 geliyor fakat bana lazım olan Lua desteği ile Vim dolayısıyla source’den derleyeceğiz. Neden Lua desteği? derseniz, Vim’in bazı plug-in’leri Lua’ya gereksinim duyuyor.

Klasörü oluşturun

mkdir /usr/include/lua5.1/include

projeyi clone’layalım

git clone https://github.com/vim/vim --depth 1

“-depth 1″ önemli revision’u kısıtlamak için.

source’e geçelim

cd vim/src

Ortamı temizleyelim.

make distclean

Vim’i –with-lua-prefix  ve –with-luajit ile konfigure edelim. Burada ruby, perl, python gibi istemediğiniz entegrasyonlar varsa elemine edebilirsiniz. Benim config aşağıdaki gibi.

 ./configure --with-features=huge \
 --enable-largefile \
 --enable-perlinterp \
 --enable-luainterp \
 --with-luajit \
 --enable-fail-if-missing \
 --with-lua-prefix=/usr/include/lua5.1 \
 --enable-cscope

Kutsal make’i çalıştıralım.

make

install edelim

make install

işlem bittikten sonra “vim” komutunu çalıştırdığınızda editor’ün açılması lazım. Nereye kurulduğunu merak ediyorsanız  “whereis vim”

Not: Desktop kullanıyorsanız Neovim üzerinden ilerlemeniz daha mantıklı. Bu senaryom X ortamı olmayan sistem için optimize edildi. Tabi X ortamında da çalışır babalar gibi.

Pathogen

Pathogen vim için bir plug-in manager. Çok basit olarak plug-in dosyasını ilgili klasöre kopyaladığınız zaman direkt sisteme entegre ediyor. Plug-in manager seçmek için çok uğraşmayın patho. iyi.

Kurulum için aşağıdaki komutları uygulayın.

mkdir -p ~/.vim/autoload ~/.vim/bundle
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

~/.vimrc dosyasına aşağıdaki satırı ekleyelim.

call pathogen#infect()

bu aşamadan sonra vim’e kopyaladığınız her plug-in otomatik olarak yüklenecektir.

Vim-Go

Geldik esas oğlana. Vim için Go plug-in’i vim-go.

Biliyorsunuz vim-go‘yu Fatih Arslan yazıyor. Fatih global Go community’sinde çok aktif gerçekten. Go ile ilgileniyorsanız fatih’i örnek alın, takip edin.

Kurulum için aşağıdaki adımları uygulayınç

cd ~/.vim/bundle
git clone https://github.com/fatih/vim-go.git

~/.vimrc dosyamızı açıp aşaıdaki direktifleri giriyoruz.

filetype plugin on

" Highlight
let g:go_disable_autoinstall = 0
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1

Bu adımı bitirdikten sonra Vim’i açıp aşağıdaki komutu çalıştırıyoruz.

:GoInstallBinaries

:GoInstallBinaries Vim-go’nun çalışması için gerekli olan gocode, godef, goimports  v.b. araçları (Eskiden teker teker kurmanız gerekiyordu.)  otomatik olarak kuruyor.

Neocomplete

Autocomplete elimiz ayağımız. Neocomplete vim’de bunu sağlıyor. Aşağıdaki adımları takip edip aktif edelim.

cd ~/.vim/bundle
git clone https://github.com/Shougo/neocomplete.vim.git

~/.vimrc dosyasını açıp aşağıdaki satırı ekleyelim

let g:neocomplete#enable_at_startup = 1

Test için bir go dosyası açıp test edebilirsiniz. Manual çalıştırmak için :NeoCompleteEnable komutu yeterli. Bunu bir map ile tuşa bağlamanız yeğdir.

Tagbar

Üzerinde çalıştığınız dosyaya tam hakimiyet için gerekli olan bir eklenti. Kod dosyası üzerinde hızlı hareket etmenizi sağlıyor. Alışırsanız çok hızlanıyorsunuz.

Kurulum için aşağıdaki adımları uygulayın.

go get -u github.com/jstemmer/gotags
cp ~/projects/bin/gotags /usr/local/go/bin/

~/.vimrc dosyasını açın ve aşağıdaki değeri girin.

let g:tagbar_type_go = {  
    \ 'ctagstype' : 'go',
    \ 'kinds'     : [
        \ 'p:package',
        \ 'i:imports:1',
        \ 'c:constants',
        \ 'v:variables',
        \ 't:types',
        \ 'n:interfaces',
        \ 'w:fields',
        \ 'e:embedded',
        \ 'm:methods',
        \ 'r:constructor',
        \ 'f:functions'
    \ ],
    \ 'sro' : '.',
    \ 'kind2scope' : {
        \ 't' : 'ctype',
        \ 'n' : 'ntype'
    \ },
    \ 'scope2kind' : {
        \ 'ctype' : 't',
        \ 'ntype' : 'n'
    \ },
    \ 'ctagsbin'  : 'gotags',
    \ 'ctagsargs' : '-sort -silent'
\ }

ardından,

cd ~/.vim/bundle
git clone https://github.com/majutsushi/tagbar.git

test için vim’i açıp :TagbarToggle komutunu çalıştırdığınıza sağ’a açılır.

Not: Bu eklenti debian’ın “exuberant-ctags” paketini kullanır.

Nerdtree

Vim üzerinde dosya gezgini. Aslında ilk başlarda default olan :Explore’ı kullanıyordum fakat Nerdtree’nin bookmark, open split gibi kullanışlı özelliklerini keşfettikten sonra takım çantasına ilave ettim.

Aşağıdaki şekilde kuralım.

cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git

kopyalama bittikten sonra vim’i açıp :NERDTreeToggle demeniz yeterli. Bunu ~/.vimrc dosyasında bir kısayol tuşuna map yapmanızı öneririm.

Vim-airline

Vim’de status bar için gerekli olan eklenti. Text editorlerde default olur bilirsiniz, hangi satırda hangi column’dasınız, hangi moddasınız gibi bilgileri düzgün bir şekilde veriyor.

Aşağıdaki şekilde kuralım.

cd ~/.vim/bundle
git clone https://github.com/bling/vim-airline

status bar’ı görüntülemek için aşağıdaki komutu çalıştırın 1 kapatır 2 açar.

:set laststatus=2

vim-airline’ı temalarıda mevcut. İyi bir tema satusbar için farkındalık yaratıyor. Temaları yüklemek için aşağıdaki komutu çalıştırın.

cd ~/.vim/bundle/vim-airline-themes
git clone https://github.com/vim-airline/vim-airline-themes

Vim’i açtıktan sonra ise :AirlineTheme komutu ile tema belirleyebilirsiniz. Örneğin simple teması için

:AirlineTheme simple

Bunu kalıcı olarak ~/.vimrc dosyasına tanımlamak lazım tabi. Solarized kullandığımızdan bunun dark teması aşağıdaki gibi etkin oluyor.

let g:airline_theme='solarized'

tüm temalar için tıklayın.

Syntastic

Bu plug-in baya şenlendiriyor ortamı.  Tabi X ortamında popup falan açıyor ama terminal ortamında bir ton uyarı veren status bar’ınız oluyor. Kod asistanı diyelim.

Aşağıdaki şekilde kurulumu gerçekleştirelim.

cd ~/.vim/bundle
git clone https://github.com/scrooloose/syntastic

Hemen arkasından ~/vimrc dosyasını açıp aşağıdaki konfigürasyonu ekleyin.

set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

Test için “:SyntasticCheck go” komutunu vererek o sayfadaki kod’da nerelerde hata var görebilirsiniz.
Örneğin aşağıda bu komutu çalıştırdıktan sonra gelen çıktı var. Hemen toml paketinin sistemde kurulu olmadığını görebiliyorsunuz.

:SyntasticInfo komutu ile plug-in’in düzgün çalışıp, çalışmadığını kontrol edebilirsiniz. Çıktı aşağıdaki gibi gelir.

Indent Guides

Kod hiyerarşisini diket bir barla gösteren eklenti. Kullanışlı oluyor, özellikle dikey ekran kullanıyorsanız kolay kerteriz alıyorsunuz :)

Aşağıdaki şekilde kuralım

cd ~/.vim/bundle
git clone https://github.com/nathanaelkane/vim-indent-guides

Bar biraz kaba oluyor ama alışıyorsunuz, ip gibi inen bir şey istiyorum derseniz alternatif olarak Indentline var.

Tema

Ben X ortamında light kullanıyorum yani arka planı beyaz veya hafif gri renkler ve pastel renkli fontlar.

Dark temaları sevmiyorum. Gözüm daha çabuk yoruluyor. Ayrıca uzun süre dark’a bakıp sonra bir web sayfasının arka planına bakınca bana büyük işkence oluyor.

Vim’de modern bir tema isterseniz Solarized güzel. Denemek için aşağıdaki komutları uygulayın.

mkdir ~/.vim/colors
git clone git://github.com/altercation/vim-colors-solarized.git

Ardından ~/.vimrc dosyasına aşağıdaki satırları ekleyin.

syntax enable
set background=dark
colorscheme solarized

Alternatif olarak gruvbox tavsiyemdir. Dark’ı çok kötü ama Ligh’i iyi.

Aşağıdaki şekilde kurabilirsiniz.

cd ~/.vim/bundle/gruvbox
git clone https://github.com/morhetz/gruvbox.git

Gruvbox’ın, airline temasını da var. Aşağıdaki ekran görüntüsü Gruvbox’ın dark teması.

Diğer

Bu işin sonu yok. Development sırasında ihtiyaç bitmiyor. Aşağıdakileri de opsiyonel olarak sisteme ekleyebilirsiniz.

fzf – Fuzzy Finder

cd ~/.vim/bundle
git clone https://github.com/junegunn/fzf

command-t  – Fast file navigation for VIM

cd ~/.vim/bundle
git clone https://github.com/wincent/command-t

tlib – Vim için yardımcı araçlar

cd ~/.vim/bundle
git clone https://github.com/tomtom/tlib_vim

Ctrlp – Fuzzy file, buffer, mru, tag, etc finder.

cd ~/.vim/bundle
git clone https://github.com/ctrlpvim/ctrlp.vim

Vimrc Dosyam

Kendime Not: Vimrc dosyamı düzenleyip buraya koy

Script

Kendime Not: Bu ortamı otomatik kuran bir script yaz artık.

Yorum Bırak

Comment

  1. selam vimrc dosyanızı paylaşabilir misiniz :)
    yazı çok güzel olmuş elinize sağlık