NVim alap beállítása

Az előző részekben már volt szó a NVim és a Vim témáról. Én nagyon megkedveltem a NVim megoldásait, így újra visszatérek a témára. Ez a rész a testre szabásról szól, bár nem igazán a beállításokra koncentrálok, hanem egy olvasott módszerre, amivel rendezetten tudjuk a beállításakolt tartani. Illetve pár olyan tippet is leírok, amit menet közben tapasztaltam meg, és bevált.
Kinek is szól ez a rész? Ahogy a többi is a kezdő, esetleg bizonytalankodó rétegnek. Aki szeretne talán ezzel foglalkozni, de vagy nagyon összetettnek gondolja a beállításokat, vagy pedig a sok jó leírás, amit a google megtalál elijeszti. A kezdőnek, aki most próbál rendet vágni a beállítások közt. Így a haladó NVim felhasználók biztosan jobb, nekik megfelelő módszereket ismernek, nem is ők a célközönség.

Az NVim megismerésének a legjobb módja, ha használod. Cikkek, leírások olvasása hasznos, de az igazi út a használat. Amit a legegyszerűbben úgy tehetsz meg, ha - amikor erre lehetőség van - nem mást, csakis az NVim-et nyitod meg. Az elején szenvedés lesz, nagyon más, mint a megszokott szerkesztő, de ez megéri. Minden alkalommal vagy tanulsz valamit, vagy kiderül a hiányosságod, és annak utána tudsz olvasni.

Első lépés a NVim megismeréséhez

Készíts egy help fájlt. Természetesen a NVim segítségével. Ez lehet bármilyen sima szöveges fájl, amibe minden olyan ismeretet, billentyű kombinációt, parancsot beírsz, amit hasznosnak találsz. Ahogy haladsz egyre több lesz, egyre jobban és több feladatra tudod használni a NVim rendszert. Nagyon sok billentyű kombináció van, sok parancs létezik az alap telepítéshez is, ezeket bemagolni nem lehet, ezért nagyon jó a saját súgó fájl.

Miért kell a NVim rendszert testre szabni?

Mert az alap NVim beállítások nagyon jók, használhatóak, de egy általános megoldást adnak. Menet közben felmerül az igény a saját beállításokra. Ezt nagyon kényelmesen megteheted, mert sima szöveges fájlokban állítunk mindent. A saját beállítások másik témaköre a beépül modulok használata.  A Vim, NVim és társaihoz több ezer beépülő készült el az idők folyamán. Plusz funkciók (pld. fájlkezelő), szintaxis kiemelés, kinézet, szépészeti megoldások stb. téren majdnem biztosan megtalálod amit szeretnél. A harmadik fontos kör a billentyűk testre szabása. Itt nagyon kényelmetlen lehet olyan kötésekkel dolgozni, amiket nem tartasz logikusnak, kényelmesnek. A be, vagy átállításuk nagyon hasznos teendő!
Ha az ilyen testreszabás fontos, akkor miért nem a bemutatott SpaceVim-et használod? Jogosan feltett kérdés. Aki nem akar ezzel foglalkozni neki nagyon megfelel a SpaceVim és annak a moduljai. De az nekem túl nagy. Sok jó megoldás van, aminek a felét sem használom, rengeteg olyan billentyű kötés van, amihez soha nem nyúltam. A SpaceVim nagyon alkalmas arra, hogy a moduláris felépítést, a beépülő modulokat, a logikus kombinációk hasznosságát megismerjem, de eljött az idő amikor kisebb, de nekem megfelelő összeállítást készítsek.

Az alap koncepció

Az NVim beállítása gyakorlatilag az eredeti megoldással  pontosan egy szöveges fájlban történik. Ez nagyon hasznos, de nem feltétlen praktikus. Ha a beállító fájl elkezd hízni, akkor már nem kényelmes annak a kezelése. Erre nagyon jó példa egyes wm-ek konfigurációs állományai: hosszú, és hiába rakom logikusan össze a sorokat egy idő után már a keresés, ugrás stb. nem kényelmes.
Így talán érdemes lenne felbontani több, kisebb és egy-egy témát felölelő fájlra. Hasonlóan a shell beállítási fájlokból kivettük az alias-okat tartalmazó rész, arra csak utalunk a fájlban.

