How's that again?

Vim

https://vim.rtorr.com

Во всех записях шорткатов буква С означает кнопку Ctrl. Например, <C-q> означает Ctrl+q.

Буква S означает кнопку Shift. Например, <S-w> означает Shift+w.

Основные клавиши

  • H - наверх экрана
  • M - в середину экрана
  • L - в низ экрана
  • w - к началу следующего слова
  • e - к концу следующего окна
  • b - назад к началу текущего слова
  • 0 - к началу строки
  • ^ - к первому значимому символу строки
  • $ - к концу строки
  • <C-d> - вниз на пол-экрана
  • <C-f> - вниз на экран
  • <C-u> - вверх на пол-экрана
  • <C-b> - вверх на экран
  • * - подсветить все вхождения слова, на которое указывает курсор
  • <C-g> - показать полный путь текущего файла

NerdTree

Дерево слева обеспечивается плагином scrooloose/nerdtree.

Открывается командой :NERDTreeToggle. Она замаплена на Ctrl+n

Когда фокус внутри дерева, справка вызывается кнопкой ?.

Основные команды:

  • o - открыть файл и перенести фокус на него
  • go - открыть файл, но фокус оставить в дереве
  • t - открыть в новой вкладке
  • T - открыть в новой вкладке, но не перключаться на нее
  • [g]i - разделить экран горизонтально, открыть файл в новой области
  • [g]s - разделить экран вертикально, открыть файл в новой области
  • O - рекурсивно открыть папку, то есть открыть и все ее подпапки до листьев
  • x - закрыть родителя
  • X - рекурсивно закрыть всех детей
  • p - перейти в дереве к родителю
  • P - перейти в дереве к корню проекта
  • <C-j> - перейти к предыдущему брату
  • <C-k> - перейти к следующему брату
  • r - обновить содержимое директории
  • R - обновить все дерево
  • I - показать/скрыть скрытые файлы
  • A - развернуть дерево на весь экран
  • m - открыть меню манипуляций с файлом, в нем потом перемещаться кнопками j/k, на текущий пункт указывает знак > слева от пункта.

Окна, вкладки, сплиты

Окна - это области, на которые разделена текущая вкладка.

Работа с окнами/сплитами

  • <C-w>s - разделить текущий буфер вертикально
  • <C-w>v - разделить текущий буфер горизонтально
  • <C-w>q - закрыть текущее окно
  • <C-w>[hjkl] - переход по соседним окнам
  • <C-w><S-[<>+-]> - ресайзит текущее окно. По умолчанию резайсит на 1 позицию курсора. Если нужно много, то предварять комбинацию числом.
  • :resize -10/+10/10 - уменьшить/увеличить/установить высоту текущего окна на 10
  • :vertical resize -10/+10/10 - уменьшить/увеличить/установить ширину текущего окна на 10
  • z10<Enter> - установить высоту текущего окна в 10
  • <C-w>| - установить ширину текущего окна на максимум
  • <C-w>= - установить всем окна равные размеры
  • set winwidth=130 - при переключении на окно ему будет выставляться ширина 130, если была меньше

Когда разделяем окно, в новом оказывается то же содержимое, что и было до разделения. После этого выбрать новый буфер в нем можно кнопками перехода по буферам <S-[jk]>.

Работа с вкладками

В каждой вкладке может быть открыт любой из буферов. В виме нет жесткой привязки вкладка-файл, как в других браузерах. Когда нажимаем <C-w>q, то закрывается текущая вкладка. Если она последняя, то закроется и весь vi, независимо от того, сколько осталось открытых буферов.

  • :tabnew filename - открыть новую вкладку
  • :tabclose - закрыть текущую вкладку
  • :tabonly - закрыть все остальные вкладки
  • gt - перейти в следующую вкладку
  • gT - перейти в предыдущую вкладку
  • {i}gt - перейти во вкладку номер i (нумерация с 1)

Работа с буферами

  • :ls - список буферов
  • :bd n - закрыть и удалить из списка буфер n
  • :b n - открыть буфер n
  • :bn - следующий буфер
  • :bp - предыдущий буфер
  • <S-j> - перейти в следующий буфер
  • <S-k> - перейти в предыдущий буфер
  • gd - закрыть текущий буфер

Навигация по коду

  • <C-yh> - перейти к реализации или объявлению, если не удалось к реализации
  • <C-yd> - перейти к объявлению
  • <C-yi> - перейти к заголовочному файлу из #include
  • <C-yt> - вывести тип переменной
  • <C-yd> - вывести документацию
  • <C-yf> - исправить ошибку в текущей строке, если возможно
  • <C-o> - вернуться назад
  • <C-i> - перейти вперед

Поиск

  • <C-p> - вывести окошко поиска по файла по пути
  • Enter - открыть выбранный файл в текущей вкладке (будет создан новый буффер, буфер открытый прежде в этой вкладке останется открытым)
  • <C-t> - открыть выбранный файл в новой вкладке
  • <C-v> - открыть выбранный файл в новом вертикальном сплите
  • <C-x> - открыть выбранный файл в новом горизонтальном сплите

Системные шорткаты

  • <Leader>ev - открыть vimrc
  • <Leader>rv - перезагрузить vimrc

Запуск shell-команды

:! ls ~

Edit-compile-edit

Если есть Makefile, то построить проект можно с :make. Очистить предыдущие результаты можно с :make clean.

После построения ошибки попадают в окно QuickFix. Его можно вывести через :cwindow или :cw. Оно работает как обычное окно, только по Enter можно переходить к строчкам с ошибками.

  • :set makeprg? - программа, которая будет использоваться для построения.
  • :cn - следующая ошибка в QuickFix
  • :cp - предыдущая ошибка в QuickFix

Python

Чтобы ошибки питона тоже выводились в quickfix, нужно подключить нужный встроеенный компилятор и указать makeprg:

:compiler pyunit
:set makeprg=python\ %  
:make

Строчкой python\ % мы указали, что нужно вызвать python, подав аргументом путь к текущему файлу.

Прочее

К виму не относится, но не знаю куда еще сунуть - в маковском терминале чтобы выделить текст и скопировать его в буфер обмена, нужно его выделять с зажатым Fn, а потом жать Ctrl+C.