За основу взята статья с xgu.ru
Vim (vi improved) — текстовый редактор, идеологическое продолжение текстового редактора vi. Отличительная особенность редактора (как и редактора vi) - поддержка режимов редактирования: поведение редактора и его реакция на нажатие клавиш определяется тем, в каком режиме он сейчас находится.
Буферы - это области в оперативной памяти, куда загружается содержимое открываемых vim файлов. Каждый открытый файл считывается в отдельный буфер. Между ними можно переключаться не теряя сделанных в изменений. Содержимое буфера можно записать в файл (тот же, из которого он был прочитан, или другой).
Регистры - это «буферы обмена» / «карманы» для хранения команд и текста.
TODO: написать о типах регистров и работе с ними.
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 - предыдущее вхождениеquit / q - выйтиwrite / w - записать буферpwd - текущая рабочая директорияcd - сменить рабочую директориюls - листинг буферовedit файл / e файл - открыть новый буферbuffer n / b n - сменить текущий буфер на nn - переключатся на следующий буферN - переключатся на предыдущий буферset опция - изменить опциюreg - листинг регистровsp - разделение экрана по горизонталиvsp - разделение экрана по вертикалиhelp - справкаargdo - выполнить следующие команды для всех файлов
Для замены будет использоваться такая конструкция:
:%s/искать/заменить/g
Для выполнения команд в текущем pwd прямо из vim использоваться такая конструкция:
:!<команда>
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()