Навігація і пошук у Vim

7 хв. читання

Хороша навігація і пошук в проєкті є одними найважливіших функцій будь-якого сучасного редактора коду. В цій статті ми розглянемо деякі плагіни у 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 - Закрити всі інші таби, окрім поточної

Поки що нам вистачить цих налаштувань, але це тільки деякі конфігурації. Ви можете налаштувати практично увесь функціонал під себе: ознайомтесь з документацією до плагінів і додайте необхідні налаштування:

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація