Часто мы тратим время на включение редакторов больше, чем тратим на исправление или написание какого-то однострочного скрипта. Я считаю что эту проблему можно быстро решить, ведь для этого и существуют консольные редакторы


Предыстория


Каждый опытный программист печётся о том, как бы побыстрее закончить начатую им работу. Очень часто заказчик не понимает сколько времени и труда тратят разработчики.
Я как учащийся понимаю, что 2 года в программировании — ничего, ибо люди работают по 10 лет и едва ли получают звания Сеньоров, ибо в наше время нужно знать всё больше и больше. Главный инструмент опытныго или начинающего разработчика — редактор кода. Именно он позволяет сэкономить время и как можно быстрее приступить к изучению материала.
Всегда приятно, когда ты можешь "летать" по коду. Ты знаешь что и где находится, а если не знаешь, то можешь найти. Именно это предает нам сил и оперативности в разработке.


Какой же редактор выбрать?


Редакторов в 2020 году существует огромное количество: VSCode, Sublime text, Atom, Vim, Neovim, Emacs, NotePad++, Brackets, Nano и ещё многие другие.


Почему именно ваше внимание должен привлечь NeoVim?


Я думаю, что отвечу на этот вопрос быстро. Вне зависимости от того, на какой ОС вы работаете, вы всегда сталкивались с проблемой "Чёрт, сейчас надо быстро написать (или исправить) небольшой кусок кода" и тут начинается… Вы открываете редактор (пусть это будет VSCode) он включается через 5 секунд, прогружается ещё 3 секунды, открывает папку с файлом 2 секунды, (предположим что пишем что-то на Python, для простоты примера) загружает обновления для дополнений и сами дополнения около 10 секунд. Вы только что потратили 20 секунд своей жизни (при условии что сборка ПК у вас средняя, допустим что это будет ноутбук, который просто удобно использовать не только дома) чтобы написать или исправить какую-то мелочь.


Теперь посмотрим на ситуацию с другой стороны: открыть терминал — секунда ровно, открыть NeoVim с дополнениями — секунда. 2 секунды итого (или 5, если не особо торопиться). NeoVim открывает большие файлы за секунды. Он удобен в использовании. Многие скажут вам: "Это апдейт Vim'а, из которого я даже выйти не могу" — на что я отвечу вам, что эти хоткеи — лучшее, что дал Бог людям.


А почему не просто Vim?


В NeoVim пофиксены многие баги. Встроена "проверка здоровья", фреймворк, который помогает вам правильно настроить конфигурацию, а также проверить работу плагинов. Также, были вшиты некоторые плагины:


*standard-plugin-list*
Standard plugins 
|pi_gzip.txt|      Reading and writing compressed files
|pi_health.txt|    Healthcheck framework
|pi_matchit.txt|   Extended |%| matching
|pi_msgpack.txt|   msgpack utilities
|pi_netrw.txt|     Reading and writing files over a network
|pi_paren.txt|     Highlight matching parens
|pi_spec.txt|      Filetype plugin to work with rpm spec files
|pi_tar.txt|       Tar file explorer
|pi_zip.txt|       Zip archive explorer

Взято из :help (мануала) NeoVim


Также стоит привести перевод (немного упрощенный) официального сайта


Расширяемый


  • API является хорошо задокументированным
  • Удаленные плагины работают как совместные процессы, что делает их безопасными и асинхронными.
  • Графические интерфейсы, IDE, веб-браузеры могут включать Nvim в качестве редактора или хоста скриптов.
  • MessagePack — структурированный язык, который позволяет писать плагины на любом языке

Юзабельный (простой в применении)


  • Работает везде одинаково
  • Все ещё чтит некоторые старые традиции Vim
  • Современные функции редактора, такие как стилизация курсора, события с фокусом (скорее всего имеется ввиду автосохранение при потере фокуса как в VSCode), операции со скобками

Всё ещё Vim


  • Полностью совместим с моделью редактирования Vim и языком Vimscript
  • Начните с: help nvim-from-vim, если вы уже используете Vim и хотите перенести некоторые настройки


Кратко о передвижении и хоткеях NeoVim


j — вниз
k — вверх
h — влево
l — вправо


Редактирование


