Содержание

vim

За основу взята статья с xgu.ru

Vim (vi improved) — текстовый редактор, идеологическое продолжение текстового редактора vi. Отличительная особенность редактора (как и редактора vi) - поддержка режимов редактирования: поведение редактора и его реакция на нажатие клавиш определяется тем, в каком режиме он сейчас находится.

Так выглядила клавиатура создателя vi

Теория

vim modes

Буферы

Буферы - это области в оперативной памяти, куда загружается содержимое открываемых vim файлов. Каждый открытый файл считывается в отдельный буфер. Между ними можно переключаться не теряя сделанных в изменений. Содержимое буфера можно записать в файл (тот же, из которого он был прочитан, или другой).

Регистры

Регистры - это «буферы обмена» / «карманы» для хранения команд и текста.

TODO: написать о типах регистров и работе с ними.

Использование

normal mod

Переключение режимов

Быстрые действия

Внутри строки:

По строкам:

По отметкам:

Прокрутка окна:

Поиск

command mod

Замена

Для замены будет использоваться такая конструкция:
:%s/искать/заменить/g

regex syntax

Bash команды

Для выполнения команд в текущем pwd прямо из vim использоваться такая конструкция:
:!<команда>

insert mod

Настройка

TODO: написать о опциях и vimrc

Плагины

Проще всего ставить плагины при помощи плагина vim-plug. Его установка:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Далее в ~/.vimrc прописываем следующее:

call plug#begin()
 
" Тут список плагинов
" Примеры:
 
" Сокращенная запись для GitHub; переводится как https://github.com/junegunn/seoul256.vim.git
Plug 'junegunn/seoul256.vim'
 
" Любой допустимый git URL разрешен
Plug 'https://github.com/junegunn/vim-easy-align.git'
 
" Используя помеченный релиз; допускается подстановочный знак (требуется git 1.9.2 или выше)
Plug 'fatih/vim-go', { 'tag': '*' }
 
" Используя не-умолчательную ветку
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
 
" Используйте опцию 'dir', чтобы установить плагин в не-умолчательную директорию
Plug 'junegunn/fzf', { 'dir': '~/.fzf' }
 
" Хук после обновления: выполните команду оболочки после установки или обновления плагина
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
 
" Хук после обновления может быть лямбда-выражением
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
 
" Если плагин vim находится в подкаталоге, используйте опцию 'rtp', чтобы указать его путь
Plug 'nsf/gocode', { 'rtp': 'vim' }
 
" Загрузка по требованию: загружается, когда выполняется указанная команда
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
 
" Неподдерживаемый плагин (установлен и обновлен вручную)
Plug '~/my-prototype-plugin'
 
 
call plug#end()