Вернуться назад

nvim

Ссылки:

То есть, если нужно очистить все настройки, то:

rm -rf ~/.local/share/nvim
rm -rf ~/.local/state/nvim
rm -rf ~/.config/nvim

Если нужно удалить swap-файл, то:

rm ~/.local/state/nvim/swap/%home%mark%projects%...%filename.html.swp


" Конфигурационные файл: ~/.config/nvim/init.lua, ~/.config/nvim/init.vim
    !!! init.vim - устаревий способ.
    !!! Лучше все настройки указывыать в init.lua.
    
" Если я хочу, чтобы при запуске от root, nvim подцеплял настройки из ~/.config/nvim/init.lua, то запускаем так:
    sudo -E nvim myfile.txt
    
" Шаблоны для базовой настройки можно найти здесь: /usr/share/nvim/runtime/
    /usr/share/nvim/runtime/example_init.lua - это дефолтный шаблон init.lua
    cp /usr/share/nvim/runtime/example_init.lua ~/.config/nvim/init.lua
    " НО это всё не дефолтные настройки. Дефолтный конфиг встроен в lua-код внутри neovim
    " Посммотреть эти дефолтные настройки можно здесь:
        less /usr/share/nvim/runtime/lua/vim/_defaults.lua
    "" Вытаскивать дефолтные настройки оттуда смысла нет. Проще переопределять нужное в ~/.config/nvim/init.lua

        " Применяем цветовую схему:
        vim.cmd.colorscheme('habamax')
        " Убираем фон у основных групп, чтобы сделать всё прозрачным
        vim.api.nvim_set_hl(0, "Normal",      { bg = "NONE" })
        " vim.api.nvim_set_hl(0, "NormalFloat", { bg = "NONE" })
        " vim.api.nvim_set_hl(0, "SignColumn",  { bg = "NONE" })
        " vim.api.nvim_set_hl(0, "LineNr",      { bg = "NONE" })
        vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "NONE" })
        " vim.api.nvim_set_hl(0, "StatusLine",  { bg = "NONE" })
        " vim.api.nvim_set_hl(0, "StatusLineNC",{ bg = "NONE" })
        " vim.api.nvim_set_hl(0, "TabLineFill", { bg = "NONE" })
        " vim.api.nvim_set_hl(0, "VertSplit",   { bg = "NONE" })
        
    " Перезагрузить настройки из init.lua:
        :source $MYVIMRC
            " или:
        :source ~/.config/nvim/init.lua
        
    " Пример выше затирает цветовую схему 'habamax' и делает настройки такими же, как в терминале.
    " Вот так можно сохранить оригинальный цвет текста из схемы:
             
        vim.cmd.colorscheme('elflord')
        " vim.api.nvim_set_hl(0, "Normal", { fg = "red", bg = "NONE" })
        
        " Получаем текущий цвет текста для Normal
        local normal_fg = vim.api.nvim_get_hl(0, {name = "Normal"}).fg
        
        " Убираем фон у основных групп, и цвет текста применяем тот, который стоит по умолчанию у 'elflord'
        vim.api.nvim_set_hl(0, "Normal",      { fg = normal_fg, bg = "NONE" })
        vim.api.nvim_set_hl(0, "EndOfBuffer", { fg = normal_fg, bg = "NONE" })

                            

Перемещение

Режим вставки

Удаление с сохранением в буфер:

Удаление без сохранения в буфер:

Поиск:

Копирование

Буферы

окна

Вкладки:

Полезности:

Комментирование. В Neovim есть встроенный Lua-модуль для комментариев.

Терминал

:terminal   " открыть терминал
:term       " открыть терминал – короткая форма

:split | terminal   " открыть терминал в отдельном окне
:vsplit | terminal  " открыть терминал – вертикальное разделение

:sp | term    " сокращённая форма
:vs | term    " сокращённая форма

:botright split | terminal  " открыть в новом окне снизу
:botright sp | term         " то же самое – сокращённая форма

:tabnew | terminal   " открыть в новой вкладке

Настройка терминала (Vim):

:set splitbelow   " всегда открывать терминал снизу
:set splitright   " всегда открывать терминал справа

sp | term   " теперь терминал откроется снизу
vs | term   " теперь терминал откроется справа

Настройка терминала (Lua):

vim.opt.splitbelow = true   -- всегда открывать терминал снизу
vim.opt.splitright = true   -- всегда открывать терминал справа   

Цветовые схемы (Vim)

-- Посмотреть цветовую схему:
:echo &background
   -- dark

-- сменить цветовую схему
:colorscheme elflord
:colorscheme habamax

-- вернуть обратно на дефолтную:
:colorscheme default

Цветовые схемы (Lua)

-- lua-обёртка над :-командами Vim
vim.cmd('colorscheme habamax')

-- Lua-синтаксический сахар над vim.cmd(...)
vim.cmd.colorscheme('habamax')

-- Прямой вызов Neovim API – самый низкоуровневый из трёх
-- Устаревающий способ. Менее понятный
vim.api.nvim_command('colorscheme habamax')

Цвет фона (Lua):

vim.api.nvim_set_hl(0, "Normal", { bg = "#21252B"})
  -- 0 – это namespace (пространство имён подсветки)
  -- т.е. 0 = глобальное namespace, означает "применить ко всему редактору"

-- Например, вот этот пример изменит цвет подсветки комментариев везде:
vim.api.nvim_set_hl(0, "Comment", { fg = "#888888" })
  -- "Normal" – highlight-group, самая важная группа
  -- Т.е. "Normal" = базовый стиль всего текста.
  -- Если задать цвет этой группе, фон всего окна редактора изменится

