Published on

Neovim Kurulumu ve İlk Eklentiler — Bölüm 1

Authors
  • avatar
    Name
    Berk
    Twitter

Neovim’i sıfırdan kurup ilk eklentileri ekleyerek kullanışlı ve şık bir geliştirme deneyimi oluşturacağız. Bu ilk bölümde hedefimiz: init.lua dosyasını hazırlamak, lazy.nvim eklenti yöneticisini kurmak, bir renk şeması eklemek, durum çubuğunu lualine ile güzelleştirmek ve nvim-treesitter ile sözdizimi vurgusunu açmak.

Önkoşullar ve hızlı kontrol

  • Neovim 0.9+ sürümü önerilir.
  • Terminal kullanımı ve Git kurulu olmalı (lazy.nvim repo klonlayacak).
  • Neovim’in genel sağlığını kontrol etmek için komut modunda :checkhealth çalıştırabilirsiniz.

Konfigürasyon klasörü ve init.lua

Neovim kullanıcı ayarları varsayılan olarak şu dosyada bulunur:

  • Linux/macOS: ~/.config/nvim/init.lua
  • Windows: %USERPROFILE%\AppData\Local\nvim\init.lua

İlk dosyayı oluşturalım:

mkdir -p ~/.config/nvim
nvim ~/.config/nvim/init.lua

İçine ufak bir test koyup Neovim’i yeniden başlattığınızda mesajı görmelisiniz:

print('Merhaba, Lua!')

lazy.nvim ile eklenti yönetimi

lazy.nvim, eklentileri yükleme/güncelleme/kaldırma işlerini basit bir arayüzle yönetir. Aşağıdaki kodu init.lua içine ekleyelim. Bu kod, lazy’yi ilk açılışta otomatik kurar ve yolunu runtimepath’e ekler.

-- lazy.nvim bootstrap
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    'git', 'clone', '--filter=blob:none',
    'https://github.com/folke/lazy.nvim.git', '--branch=stable', lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

-- leader tuşları (lazy dokümantasyonu space’i varsayıyor)
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '

-- temel tercihleri (opsiyonel, önerilir)
vim.opt.expandtab = true
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
vim.opt.number = true
vim.opt.relativenumber = true

require('lazy').setup({
  spec = {
    -- Eklentileri bu listeye ekleyeceğiz
  },
})

Neovim’i açıp :Lazy yazdığınızda arayüzü görürsünüz. :checkhealth lazy ile de durumu doğrulayabilirsiniz.

Renk şeması ekleme (Vague)

Favori bir tema ile başlayalım. Burada Nightfly kullanıyoruz; kurulumla birlikte varsayılan tema olarak ayarlayacağız.

{
  'vague2k/vague.nvim',
  lazy = false,           -- ilk açılışta aktif olsun
  priority = 1000,        -- tema önce yüklensin
  config = function()
    vim.cmd.colorscheme('vague')
  end,
},

Bu bloğu require('lazy').setup({ spec = { ... } }) içindeki listeye ekleyin.

Durum çubuğu: lualine

lualine, mod, konum, dosya türü, git dalı gibi yararlı bilgileri gösteren sade bir durum çubuğudur.

{
  'nvim-lualine/lualine.nvim',
  dependencies = { 'nvim-tree/nvim-web-devicons' },
  config = function()
    require('lualine').setup({
      options = {
        theme = 'nightfly',
        icons_enabled = true,
        globalstatus = true,
      },
    })
  end,
},

Kurulduktan sonra alt barda aktifleştiğini göreceksiniz.

Sözdizimi vurgusu: nvim-treesitter

nvim-treesitter, dil ağacını kullanarak daha isabetli vurgulama ve girintileme sağlar.

{
  'nvim-treesitter/nvim-treesitter',
  build = ':TSUpdate',
  config = function()
    require('nvim-treesitter.configs').setup({
      ensure_installed = { 'lua', 'vim', 'vimdoc', 'javascript' },
      highlight = { enable = true },
      indent = { enable = true },
    })
  end,
},

Yüklü dilleri :TSInstallInfo ile görebilir, eksik dili :TSInstall javascript gibi komutlarla kurabilirsiniz. Geçici olarak vurgulamayı kapatıp açmak için :TSBufDisable highlight / :TSBufEnable highlight kullanabilirsiniz.

Tam örnek init.lua

Aşağıda yukarıdaki adımları birleştiren kısa bir örnek var. Kendi tercihlerinize göre eklenti listesini genişletebilirsiniz.

-- bootstrap lazy.nvim
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    'git', 'clone', '--filter=blob:none',
    'https://github.com/folke/lazy.nvim.git', '--branch=stable', lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

vim.g.mapleader = ' '
vim.g.maplocalleader = ' '

vim.opt.expandtab = true
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
vim.opt.number = true

require('lazy').setup({
  spec = {
    {
      'vague2k/vague.nvim',
      lazy = false,           -- ilk açılışta aktif olsun
      priority = 1000,        -- tema önce yüklensin
      config = function()
        vim.cmd.colorscheme('vague')
      end,
    },
    {
      'nvim-lualine/lualine.nvim',
      dependencies = { 'nvim-tree/nvim-web-devicons' },
      config = function()
        require('lualine').setup({
          options = { theme = 'nightfly', icons_enabled = true, globalstatus = true },
        })
      end,
    },
    {
      'nvim-treesitter/nvim-treesitter',
      build = ':TSUpdate',
      config = function()
        require('nvim-treesitter.configs').setup({
          ensure_installed = { 'lua', 'vim', 'vimdoc', 'javascript' },
          highlight = { enable = true },
          indent = { enable = true },
        })
      end,
    },
  },
})

Sonuç ve bir sonraki adım

Bu bölümde Neovim’i kurup temel görsel/ergonomik iyileştirmeleri yaptık: tema, durum çubuğu ve gelişmiş sözdizimi vurgusu. Bir sonraki bölümde LSP (dil sunucuları), otomatik tamamlama (nvim-cmp), dosya arama ve gezinme (Telescope) ve formatlayıcı/diagnostic entegrasyonlarını ele alacağız.