Хороша навігація і пошук в проєкті є одними найважливіших функцій будь-якого сучасного редактора коду. В цій статті ми розглянемо деякі плагіни у Vim, а також познайомимось і навчимось працювати з буферами.
Насамперед рекомендую оновити версію Vim/Neovim до останньої, а також встановити менеджер плагінів. Я буду використовувати vim-plug, але ви можете обрати будь-який на свій смак.
Почнемо з встановлення простого, але дуже потрібного, на мою думку, плагіна vim-easymotion. Він дозволяє переходити до будь-якого слова в зоні видимості редактора.
Робимо це комбінацією клавіш: Leader + s + буква, до якої ми хочемо переміститись
, а далі вводимо запропонований набір букв, щоб перейти в потрібну точку. Запропоновані букви не випадкові: комбінації добираються так, щоб їх було зручно вводити технікою сліпого друку. У стандартних налаштуваннях Leader позначаєтьсяя як \\
, але це можна змінити.
Плагін має дуже багату функціональність (усі можливості перелічені в документації), але нам зараз достатньо невеликого налаштування. Для встановлення відредагуємо наш файл конфігурацій. Я використовую Neovim, тому в мене це init.vim
-файл; якщо ж у вас Vim — застосуйте .vimrc
.
call plug#begin('~/.local/share/nvim/plugged')
Plug 'easymotion/vim-easymotion'
call plug#end()
Після зберігання перезавантажимо Vim, виконавши команду source
над файлом конфігурацій source ~/.config/nvim/init.vim
. Далі викличемо в редакторі команду :PlugInstall
, вона почне завантажувати наш плагін. Коли він все завантажить, закриємо вікно за допомогою команди :q
.
Щоб скористатись плагіном, потрібно визначити комбінацію клавіш, яка буде викликати функції плагіна. Тепер нам потрібно лише додати рядок в init.vim
-файл, перезавантажити Vim і протестувати роботу плагіна.
map <Leader> <Plug>(easymotion-prefix)
Наступний плагін — nerdtree. Він потрібен нам для зручної навігації у дереві файлів, а також для операцій на кшталт створення, видалення й переміщення файлів (це не весь перелік можливостей). Встановлюємо його, як і попередній плагін, а тоді додаємо цей рядок в менеджер плагінів.
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Перезавантажуємо і виконуємо :PlugInstall
. Усі функції плагіна є в документації, ми ж додамо лише деякі корисні налаштування.
"NERDTree
let NERDTreeMinimalUI = 1 " Забираємо відображення секції Bookmarks i Press ? for help
let NERDTreeAutoDeleteBuffer = 1 " Видаляє буфер (поки думаємо про буфер як про відкритий файл) після видалення файлу
" Викликаємо nerdtree автоматично, якщо ми відкрили vim в директорії
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
map <C-n> :NERDTreeToggle<CR> " Ctrl + n - показуємо/приховуємо nerdtree меню
nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p> " \\ + r - я використовую це, щоб оновити дерево (наприклад, після додавання нових файлів через команди терміналу, а не nerdtree)
nnoremap <silent> <Leader>v :NERDTreeFind<CR> " \\ + v - Фокусуємо курсор в меню nerdtree на файлі, де ми натиснули комбінацію
Обов'язково спробуйте запустити один з ваших проєктів, відкрити nerdtree і протестувати його функціонал. Якщо в меню nerdtree натиснути ?
, ви отримаєте інформацію про те, як з ним працювати. Також дуже корисною функцією є Bookmarks, але вони варті окремої статті, тому поки що ми не будемо на них зупинятись.
Одразу встановимо плагін nerdtree-git-plugin, він прив'яже nerdtree до git. Після цього в меню побачимо, які файли ми модифікували. Встановлюємо плагін, як і в попередні рази, додаткових налаштувань не потрібно.
Якщо ви, як і я , звикли бачити у меню іконки файлів, можете поставити vim-devicons. Аби вони запрацювали, потрібно додатково скачати і увімкнути в терміналі шрифт Nerd Fonts.
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'ryanoasis/vim-devicons'
Дуже часто нам потрібно відкрити останній файл, який ми редагували. Для цього є плагін vim-startify, він запускається при виклику команди vim
або nvim
без аргументів. Встановлюється, як і попередні плагіни. Він доволі простий у використанні, тому зупинятись на ньому немає сенсу.
Plug 'mhinz/vim-startify'
Наш наступний плагін — fzf.vim. З ним ми зможемо здійснювати глобальний пошук у всьому проєкті. Він має дуже багато можливостей, тому раджу прочитати readme, щоб ознайомитись з основними. Встановлюємо, як і раніше.
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } " Встановлення fzf для використання в vim
Plug 'junegunn/fzf.vim'
Після цього потрібно встановити ag, ми будемо його використовувати для пошуку тексту у файлах всього проєкту. Інструкція встановлення є в Github-репозиторії. Далі додамо і розглянемо деякі конфігурації.
"Fzf search
silent! nmap <C-P> :GFiles<CR> " Ctrl + p - пошук файлів по проєкту, які були закомічені
nnoremap <Leader>b :Buffers<CR> " \\ + b - навігація по наявним буферам
nnoremap <Leader>h :History<CR> " \\ + h - пошук по історії відкриття файлів
nmap <Leader>F :Ag<Space> " \\ + F - пошук у файлах по всьому проєкту
Також пропоную трохи оптимізувати роботу з нашими буферами, їх можна сприймати як відкриті файли (таби). Зараз ми без проблем можемо перемикатись між ними за допомогою \\ + b
, але цього не завжди достатньо, тому додамо деякі конфігурації.
" buffers
map gn :bn<cr> "g + n - наступна таба
map gp :bp<cr> "g + p - попередня таба
map gd :bd<cr> "g + d - закрити табу
nnoremap <leader>co :w <bar> %bd <bar> e# <bar> bd# <CR> "\\ + с + o - закрити всі інші таби, окрім поточної
Ось таким буде наш файл конфігурацій після встановлення усіх потрібних плагінів.
call plug#begin('~/.local/share/nvim/plugged')
Plug 'easymotion/vim-easymotion'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
call plug#end()
map <Leader> <Plug>(easymotion-prefix)
"NERDTree
let NERDTreeMinimalUI = 1 " Забираємо відображення секції Bookmarks i Press ? for help
let NERDTreeAutoDeleteBuffer = 1 " Видаляє буфер (поки думаємо про буфер як про відкритий файл) після видалення файлу
" Викликаємо nerdtree автоматично, якщо ми відкрили vim в директорії
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
map <C-n> :NERDTreeToggle<CR> " Ctrl + n - показуємо/приховуємо nerdtree меню
nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p> " \\ + r - я використовую це, щоб оновити дерево (наприклад після додавання нових файлів через команди терміналу, а не nerdtree)
nnoremap <silent> <Leader>v :NERDTreeFind<CR> " \\ + v - Фокусуємо курсор в меню nerdtree на файлі, де ми натиснули комбінацію
"Fzf search
silent! nmap <C-P> :GFiles<CR> " Ctrl + p - пошук файлів по проєкту, які були закомічені
nnoremap <Leader>b :Buffers<CR> " \\ + b - навігація по наявним буферам
nnoremap <Leader>h :History<CR> " \\ + h - пошук по історії відкриття файлів
nmap <Leader>F :Ag<Space> " \\ + F - пошук у файлах по всьому проєкту
" buffers
map gn :bn<cr> "g + n - Наступна таба
map gp :bp<cr> "g + p - Попередня таба
map gd :bd<cr> "g + d - Закрити табу
nnoremap <leader>co :w <bar> %bd <bar> e# <bar> bd# <CR> "\\ + с + o - Закрити всі інші таби, окрім поточної
Поки що нам вистачить цих налаштувань, але це тільки деякі конфігурації. Ви можете налаштувати практично увесь функціонал під себе: ознайомтесь з документацією до плагінів і додайте необхідні налаштування:
Ще немає коментарів