Конфигурация vim сделана на основе конфига sjl. Частично изменен набор плагинов и некоторые сочетания кнопок и опции.
В качестве основного менеджера плагинов используется
vundle – умеет устанавливать, обновлять и
удалять плагины прямо из vim. Собственно сами плагины, которые живут на
github.com и не запихиваются в репозитарий, а
устанавливаются и/или обновляются при новой установке vim и этого конфига.
Поэтому нет нужды держать их в своём репозитарии на github.
Команда :BundleInstall[!]
собственно и устанавливает/обновляет все плагины.
- vim-surround — удобный плагин для обрамления слов, фраз, предложений и блоков скобками, тегам, кавычками и прочим подобным, ну и конечно же их замена.
- vim-unimpaired – удобные сочитания клавиш с "[" и "]", типа переключения буферов, вставления строк(и) выши или ниже текущего положения, енкодинг и декодинг XML (и HTML), URLs, в общем много полезных штук.
- vim-repeat – расширение возможностей повторения последнего действия на кнопке "."
- vim-commentary – простешее
комментирование строки или выделенного куска по сочетанию
\\\
(тройное нажатие кнопки\
) или\\
(в режиме выделения). - nerdtree – файловый менеджер
- vim-abolish – поиск и замена подстрок или абревиатур с множеством вариантов. Вообще не очень понимаю зачем он мне может пригодиться, ещё ни разу не использовал, но пока пусть будет.
- vim-speeddating – изменять дату
кнопками
C-x
иC-a,
инкрементальное увеличение/уменьшение даты как обычных чисел, поддерживает различные форматы, имеет возможности для расширения своими форматами. - Autoclose-vim – автозакрытие тегов, блоков типа if/end и подобное.
- vim-easymotion – быстрое
перемещение к нужному слову, символу или подобному, а так же удаление,
копирование, замена и прочее. Работает по
<leader><leader>
(;;) motion. Пример:;;w
, затем выбираем на какое слово переместить курсор. - gundo.vim – удобная работа с undo, позволяет просмотреть в отдельном окне какие именно были сделаны изменения и вернться к любому
- supertab – автодополнения по Tabs
- scratch.vim – использование scratch окна в vim, для временного хранения текста. После выхода из vim это окно закрывается и всё что в нём было теряется.
- vim-orgmode – менеджер задач или todo-list. Основан на Emacs' Org-Mode. Пока особо не разобрался, но наверное полезная штука. Когда-нибудь разберусь и буду пользовать, наверное.
- vim-yankring – управление буфером обмена, тобишь копипасты. Просмотр и редактирование всего что копировалось.
Общие плагины для разработки
- vim-fugitive – отличный плагин для работы с git прямо из vim. Коммиты, диффы и прочие полезности с подстветкой и другими плюшками.
- gist-vim – закидывание текста, (скорее кусков кода) в gist.
- threesome.vim – мощный плагин для разрешения конфликтов при мердже бранчей или подобного
- taglist-plus — просмот функций, классов и объектов, с поддержкой Javascript
- tagbar – ещё один плагин для просмотра функций, классов и объектов с удобной сортировкой и вообще.
- vim-makegreen – запускает make и отображает сообщения зелёным или красным цветом, пока не использую. Оставил на будущее
- syntastic – проверяет синтаксис кода, поддерживает много языков
Плагины которые используются только под Mac OS X
- KeyboardLayoutSwitcher – переключалка раскладки, чтобы при выходе из режима ввода всегда включался английский.
- xptemplate – для сниппетов использую этот плагин. Показался удобнее чем snipMate и UltiSnips.
- ack.vim – поиск в файлах, что-то вроде grep, но типа более крутой
- ctrlp.vim – поиск файлов, буфферов и чего-то ещё по мере ввода, ищет по любой части имени файла и рекурсивно. Полезная штука.
Плагины специфичные для того или иного типа файлов, и скорее языков программирования. В большинстве своём добавляют подсветку кода, но некоторые куда более крутые.
- vim-coffee-script - подсветка и автодополнение кода на Coffee Script
- vim-haml - подсвечивает код Haml, Sass и Scss файлов. Первый это шаблонизатор, часто используемы в ruby проектах и в частности в Ruby on Rails, остальные это расширения css с поддержкой переменных и прочих полезных функций, упрощающих и ускоряющих написание кода на css.
- vim-css-color – подсветка цвета прямо в тексте, удобная штука.
- vim-less – подсветка less файлов, аналог sass и scss
- vim-css3-syntax – подсветка новых атрибутов, свойств и селекторов введённых в css3
- vim-javascript – подсветка javascript и улучшение автодополения и автоформатирования кода. Так же добавляет поддержку ctags для javascript.
- html5.vim – поддержка HTML5 тегов и атрибутов
- vim-sparkup – неофициальный zen coding for vim. Быстрое написание html кода за счёт использования аббревиатур и прочих сокращений, которые потом разворачиваются в html код. Вещь полезная, но нужно много и часто с этим работать, чтобы запомнить и действительно "ускорить" и "упростить".
- python-mode - крутой плагин для работы с питоновским кодом, однако временно не использую, так как ничего не пишу на питоне.
- bash-support.vim – крутой плагин для написания кода на bash'е. Много сочетаний клавиш и прочего.
- vim-markdown – плагин для подсветки markdown файлов (типа этого, который сейчас читаете).
- vim-colors-solarized – очень хорошая цветовая схема.
- vim-powerline – делает красивой и удобной строку статуса. Требует модифицированного шрифта, хотя можно и обойтись.
В качестве <leader>
используется ";"
В качестве <localleader>
используется ","
D
в нормальном режиме удаление текста от курсора и до конца строки
;<space>
в нормальном режиме убирает подсветку поискового запроса.
Tab
в нормальном режиме переключает курсор между скобочками, в режиме ввода
это автодополнение текста
n
всё так же перемещает к следующему найденному поисковому запросу и помещает
его в центре экрана
N
тоже самое что и предыдущее, но в обратную сторону
*
ищет текст под курсором (в визуальном режиме — выделенный кусок) от
текущего места и до конца, но не переходит к первому найденному, а просто
подсвечивает все найденные варианты, дальше перемещаться можно с помощью n
и N
#
тоже самое что и *
, но ищет в обратную сторону
g;
в нормальном режиме перемещает курсор в позицию первого изменения и
позиционирует по центру экрана
g,
тоже самое что и g;
только перемещает курсор в позицию последнего
изменения
c-e
в режиме ввода перемещает курсор в конец строки, как в терминале
c-a
в режиме ввода перемещает курсор в начало строки, как в терминале
;/
вызывает vimgrep в текущем каталоге на строке под курсором и выводит
найденные файлы с указанием строк в qquickfix окно
C-h
, C-j
, C-k
, C-l
переключение между окнами, вместо длинных <c-w>h
и остальных
C-tab
переключение в следующее окно
C-S-tab
переключение в предыдущее окно
;h
разделить окно горизонтально
;v
разделить окно вертикально
Ctrl-Enter
перематывает текущее положение курсора к самому верху редактора,
если курсор находится на свёрнутом разделе раскрывает его и перематывает его
начало к верху экрана
Space
в нормальном и визуальном режимах сворачивает и разворачивает раздел под
курсором
zO
Раскрыть текущий свёрнутый (folded) раздел начиная с самого вернехго и все
подуровни независимо от того где находится курсор (в подуровнях или нет)
;z
сворачивает все раскрытые разделы и оставлет открытым только тот на котором
находится курсор
,S
сортирует свойства в алфавитном порядке
{<cr>
в режиме ввода вставляет пару фигурных скобок {
и }
и корректно
распологает курсор между ними таким образом чтобы кусок кода был сворачиваемым
(folded)
,f
сворачивает (fold) текущий тег
,t
сворачивает (fold) текущий шаблонный тег (templatetag)
Shift-Enter
если открывающий и закрывающий теги набраны в одну строку и курсор
находится между ними, то нажатие этого сочетания клавиш выносит открывающий
изакрывающий теги и курсор на отдельные строки
,=
выравнивает тег под курсором (и все вложенные)
{<cr>
тоже самое что и для CSS
,1
делает строку под курсором заголовком первого уровня
,2
тоже самое только второго уровня
,3
тоже самое только третьего уровня
Q
что-то делает в нормальном режиме, так как ещё не пробовал поэтому не знаю
:)
⌘ '
в режиме ввода вставить такой текст _(u'')
и поместить курсор между
кавычками, нужны для ввода строки в юникоде
,1
секция первого уровня
,2
секция второго уровня
,3
секция третьего уровня
,4
секция четвёртого уровня
;ev
открыть файл .vimrc на редактирование, при этом окно разделяется по
вертикали и помещается в правую часть окна
;!
вызывает функцию Shell, которой можно передать шелл-команду и результат
откроется в правой части окна (вертикальное разделение)
;ts
удаляет "висящие" пробелы
c-u
в нормальном режиме и в режиме ввода меняет регистр слова перед курсором
;f
замена текста в командной строке появляется текст %s//
Все сочетания используются в режиме ввода команд
c-a
курсор в начало строки
c-e
курсор в конец строки
c-h
курсор на символ влево
c-l
курсор на символ вправо
;D
отключаем diff
Q
в нормально и визуальном режиме форматирование строки как TextMate (мне не
очень нравится или нужно, но пока оставил)
;V
выделяет строки от текущего места курсора до места последнего изменения или
копирования текста (скорее символа)
S
разбиение строк, посути обратное действие J[oin]
;Al
в нормальном и визуальном режиме выравнивает текст по левому краю
;Ac
по центру
;Ar
по правому краю
;;
переход в режим ввода команд (ну лениво мне иногда жать Shift-;
:)
;1
устанавливает высоту строки для ввода команд в одну строку
;2
устанавливает высоту строки для ввода команд в две строки
'
or æ
прыгнуть к ранее поставленной метке (:mark). æ
это Alt '
`
переключение на альтернативный файл (alternate-file) в буфере
vv
в нормальном режиме выделяет всю строку за исключением отступов
c-b
в режиме ввода используется как калькулятор. Сомнительная полезность, но
забавно и вдруг пригодится. Хотя наверняка же забуду.
w!!
в режиме ввода команд записывает в файл с использованием команды sudo
;w
сохраняет файл
;W
сохраняет все буферы
;q
закрытие текущего файла без сохранения
;Q
закрытие всех файлов без сохранения и выход из редактора
;s
сохранить и закрыть файл
;S
сохранить и закрыть все файлы
Это когда в режиме ввода команд вводишь опечатку я часто набираю частые команды
типа wq с зажатым шифтом после того как набрал :
, тупо не успеваю шифт
отпустить
E = e
редактирование
Q = q
закрытие
W = w
сохранение
QA = Qa = qa
закрыть всё
WA = Wa = wa
сохранить всё
WQ = Wq = wq
сохранить и закрыть
Данные сочетания делаются в нормально режиме
_md
устанавливает тип markdown
_hd
устанавливает тип htmldjango
_jt
устанавливает тип htmljinja
_cw
устанавливает тип confliencewiki
_pd
устанавливает тип python.django
_d
устанавливает тип diff
F8
переключалка режима paste/nopaste
Ctrl Enter
в режиме ввода и не зависимо от положения курсора (хоть в середине
строки) переносит курсор на новую строку
Shift Enter
в режиме ввода и не зависимо от положения курсора (хоть в середине
строки) добавляет в конце строки :
и переносит курсор на новую строку
;I
показывать/скрывать непечатные символы, такие как "висящий пробел",
"табуляция" и "конец строки"
c-l
автодополнение строки. Строки берутся из всех открытых буферов.
c-f
автодополенение вставляющее имея файла из текущего (:pwd) каталога.
;<cr
запускает ctags (рекурсивно) в текущем (:pwd) каталоге. И добавлен хак
для выдёргичания питоновских переменных, которые ctags почему-то игнорирует.
;a
вызывает :Ack!
. Типа grep по файлам.
;x
включает/выключате плагин Autoclose, который автоматически закрывает скобки
и прочие вещи в зависимости от типа файла.
;c
в нормальном режиме "комментирует" строку, в визуальном режиме
"комментирует" выделенный блок
Очень хороший плагин, быстро ищет среди файлов, буферов или ранее открытых
фалов. По умолчанию ищет в текущем каталоге (:pwd), если напрямую набрать
в командной строке CtrlP <directory>
, где в качестве <directory>
указать
какой-то каталог, то будет искать в нём.
c-p
собственно стандартное сочетание клавиш для его вызова
;.
а в данном случае будет искать по тегам, которые берёт из файла
построенного ctags
В окне поиска используются следующие клавиши:
c-j
, c-k
перемещает курсор выбора в окне результатов вниз и вверх
соответственно
c-p
, c-n
переход по истории поиска соответственно назад и вперёд
c-f
, c-b
переключает режим поискать вперёд (buffers -> mru -> files)
и обратно (mru -> buffers -> files). Переключает циклично, так что дойдя до
конца списка режимов начинает сначала
c-tab
переключить фокус на окно результатов поиска, а там уже можно
переключаться мужду результатами просто вводя первую букву или символ
tab
автодополнение имени каталога в текущем каталоге
c-a
, c-e
перемещение курсора в начало и конец строки поиска соответственно
c-h
, c-l
перемещение курсора влево-вправо в строке поиска
Enter
открыть выбранный файл в текущем буфере, если такое возможно
c-t
открыть выбранный файл в новом табе, следующем сразу за текущим
c-v
открыть файл в этом же окне, но разделив его вертикально (vertical split)
c-x
, Ctrl Enter
, c-s
открыть файл в этом же окне, но разделив его
горизонтально (horizontal split)
c-y
создать новый файл с полным путём, т.е. все указанные каталоги тоже будут
созданные, если их нет
c-z
помечает файл для последующего открытия (c-o
) или создания (c-y
)
c-o
открывает все ранее промеченные (c-z
) файлы
esc
, c-c
, c-g
выход из плагина
В общем там ещё много всего, я здесь описал основные сочетания, которые чаще
всего могут быть использованны, остальные смотреть в :help ctrlp-mappings
Ну и настроек у него тьмя, так что читать документацию.
Отличные плагин для работы с git. Позволяет смотреть статус (status), делать мердж (diff), коммитить (commit) и многое другое. Очень мощный и функциональный плагин. Полноценная работа с git не выходя из vim.
;gd
включает :Gdiff
— режим сравнения текущего рабочего файла с его
закоммитченой копией
;gs
показывает статус — :Gstatus
;gw
вызывает :Gwrite
, который записывает файл и если файл и добавляет в git
(git add
), если файла не было, иначе равноценно git checkout
;gb
вызывает :Gblame
, собственно это вызов git blame
;gco
вызывает :Gcheckout
;gci
вызывает :Gcommit
;gm
вызывает :Gmove
;gr
вызывает :Gremove
;H
в нормальном и визуальном режимах вызывает :Gbrowse
Там ещё много всего в этом плагине, но это сокращения, которые используются. Остальное смотреть в документации к fugitive, так ещё в каждом режиме могут использовать различные сочетания и просто команды.
Манипуляции с исторей изменения, можно просмотреть и откатить все изменения, которые делались
;u
показывает/скрывает окно плагина
Файловый менеджер (типа)
⌘ i
в нормальном режиме и режиме ввода показывает/скрывает слева дерево файлов
В нём есть справка по используемым кнопкам вызывается в нём клавишей ?
.
Остальное в документации.
Плагин нужен для открывания scratch-окна, содержимое которого не сохраняется при выходе и редактора, ну и не регуется на то что в нём есть несохранённый текст при переключении в другой буфер. Можно использовать для временного сохранения каких-то кусков текста/кода.
;<tab>
открывает/закрывает scratch окно
Плагин реализующий идею zen coding.
c-d
запускает sparkup, т.е. преобразует хитрую строку в форматированный
html-код
c-s
переход к следующему пустому тегу/аттрибуту
Сниппеты! Этим всё сказано :) Довольно удобный и функциональный плагин для работы со сниппетами. Имеет много возможностей по написанию своих
Tab
развернуть имя сниппета в код. Конфликта с SuperTab не возникает, точнее
он разрешается самим плагином и даже есть конфиг под это дело. Так же этой
кнопкой перемещаться по выпадающему меню выбора сниппета вперёд, а S-Tab
обратно
C-d
удаляет текст в текущем placeholder (как это по-русски я не знаю,
а придумывать сейчас лень) и переходит к следующему
C-g
если в процессе редактирования курсор вышел за пределы placeholder'а, то
это сочетание возвращает курсор обратно и выделяет весь placeholder для
повторного ввода или удаляения и перехода к следующему. Полезная штука.
Плагин для работы с буфером обмена. В нём можно найти всё что когда-либо копировалось, вырезалось, удалялось.
⌘ y
открывает окно плагина, в котором и лежит всё что копировалось в буфер, ну
и вставить оттуда можно то что нужно.
Данные сокращения позволяют выбрать содержимое скобок ( (
и )
, [
и ]
, {
и }
) и добавив какие-либо motion
что-то с ними сделать. Например такое din(
удалит всё что находится внутри скобок (
и )
. А такое can[
удалит содержимое скобок [
и ]
вместе с ними и включит режим ввода.
an
выбирает содержимое скобок вместе со скобками. Ищет вперёд.
in
выбирает только содержимое скобок, сами скобки остаются на месте. Ищет
вперёд.
al
выбирает содержимое скобок вместе со скобками. Ищет назад.
il
выбирает только содержимое скобок, сами скобки остаются на месте. Ищет
назад.
Клавиши специфичные для macvim.
⌘ ←
перемещает курсор в начало строки, аналогично кнопке Home
.
⌘ →
перемещает курсор в конец строки, аналогично кнопке End
.
⌘ ↑
перемещает курсор в начало документа, аналогично кнопке Ctrl Home
.
⌘ ↓
перемещает курсор в начало документа, аналогично кнопке Ctrl End
.
⌥ ←
перемещает курсор на слово влево.
⌥ →
перемещает курсор на слово вправо.
⌥ ↑
перемещает курсор на параграф вверх.
⌥ ↓
перемещает курсор на параграф вниз.
⌥ ⌫
удаляет от курсора до начала cлова.
⌘ ⌫
удаляет от курсора до начала строки.