Ami fontos: ez a leírás a NVim, azaz a NeoVim natív telepítéséhez jó, bár nagyon sok minden a Vim-ben is működik, de erre nincs garancia!

Nvim telepítése

A rendszerednek megfelelően telítsd, a csomagkezelőddel. Figyelj rá: a natív, azaz a feltelepített, nem a flatpak, appimage, és egyéb telepítéshez készült ez a leírás.

A következő lépés a kötelező alapok megteremtése.

Készíts könyvtárat a Neovim konfigurációjához:

mkdir ~/.config/nvim

Hozz létre egy init.vim fájlt, ez lesz a fő beállító fájl:

touch ~/.config/nvim/init.vim

NVim beállítása

Ahhoz, hogy néhány alapvető beállítást beállítsak a konfigurációban, először létrehozok egy alkönyvtárat és egy fájlt settings.vim néven. Ebbe kerülnek azok a beállítások melyek a működést szabályozzák, de nem a a billentyű kombinációkat és nem a beépülő modulok installációjával kapcsolatosak.

mkdir ~/.config/nvim/general
touch ~/.config/nvim/general/settings.vim

Kis kitérő: Ez a fájl kerülhet bárhova. Én azért tartom jónak az alkönyvtáras megoldást, mert így egy-egy téma egy helyen van, amikor a konfigurációs fájl szerkesztem, előtte egy mentés készítek róla. Így a mentések és az aktuális konfig fájl követhetően, mással nem keveredve lesznek.

A fájlt fel kell tölteni. Én nagyrészt - mivel az ismereteim még nagyon kicsik - elfogadtam az eredeti cikkíró beállításait.

" set leader key
let g:mapleader = "\"

syntax enable " Enables syntax highlighing
set hidden " Required to keep multiple buffers open multiple buffers
set nowrap " Display long lines as just one line
set encoding=utf-8 " The encoding displayed
set pumheight=10 " Makes popup menu smaller
set fileencoding=utf-8 " The encoding written to file
set ruler " Show the cursor position all the time
set cmdheight=2 " More space for displaying messages
set iskeyword+=- " treat dash separated words as a word text object"
set mouse=a " Enable your mouse
set splitbelow " Horizontal splits will automatically be below
set splitright " Vertical splits will automatically be to the right
set t_Co=256 " Support 256 colors
set conceallevel=0 " So that I can see `` in markdown files
set tabstop=2 " Insert 2 spaces for a tab
set shiftwidth=2 " Change the number of space characters inserted for indentation
set smarttab " Makes tabbing smarter will realize you have 2 vs 4
set expandtab " Converts tabs to spaces
set smartindent " Makes indenting smart
set autoindent " Good auto indent
set laststatus=0 " Always display the status line
set number " Line numbers
set cursorline " Enable highlighting of the current line
set background=dark " tell vim what the background color looks like
set showtabline=2 " Always show tabs
set noshowmode " We don't need to see things like -- INSERT -- anymore
set nobackup " This is recommended by coc
set nowritebackup " This is recommended by coc
set updatetime=300 " Faster completion
set timeoutlen=500 " By default timeoutlen is 1000 ms
set formatoptions-=cro " Stop newline continution of comments
set clipboard=unnamedplus " Copy paste between vim and everything else
"set autochdir " Your working directory will always be the same as your working directory
au! BufWritePost $MYVIMRC source % " auto source when writing to init.vm alternatively you can run :source $MYVIMRC
" You can't stop me
cmap w!! w !sudo tee %

Máris tudjuk, hogy a komment sorok a " jellel indulnak! Ami nem kell, azt törölheted, vagy kikommentelheted.
Alapnak jó, menet közben kiderül mi lesz ami még kell, és mi az ami nem.

Ezt követően már nincs más feladatunk, csak megmondani a NVim rendszernek, hogy ebben keresse a beállításokat. Az init.vim fájlt megnyitod, és elhelyezed az elején a

source $HOME/.config/nvim/general/

sort.

Gyorsbillentyű kötések

