мета-данные страницы
vim
За основу взята статья с xgu.ru
Vim (vi improved) — текстовый редактор, идеологическое продолжение текстового редактора vi. Отличительная особенность редактора (как и редактора vi) - поддержка режимов редактирования: поведение редактора и его реакция на нажатие клавиш определяется тем, в каком режиме он сейчас находится.
Теория
vim modes
Буферы
Буферы - это области в оперативной памяти, куда загружается содержимое открываемых vim файлов. Каждый открытый файл считывается в отдельный буфер. Между ними можно переключаться не теряя сделанных в изменений. Содержимое буфера можно записать в файл (тот же, из которого он был прочитан, или другой).
Регистры
Регистры - это «буферы обмена» / «карманы» для хранения команд и текста.
TODO: написать о типах регистров и работе с ними.
Использование
normal mod
Переключение режимов
c/[/esc- выход из режима:- command modi- insert modv- visual mod (common)V- visual mod (lines)ctrl+v- visual mod (blocks)
Быстрые действия
y- скопироватьp- вставитьx- вырезатьd- удалитьdd- вырезать строку в default регистрzz- сохранить и выйтиZQ- выйти
Навигация
Внутри строки:
0- переход в начало строки^- переход на первый непробельный символ$- переход в конец строкиf символ- переход к первому найденному символуF символ- переход к первому найденному символу в обратном направленииt символ- перейти на один символ левее заданного (почти как f, только идёт на один символ меньше; очень удобно, когда надо «удалить до запятой, но запятую оставить»)T символ- перейти на один символ левее заданного, поиск ведется в обратном направленииw- перейти к началу следующего словаe- перейти в конец следующего словаb- перейти к началу предыдущего словаctrl+y- сдвиг вверх, с сохранение позиции кореткиctrl+e- сдвиг вниз, с сохранением позиции коретки
По строкам:
gg- перейти на первую строкуG- перейти на последнюю строку30G- перейти на строку 30
По отметкам:
``- к месту, с которого был сделан последний прыжок (прыгнуть назад)`.- к месту последней правки
Прокрутка окна:
ctrl+y- перемещение вверх на одну строку, с сохранением абсолютной позиции курсораctrl+e- перемещение вниз на одну строку, с сохранением абсолютной позиции курсораz-- прокрутить окно так, что строка с курсором будет почти в самом низуz.- прокрутить окно так, что строка с курсором будет почти в центреz Enter- прокрутить окно так, что строка с курсором будет вверху
Поиск
/слово- найти подстроку «слово»n- следующее вхождениеN- предыдущее вхождение
command mod
quit/q- выйтиwrite/w- записать буферpwd- текущая рабочая директорияcd- сменить рабочую директориюls- листинг буферовedit файл/e файл- открыть новый буферbuffer n/b n- сменить текущий буфер на nn- переключатся на следующий буферN- переключатся на предыдущий буферset опция- изменить опциюreg- листинг регистровsp- разделение экрана по горизонталиvsp- разделение экрана по вертикалиhelp- справкаargdo- выполнить следующие команды для всех файлов
Замена
Для замены будет использоваться такая конструкция:
:%s/искать/заменить/g
Bash команды
Для выполнения команд в текущем pwd прямо из vim использоваться такая конструкция:
:!<команда>
insert mod
ctrl+t- сдвинуть строку вправоctrl+d- сдвинуть сроку влевоctrl+w- стереть слово слеваctrl+u- стереть всю строку слева
Настройка
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()