-- { bg = "#21252B" } – это Lua-таблица с атрибутами

Посмотреть все группы можно с помощью команды:

:highlight

ВАЖНЫЙ НЮАНС! Здесь важен порядок:

vim.cmd('colorscheme habamax')
vim.api.nvim_set_hl(0, "Normal", { bg = "#21252B"})

Если поменять местами эти две строчки, то цветовая схема перезапишет цвет фона.

Нумерация строк (Vim)

:set number   " включить нумерацию строк
:set nu       " включить нумерацию строк – короткая запись
:set number!  " отключить нумерацию строк
:set nu!      " отключить нумерацию строк – короткая запись

:set relativenumber    " включить относительную нумерацию строк
:set rnu               " включить отн. нумерацию строк – короткая запись
:set relativenumber!   " отключить относительную нумерацию строк
:set rnu!              " отключить отн. нумерацию строк – короткая запись

Нумерация строк (Lua):

vim.opt.number = true    -- включить нумерацию строк
vim.opt.nu = true        -- включить нумерацию строк – короткая запись

vim.opt.number = false   -- отключить нумерацию строк
vim.opt.nu = false       -- отключить нумерацию строк - короткая запись

vim.opt.relativenumber = true  -- включить относительную нумерацию строк
vim.opt rnu = true             -- вкл. отн. нумерацию строк – короткая запись
vim.opt.relativenumber = false -- отключить относительную нумерацию строк
vim.opt rnu = false            -- откл. отн. нумерацию строк – короткая запись

clipboard:

# Проверить, есть ли поддержка clipboard
:echo has("clipboard")

Посмотреть, откуда читается конфиг:

:echo stdpath("config")

Автоотступы

Когда я печатаю HTML, включаются отступы, которые мне мешают. Проверим, какие отступы включены:

:set autoindent?
 " autoindent

:set smartindent?
 " nosmartindent

:set cindent?
 " nocindent

:set indentexpr?
 " indentexpr=HtmlIndent()

:set filetype?
 " filetype=html

В нашем случае виновник: indentexpr=HtmlIndent(). autoindent тут не причём.

Отключим indentexpr сразу же в Neovim:

:set indentexpr=

Чтобы отключить автоотступы навсегда, добавим в init.lua:

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

vim.api.nvim_create_autocmd("FileType", {
    pattern = "html",
    callback = function()
        vim.opt_local.indentexpr = ""
    end,
})

Когда мы запускаем .lua-файл, то у нас тоже включаются автоотступы:

:set indentexpr?
" indentexpr=GetLuaIndent()

Отключим автоотступы для .lua-файлов в init.lua:

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

vim.api.nvim_create_autocmd("FileType", {
  pattern = "lua",
  callback = function()
    vim.opt_local.indentexpr = ""
  end,
})

Длина отступов

За длину отступов и табов отвечают переменные: shiftwidth и tabstop. По умолчанию они равны 8. Можно проверить это:

:set shiftwidth?
" shiftwidth=8

:set tabstop?
" tabstop=8

Если не хочется убирать отступы, то для комфортной работы можно их просто уменьшить:

:set shiftwidth=2
:set tabstop=2

" Если нужно, чтобы Tab заменялся пробелами, то:
:set expandtab

В init.lua это можно записать вот так:

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

vim.opt.shiftwidth = 2
vim.opt.tabstop = 2

vim.opt.expandtab = true

Если я хочу всё то же самое, но чтобы ТОЛЬКО для .lua-файлов, то:

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

vim.api.nvim_create_autocmd("FileType", {
  pattern = "lua",
  callback = function()
    vim.opt_local.shiftwidth = 2
    vim.opt_local.tabstop = 2
    vim.opt_local.expandtab = true
  end,
})

Прозрачность

Мой конфиг с прозрачностью:

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

-- UI / цвета
vim.cmd.colorscheme('habamax')
vim.api.nvim_set_hl(0, "Normal", { bg = "NONE" })
vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "NONE" })
vim.api.nvim_set_hl(0, "StatusLine", { bg = "NONE" })

hello world

Hello World (Vim)

:echo "Hello World"
:lua vim.notify("Hello World")

Hello World (Lua)

print("Выводим сообщение")
print("")

-- Или:
vim.notify("Выводим сообщение")
vim.notify("")

-- Или
vim.cmd('echo "Выводим сообщение!"')
vim.cmd('echo ""')

function pipka()
   print("Это функция пипка")
   print("")
end
pipka()

Создание пользовательской команды:

function pupsik()
   print("PUPPSIIIiiiik")
end
-- Создаем команду :Pupsik
vim.api.nvim_create_user_command('Pupsik', pupsik, {})

И теперь функцию можно вызывать в nvim:

:Pupsik

Пробуем заново

Базовая подсветка:


-- ~/.config/nvim/init.lua
vim.opt.number = true
vim.cmd("syntax on")

-- Проверим, что файлы JavaScript правильно определяются
vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, {
  pattern = "*.js",
  command = "set filetype=javascript"
})

print("Конфиг загружен")

Проверить, какая подсветка включена сейчас:

:set syntax?
   -- syntax=javascript

Проверить Treesitter:


:checkhealth nvim-treesitter

У меня ругалось на то, что не установлен tree-sitter-cli! Я его установил:

sudo pacman -S tree-sitter-cli

# Или
npm install -g tree-sitter-cli

:lua vim.treesitter.<Tab>