i — войти в режим редактирования с текущего положения курсора (insert)
a — войти в режим редактирования со следующего символа (append)
I — войти в режим редактирования с начала строки
A — войти в режим редактирования с конца строки
dd — удалить строку (delete)
dw — удалить слово (delete a word)
dl — удалить символ (delete a letter)
o — режим редактирования (insert) на новой строке, что ниже данной
O — режим редактирования на новой строке, что выше данной
Также, каждый delete можно совмещать с цифрой: 7dl — удалит 7 символов
Чтобы скопировать что-то нужно перейти в режим visual и выделить что нужно скопировать, а затем нажать y (yank)
p — вставить из буфера (внутреннего) (paste)


Перемещение


w — переместиться на начало следущего слова (word)
W — переместиться на начало следующего слова пропуская скобки, кавычки и далее
b — переместить в начало слова (или начало предыдущего слова) (скобки, кавычки считаются за слово) (backword)
B — переместиться в начало слова (Скобки, кавычки не считаются за слово)
e — перейти в конец слова (следующего слова) (end of the word)
E — перейти в конец слова (после скобок и всего прочего)
gg — перейти в начало файла
G — перейти в конец документа
^ — начало строки
$ — конец строки
/ — поиск внизу файла (n — для следующего найденного; N — для предыдущего найденного)
? — поиск вверху файла


После просмотра этих скучных комбинаций клавиш


Теперь представьте, вы можете перемещаться по коду через 50 слов сразу, нажав 3 клавиши. Вам не нужно целиться мышкой по тегам или операторам. Вы можете сразу просто взять и перепрыгнуть куда вам нужно. Поиск — одна клавиша, а не Ctrl+F, как это придумано везде. До стрелок впредь не нужно тянуться.


Хвастовство



Только благодаря NeoVim я смог увелеичить свою производительность в 3-4 раза (естественно, относительно времени). NeoVim — легкий способ писать код и не только. Многие как будто намеренно нагоняют сложность на все Vim-подобные редакторы. Я же наоборот хочу убедить читателя, что нет ничего такого в том, чтобы что-то выучить, а затем использовать это эффективно.


Было бы нечестно если бы я не указал ссылку на этот замечательный редактор
//Добавляю GitHub проектаприм. модератора


Как говорил Тим Бернерс-Ли:


Магия перестаёт существовать после того, как вы понимаете, как она работает.

На всякий случай оставлю тут конфигурацию, которую я использую:


call plug#begin()

" FuzzyFinder (для быстрого поиска)
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
" NERDTree - быстрый просмотр файлов
Plug 'preservim/nerdtree'
" Сoc - автодополнение 
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Дополнения для NERDTree
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
Plug 'scrooloose/nerdcommenter'
" Дополнение для Git, а также иконки для NERDTree
Plug 'airblade/vim-gitgutter'
Plug 'ryanoasis/vim-devicons'
" Линия статуса
Plug 'itchyny/lightline.vim'
" Темы
Plug 'joshdick/onedark.vim'
Plug 'cocopon/iceberg.vim'
" Проверка Синтаксиса
Plug 'scrooloose/syntastic' 
" Плагин автозавершения
"Plug 'Valloric/YouCompleteMe'
" Поддержка Python
"Plug 'klen/python-mode'
call plug#end()

" Делаем Vim более функциональным
set nocompatible
set t_Co=256

" Делаем линейку для отображения на какой мы строке и сколько расстояния до
" других строк в **NeoVim**
set number
set ruler

" Комбинация клавиш jkl - действует как Escape в режиме Insert
inoremap jkl <ESC>

" Делаем так, чтобы навигация работала на русском языке
nmap о j
nmap л k
nmap р h
nmap д l
nmap ш i
nmap ф a
nmap в d

" В нормальном режиме Ctrl+n вызывает :NERDTree
nmap <C-n> :NERDTreeToggle<CR>
vmap ++ <plug>NERDCommenterToggle
nmap ++ <plug>NERDCommenterToggl

let g:NERDTreeGitStatusWithFlags = 1
let g:NERDTreeIgnore = ['^node_modules$']

" Тема для **NeoVim**
syntax on
colorscheme iceberg

" Линия статуса: конфигурация
set noshowmode " Табличка --INSERT-- больше не выводится на экран
set laststatus=2
let g:lightline = {
      \ 'colorscheme': 'iceberg',
      \ 'active': {
      \   'left': [ [ 'mode', 'paste' ],
      \             [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]
      \ },
      \ 'component_function': {
      \   'gitbranch': 'fugitive#head'
      \ },
      \ }