A NVim alávetően a begépelt parancsokkal vezérelhető. Ami a legtöbb esetben egyszerű, pár karakter, de van amikor ennél sokkal hosszabb. Az ilyen funkciókhoz már érdemes gyorsbillentyűt rendelni. A mit és hogyan témát a legtöbb leírás taglalja, jellemzően nem okoz gondot. Most egy külön fájlt hozunk létre. amiben egy helyen tároljuk ezeket.

mkdir ~/.config/nvim/keys
touch ~/.config/nvim/keys/mappings.vim

Majd hozzáadjuk a tartalmat. Egy minta tartalom:

" Better nav for omnicomplete
inoremap ("\")
inoremap ("\")

" Use alt + hjkl to resize windows
nnoremap :resize -2
nnoremap :resize +2
nnoremap :vertical resize -2
nnoremap :vertical resize +2

" I hate escape more than anything else
inoremap jk
inoremap kj

" Easy CAPS
inoremap viwUi
nnoremap viwU

" TAB in general mode will move to text buffer
nnoremap :bnext
" SHIFT-TAB will go back
nnoremap :bprevious

" Alternate way to save
nnoremap :w
" Alternate way to quit
nnoremap :wq!
" Use control-c instead of escape
nnoremap
" : completion.
inoremap pumvisible() ? "\" : "\"

" Better tabbing
vnoremap < >gv

" Better window navigation
nnoremap h
nnoremap j
nnoremap k
nnoremap l

nnoremap o o^Da
nnoremap O O^Da

Itt is igaz: ez egy alap, nem testreszabott tartalom. Ami kell majd marad, ami nem, azt törölni fogom. Ide fognak kerülni a beépülő moduloknál ajánlott kötések is.

Majd a megszokott mód megmagyarázzuk a NVim rendszernek, hogy itt keresse a beállítást:

source $HOME/.config/nvim/keys/mappings.vim

sort illesszük be a ~/.config/nvim/init.vim fáljba.

Pár alapvető teendő

A NVim működéséhez pár kisebb program is kell. Ezeket érdemes már most telepíteni, mert egyes műveletek, vagy beépülők elvárják. Van, amikor erre felhívják a figyelmet, van ahol nem.

A telepítés Arch Linux alatt:

sudo pacman -S xsel

Azaz az xsel kell.

Ezután telepítenünk kell a python támogatást:

pip install pynvim

Neovim csomópont támogatás

npm i -g neovim

Ehhez kell majd az emelt jog!

Plug-in, azaz beépülők használata

Plug-in kezelő

Többet is találhatsz és nem is feltétlen szükséges egy ilyen eszköz. Én a vim-plug kezelőt használom. Egyszerű, gyors, és biztosan van sokkal jobb is. Itt is igaz: azt használsz, ami neked tetszik. Én azért választottam ezt, mert az alapvető feladatokat ellátja, semmi bonyolítás nincs benne.

A plug-in kezelőt installálni kell. Ennek több módja van, és én csak azt emelem ki, ami a NVim rendszer alatt nekem bevált.

A vim-plug guthub oldala, leírással. https://github.com/junegunn/vim-plug

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

Ha lefutott akkor már csak használatba kell venni. Itt is igaz, hogy a könyvtár neve stb. személyre szabható, de akkor figyelj rá, hogy mindenhol, ahol szerepel át kell írni.

Bővítményeinket külön fájlban fogjuk kezelni a saját józan eszemre hallhatva:

mkdir ~/.config/nvim/vim-plug
touch ~/.config/nvim/vim-plug/plugins.vim

Ismerős lépés következik. kitöltjük a minimális, teszteléshez szükséges alapokkal.

" auto-install vim-plug
if empty(glob('~/.config/nvim/autoload/plug.vim'))
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
"autocmd VimEnter * PlugInstall
"autocmd VimEnter * PlugInstall | source $MYVIMRC
endif

call plug#begin('~/.config/nvim/autoload/plugged')

<code>" Better Syntax Support
Plug 'sheerun/vim-polyglot'
" File Explorer
Plug 'scrooloose/NERDTree'
" Auto pairs for '(' '[' '{'
Plug 'jiangmiao/auto-pairs'
</code>

call plug#end()

Látható, hogy egy egyszerű bevezető részből áll, ahol a vim-plug működését szabályozzuk. Ezt ne bántsd. A lezáró call.. sort se.

A kettő közt van a lényeg. A komment sor, bár nem kötelező, fontos elem. Itt a " után leírja az ember mit is csinál az a plugin, amit telepített. A Plug 'scrooloose/NERDTree' adja a plugiin nevét, amit telepítünk. Faék egyszerűségű a dolog!

Ha minden kész, akkor már csak a NVim rendszernek kell megmondani, hogy a plug-inok kezelése ebben a fájlban történik meg:

source $HOME/.config/nvim/vim-plug/plugins.vim

sort illesszük be a ~/.config/nvim/init.vim fáljba.

Az NVim indítása után a :PlugInstall parancsot gépeljük be a Normál módban. Ezután lefut a telepítés.

Pár vim-plug parancs, amit érdemes ismerni

Ellenőrizze a beépülő modulok állapotát
:PlugStatus

Telepítse az összes beépülő modult
:PlugInstall

A bővítmények frissítéséhez
:PlugUpdate

A frissítés után - ha érdekel - az eltérések
:PlugDiff

A bővítmények eltávolításához, ha valamit törölték a konfigurációs fájlból
:PlugClean

Végül, ha frissíteni szeretnéd a vim-plug-et, futtasd a következőt
:PlugUpgrade

NVim beépülők és használatuk

Az előbb három alap beépülőt installáltunk. Most végigmegyünk egy új plug-in installálásán.

A NVim beépülőket nagyon sok helyen összeszedték. Én a https://vimawesome.com/ oldalt használom. Van kereső, és kényelmes is. Nagyon sok beépülő van, így nem lesz gond a kínálattal.

A kiválasztott beépülőnél - ezen az oldalon - azt is megtaláljuk, hogy miképp kell installálni a legismertebb plug-in kezelőkkel. Én a vim.plug mellett döntöttem, ahol a

Plug 'scrooloose/nerdtree'

formátumot kell beírni a $HOME/.config/nvim/vim-plug/plugins.vim fájlba. Itt figyelj rá, hogy a legtöbb leírás NEM ezt fogja megadni, de mi egy külön fájlban raktuk, így nem nvim/init.vim fáljba, sem a .vimrc állományba nem kell írni semmit. Ne feledkezz meg a kommentsor kitöltéséről sem.
Nagy valószínűséggel már az NVim-et használod a szerkesztéshez, így a

:source %

parancsot kiadhatod, az összes konfigurációs fájlt beolvass újra, majd a

:PlugInstall

installálja is. Így nem kell ki- és visszalépni az NVim rendszerbe.

A következő lépés a plug-in testre szabása. Ami nem áll másból, mint a leírások olvasgatása és azok értelmezése, végrehajtsa. Az értelmezés nagyon fontos, mert egy sablon megoldás automatikus, szolgai módban való másolgatása nem lesz jó nekem. Akár a beállításoknál, akár a billentyű kombinációknál érdemes nagyon átgondolni, hogy amit azzal szabályoznak, az kell-e nekem. A gyorsbillentyűknél figyelni kell majd nekem az egységes használatra, hogy ne ütközzön az ablakkezelőm (I3wm) kombinációival, de a terminálom (kitty) beállításaival.
Bár egyértelmű, de a leírásokat is értelemszerűen kell követni: a gyorsbillentyűzés a mappings.vim fájlba kerül. A plug-in beállításait én a settings.vim fájlban teszem meg.
Bármely beállítást beírhatsz akár az alap konfigurációs fájlba, akár pedig az éppen kéznél lévőbe, de akkor olyan katyvasz lesz, hogy nem fogsz eligazodni!
A beállításoknál is érdemes követni a kommentelést, ami most munka, de később megtérül.

Nem lényeges az NVim használatánál, de jó ha tudod

A plug-in kezelő, miután megadod a telepítendő beépülőt, azt letölti automatikusan, így élő internet kapcsolat kell. Egy megfelelő alkönyvtárban tárolja. Ebbe bele tudsz nézni, ha kell akkor át is írhatod a plugint. Ugyanígy kell a frissítésnél is az élő internet kapcsolat. Ez nem jelent gondot a legtöbb esetben.